一两个UART停止位?


15

UART通常使您可以在1、1.5和2个停止位之间进行选择。使用1个停止位时,有效负载效率为80%(8/10),使用2个停止位时,有效负载效率降至72.7%(8/11)。那么第二个停止位的优点是什么?

Answers:


19

额外的停止位可能是增加一点额外接收处理时间的有用方法,尤其是在高波特率和/或使用软UART的情况下,这需要一些时间来处理接收的字节。

在速度较紧的情况下,您的UART仅提供2的幂的分频比,可以添加一个额外的停止位,以使速度降低的幅度不及下一个最低的波特率。

我相信这可能是DMX512标准指定2个停止位的原因之一。

它们可能有用的另一种情况是,如果您的设备在没有任何缓冲或打包的情况下转发数据流-节点之间时钟频率的微小差异以及有限的采样粒度可能会导致错误发生,因为其中许多节点接收和重新传输数据一条链,但是如果以2个停止位发送数据,并且将接收器设置为一个停止位,则它会增加足够的余量以容纳这些错误,并为链下游的节点至少留出一个有效的停止位周期,以便可靠地接收。

我还遇到过这样一种情况,电缆过长会导致上升和下降时间出现一些不对称,从而导致停止位长度不足-发送2个停止位,而接收方只需要固定一个即可。


6

在过去的几天里,打印机几乎是全机械构造。即使在那时,波特率还是有些标准化的,因此添加一个额外的停止位将使打印机有更多的时间来打印字符。时间方面在那时更明显。对于我的第一台打印机,嘈杂的http://en.wikipedia.org/wiki/Teletype_Model_33,我必须在发送回车符后插入两个字符的暂停。


经过适当调整的Model 33在回车后只需要一个字符。那是您应该发送换行符的时候!我忘记了它们需要2个停止位,但是您是对的,因此我在拉塞尔的答案下面说的是适用的(但那1.5个停止位是针对Baudot硬件的)。但是,额外的停止位(10ms)并没有帮助任何回车延迟。
gbarry 2014年

4

在停止时间比例很大且在低噪声(低BER)环境(例如设备内部或几米的外围接口)中工作的系统上,两个停止位不太可能比一个停止位有用。电缆和/或没有调制解调器阶段。

2个停止位为您提供了更长的同步时间,更长的字符处理时间,并且根据硬件和算法的不同,在连续数据流中获得或重新获得同步的机会也可能更大。在现代系统中,字符间时间的价值远不如时钟速度低且处理器吞吐量低时。

如果您具有基本连续的数据流,那么如果不同步,则任何高位都将看起来像是停止位。任何高低过渡都将看起来像字节边界。如果您的接收器从10边界开始,而不是真正的开始边界,那么只会在50%的时间被发现)(即,如果发现最终的“停止位”实际上是一个低数据位,您也将一路跳过了真正的停止/开始边界。平均而言,您有1/4的前景认为字节边界为1/0,并且错误地看起来像是一个停止/开始对。上面的建议表明,如果您选择错误的停止-开始一对,那么您大约有50%的机会会在接下来的尝试中选择另一个。

如果使用2个停止位(11),则有效的停止开始序列为110,这在随机数据流量中发生的可能性为1/8。真正的停止位和开始位在不同步的流中的混合会稍微改变饱和度,但是似乎不太可能的是,如果您在一个周期上得到错误的110个停止/开始序列,那么您将再次尝试下一次尝试,然后绊倒真正的110接下来发生的顺序。

如您所述,1个停止位产生8/10 = 80%的最大吞吐量,而2个停止位产生8/11 = 72%的效率。完全限制时的吞吐量差异为80%/ 72%=〜11%以上。这在极端情况下是有用的增益,但不是很大,如果电路空闲时间超过大约10%的时间,则它的价值很小。如果您的电路嘈杂并且偶尔会出现同步丢失,那么额外的停止位可能会很有帮助。但是,如果您非常关心吞吐量,则通常可以提高波特率(并非总是如此)或更改为完全同步操作。


我不知道任何可以配置为忽略任何明显的起始位的UART,这些起始位的起始时间不超过完整的标记时间(实际上,大多数UART将接受起始位的起始时间为起始时间的一半)。标记,否则无法配置为其他标记)。不过,这种功能可能很有用。
supercat

如果我们可以接受这种做法可以追溯到机械时代,那么您会偶然发现正确的答案。那时,接收器机制需要大约1位的时间才能停止,以准备下一个开始位。因此,发送器被构造为具有1.5位的时间停止位。它具有您描述的效果。如果同步丢失,则可能会有几个垃圾字符,直到您重新获得同步。当我们采用电子实现时,接收器可以在看到过渡到停止电平后立即开始等待下一个起始位-不需要填充
gbarry 2014年

@gbarry-在您的评论中,methink并没有偶然发现。
罗素·麦克马洪

实际上,我的字符用完了:)出问题了吗?
gbarry 2014年

3

为了扩大mikeselectricstuff使用“软UART”的接收时间的观点,始终知道何时接收数据并以轮询方式进行接收的接收应用程序通常可以比中断驱动的软UART处理更快的波特率。但是,此类应用程序只能在一个字节的停止位开始到下一个字节的开始位之间的时间内处理输入的数据。处理每个字节所需的时间最终成为通信速度的限制因素。在115,200-N-8-2处处理数据的要求并不比在57,600-N-8-1处处理数据的要求高,但速度要快80%以上。

有时,人们可以通过使用效率似乎较低的数据格式来进一步推动发展。例如,一个人可以将每个字节分成两部分发送,一个具有七个位,一个具有一个(一个位部分的MSB均已设置)。如果这样做的话,即使只有一个停止位,一个字节对的末尾与下一个字节对的开始之间也将有八位标记的时间,因此允许一个将比特率推高四倍。只能用两个停止位(是一个停止位的八倍)。尽管必须发送两倍的字节,但数据速率提高四倍仍将是一大胜利。此外,尽管每个传输的字节对都可以用于发送八位数据,但是在256个可能的字节值中,只有130个会被编码使用,


您还可以通过在起始位边沿产生一个中断并将其留在整个字节的中断代码内,来实现软UART高波特率(250K及更高),在此处可以使用一个额外的停止位。
mikeselectricstuff 2012年

@mikeselectricstuff:额外的停止位可能非常有用,因为仅使用每个字节中的一些位(要求设置每个字节的LSB可能很有用,因为即使这样,也可以从该位的上升沿得出时序,即使如果在发生中断时可能会有一点倾斜)。但是,位中断在启动位时触发的一个主要限制是,在传入数据可能到达时,没有任何好的发送数据的方法。传输的数据或接收的数据(或两者)都将丢失。
supercat 2012年

2

曾几何时,有机电怪物被称为电传打字机。大多数运行在与电力线频率同步的交流电动机上。因此,总有可能两台通信机器可能尚未同步到同一电网,甚至可能没有使用不同频率的交流电运行。

因此,为了允许较慢的机器追赶而不偏离同步,发送了两个停止位。

出于其他目的,例如允许打印架返回到新行的开头,发送了CR,LF和两个磨擦(所有孔在8层胶带上)。

对于仅以110波特或更低的速度运行的电路,这是惯常的做法。


1

接收机械设备的速度慢是添加额外的停止位的原因,但是当今的设备足够快,并且可以以更高的波特率工作,而无需额外的停止位

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.