下一页 上一页 目录

20. 电压波形

20.1 位的电压

在 RS-232 串行端口,电压是双极性的(相对于地为正或负),幅度应约为 12 伏特(有些为 5 或 10 伏特)。对于发送和接收引脚,+12 伏特是 0 位(有时称为“空号”),-12 伏特是 1 位(有时称为“传号”)。这被称为反相逻辑,因为通常 0 位既是假又是负的,而 1 位通常既是真又是正的。虽然接收和发送引脚是反相逻辑,但其他引脚(调制解调器控制线)是正常逻辑,正电压为真(或“开”或“置位”),负电压为假(或“关”或“复位”)。零电压没有意义(除非它通常意味着设备已断电)。

允许一定的电压范围。规范指出,发送信号的幅度应在 5 到 15 伏特之间,但绝不能超过 25 伏特。任何接收到的电压低于 3 伏特都是未定义的(但有些设备会接受较低的电压作为有效电压)。有时会看到错误的说法,认为电压通常为 5 伏特(甚至 3 伏特),但它通常为 11-12 伏特。如果您在 Mac 计算机上使用 EIA-422 (RS-422) 端口作为 RS-232(需要特殊电缆)或 EIA-423 (RS-423),则电压实际上仅为 5 V。此处的讨论假设为 12 V。

请注意,正常的计算机逻辑通常只有几伏特(5 伏特曾经是标准),因此,如果您尝试在串行端口的 12 伏特电压上使用专为测试 3-5 伏特计算机逻辑 (TTL) 设计的测试设备,可能会损坏测试设备。

20.2 字节的电压序列

当没有发送任何内容时,发送引脚 (TxD) 保持在 -12 V(传号)空闲状态。为了启动一个字节,它跳到 +12 V(空号)作为起始位,并在起始位的持续时间(周期)内保持在 +12 V。接下来是数据字节的低位。如果它是 0 位,则不会发生任何变化,线路在另一个位周期内保持在 +12 V。如果它是 1 位,则电压从 +12 V 跳到 -12 V。之后是下一个位(如果是 1 则为 -12 V,如果是 0 则为 +12 V),等等。在最后一个数据位之后,可以发送奇偶校验位,然后发送 -12 V(传号)停止位。然后线路保持在 -12 V(空闲)状态,直到下一个起始位。请注意,没有返回到 0 伏特,因此没有简单的方法(除了同步信号)来判断两个连续位极性相同(都为零或都为一)的情况下,一个位在哪里结束,下一个位在哪里开始。

第二个停止位也将是 -12 V,与第一个停止位相同。由于没有信号来标记这些位之间的边界,因此第二个停止位的唯一效果是线路必须保持 -12 V 空闲状态两倍的时间。接收器无法检测到第二个停止位和字节之间更长空闲时间的区别。因此,如果一端使用一个停止位,另一端使用 2 个停止位,则通信仍然可以正常工作,但仅使用一个停止位显然更快。在极少数情况下,使用 1 1/2 个停止位。这意味着线路保持在 -12 V 状态 1 1/2 个时间周期(就像停止位比正常情况宽 50%)。

20.3 奇偶校验解释

字符通常以 7 位或 8 位数据传输。可以(也可以不)将额外的奇偶校验位附加到此结果中,从而产生 7、8 或 9 位的字节长度。某些终端仿真器和较旧的终端不允许 9 位。如果使用 2 个停止位,则有些禁止 9 位(因为这将使总位数太大:加上起始位后总共 12 位)。

奇偶校验可以设置为奇校验、偶校验或无校验(传号和空号奇偶校验可能是某些终端或其他串行设备上的选项)。使用奇校验时,选择奇偶校验位,使字节(包括奇偶校验位)中 1 位的数量为奇数。如果这样的字节因位翻转而损坏,则结果将是偶校验的非法字节。这将检测到错误,如果是终端的传入字节,则屏幕上将显示错误字符符号。偶校验的工作方式类似,所有合法字节(包括奇偶校验位)都具有偶数个 1 位。在设置过程中,每字符位数通常仅表示每字节的数据位数(7 位表示真正的 ASCII,8 位表示各种 ISO 字符集)。

“传号”是 1 位(或逻辑 1),“空号”是 0 位(或逻辑 0)。对于传号奇偶校验,奇偶校验位始终为 1 位。对于空号奇偶校验,它始终为 0 位。传号或空号奇偶校验(也称为“粘性奇偶校验”)只会浪费带宽,如果可行,应避免使用。stty 命令无法设置粘性奇偶校验,但串行硬件支持它,并且可以通过 C 编程来处理。“无奇偶校验”表示不添加奇偶校验位。对于不允许 9 位字节的终端,使用 8 位字符集时必须选择“无奇偶校验”,因为没有空间容纳奇偶校验位。

20.4 字节的形成(成帧)

在通过 RS-232 端口进行字节的串行传输中,始终首先发送低位(位顺序)。PC 上的串行端口使用异步通信,其中有一个起始位和一个停止位来标记字节的开始和结束。这称为成帧,成帧的字节有时称为帧。因此,每个字节总共发送 9、10 或 11 位,其中 10 位是最常见的。8-N-1 表示 8 个数据位,无奇偶校验,1 个停止位。当计算起始位时,这总共加起来 10 位。一个停止位几乎是普遍使用的。在 110 位/秒(有时在 300 位/秒)时,曾经使用过 2 个停止位,但如今第二个停止位仅在非常不寻常的情况下使用(或因错误而使用,因为它仍然可以正常工作,但会浪费带宽)。

不要将这种类型的成帧与网络上字节数据包使用的成帧混淆。串行端口仅对每个字节进行成帧。对于网络,许多字节被成帧到一个数据包中(有时称为帧)。对于网络帧,没有起始位,而是一系列称为报头的字节。在使用串行端口(带调制解调器)的网络上,帧错误报告通常指的是多字节帧,而不是单字节的串行端口帧。

20.5 “异步”是如何同步的

在 PC 上实现的 RS-232 串行端口是异步的,实际上这意味着没有“时钟”信号与“滴答”一起发送来标记每个位的发送时间。发送(或接收)线只有两种状态:传号 (-12 V) 或空号 (+12 V)。没有 0 V 状态。因此,1 位的序列通过稳定的 -12 V 传输,位之间没有任何类型的标记。为了使接收器检测到单个位,它必须始终具有与发送器时钟同步的时钟信号。这样的时钟会生成与每个发送(或接收)位同步的“滴答”。

对于异步传输,同步是通过用起始位和停止位对每个字节进行成帧(由硬件完成)来实现的。接收器在负极线路上监听正极起始位,当检测到起始位时,它开始其时钟滴答。它使用此时钟滴答来定时读取接下来的 7、8 或 9 位。(实际上,这比这稍微复杂一些,因为通常会采集一个位的多个样本,这需要额外的定时滴答。)然后读取停止位,时钟停止,接收器等待下一个起始位。因此,异步实际上在单个字节的接收期间是同步的,但在一个字节和下一个字节之间没有同步。


下一页 上一页 目录