3

串行类中的字节大小属性定义为用于该连接的数据位数。如果我启用奇校验,它是否将定义的数据位之一转换为表示奇偶校验?或者它只是在开始位和停止位之间添加另一个位?

import serial

# Define a serial instance with 8 databits and no parity
my_com = serial.serial(bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE)
# My rs232 frame would now look something like:
[ START_BIT, DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7, STOP_BIT ]

# Change the parity settings
my_com.parity = serial.PARITY_ODD

# Do my frames now look like this
[ START_BIT, DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7, PARITY, STOP_BIT ]
# or do they look like this?
[ START_BIT, DB0, DB1, DB2, DB3, DB4, DB5, DB6, PARITY, STOP_BIT ]

任何帮助将不胜感激。谢谢

4

2 回答 2

1

奇偶校验位作为额外的位添加到 DB7 之后。

请参阅Wikipedia 中有关RS232 时序的此插图。它有一些德语位,但它很好地显示了奇偶校验是如何在数据位 0-7 之外增加一个位的。

请注意,通常您不会从串行端口驱动程序接收一些额外数据位的奇偶校验信息,但您的 UART 将计算所有数据位 + 奇偶校验位的总和,如果结果与预期的不符,则报告奇偶校验错误协议(“偶校验”的偶位和,“奇校验”的奇位和)。

有一些奇特的 9 位应用程序,例如Multidrop 总线(另请参见Stackoverflow 14212660),其中第 9 位的存在不是为了错误检查(“奇偶校验位”),而是为了某些模式切换/寻址。您可以使用临时奇偶校验更改作为解决方法,以使用标准的“8 数据位”RS232/RS485 硬件和驱动程序来模拟或监控此类 9 位应用程序。

于 2014-03-01T12:22:39.697 回答
0

我发现有些使用 9 位,有些在字节中包含奇偶校验位。在字节之外写入奇偶校验位的九位方式较少使用。根据我所听到的,大多数整数(ASCII 编码字符)应该是奇校验。

于 2022-03-03T12:39:23.913 回答