为什么 RS-232 需要停止位?

电器工程 rs232
2022-01-04 04:49:37

这可能很明显,但我不明白为什么 RS-232 需要停止位。我知道开始位是通知另一端传输开始所必需的。

假设我们以 9600BPS 的速度进行通信。我们从高到低,这样接收者就会知道有什么事情要来了。接收器也知道我们的速度为 9600BPS,它将总共接收 7 位数据。

因此,在接收到 7 位后,传输将结束。既然我们可以通过计算来确定传输的结束,为什么我们还需要一个停止位呢?

3个回答

要记住的是 RS232 是一种异步协议。没有与之关联的时钟信号。

显示时钟误差范围的 8 位字节时序图

图 1. 接收器采样点。资料来源:桑戈玛

起始位用于触发接收器中的读取周期。接收器在起始位上同步,然后等待 1.5 个周期开始采样位。此后以波特率对这些位进行采样。这个初始延迟意味着即使有 5% 的时钟误差,接收器仍应在最后一位的位时序内。

由于起始位(图 1 中显示为低电平)由下降沿标识,因此它之前必须有一个高电平,这就是停止位所确保的。另一种选择是两个起始位,没有停止位,但它不会改变总消息长度。

链接的文章还有其他一些值得注意的地方。

RS-232 不需要它;一些 RS-232设备可以。特别是计算机上的串行/RS-232 接口通常是带有 UART(通用异步接收器/发送器)的 RS-232,它只支持异步传输。

早在其鼎盛时期,RS-232 通常用于网络协议,如“双同步”(BSC)、SNA/SDLC、X.25/LAPB 和 DECnet/HDLC,它们使用“帧”或“块”的同步传输,通常最多几百个八位字节,从开始标记到结束标记是连续的(没有开始或停止位)。后三者使用位填充(对任何一端的软件都是透明的)部分是为了确保有足够的转换来保持位级同步,而不管数据如何。UART(仅异步)和 USART(同步异步)芯片都可用,但前者更便宜且更常用。

到 1990 年代,大多数(如果不是全部)RS-232 的同步使用被本地以太网(以及后来的以太网仿真 802.11)或令牌环(现在大多被遗忘,但后来成为重要的竞争对手)和远程 T-1 ISDN 或帧中继所取代,虽然保留了一些自然或传统异步的连接(例如便宜的点阵打印机),但计算机设计人员使用了更便宜的仅异步串行接口(或近年来根本没有)。

您产生 9600 波特的精度如何?或者更确切地说,当您达到 115.2 kbaud 时,您的精度如何?您的发射设备是否能够支持任何其他频率 - 因为如果是,接收器需要处理它?

停止位缓解了这个问题。接收器知道,从起始位的下降沿开始,它会计算 1 个起始位和 7 个数据位(在您的示例中),并且第 9 位必须始终为高电平。如果不是,则发射机一定不是以正确的频率发射,我们知道我们没有良好的连接。

显然,这并不完美,如果最后几位都是高位,但这是一个开始。错误检测从来都不是完美的,在大多数情况下,它总是试图捕捉最常见的问题。您的协议可以通过确保建立会话的任何“ping”消息包括(或理想情况下以零字节开始)来帮助解决此问题。