带或不带奇偶校验的RS232字长

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 ]

非常感谢您提供的帮助。

谢谢。


硬件配置通常将奇偶校验位视为数据位之上的一个位。我认为serial模块的行为也是如此。 - Mark Ransom
2个回答

1
奇偶校验位是在DB7之后添加的额外位。
请参阅维基百科上关于RS232 timing的示意图。它包含一些德语位,但很好地展示了奇偶校验是除数据位0-7之外的额外位。
请注意,通常您不会从串行端口驱动程序中接收到奇偶校验信息作为额外的数据位,而是您的UART将计算所有数据位+奇偶校验位的总和,并在协议所期望的结果与之不符时报告奇偶校验错误("偶校验"为偶数位总和,"奇校验"为奇数位总和)。

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


0

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


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接