RS232字大小,带或不带奇偶校验

时间:2014-02-04 22:52:56

标签: python serial-port parity

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

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 ]

非常感谢任何帮助。 感谢

1 个答案:

答案 0 :(得分:2)

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

请参阅维基百科的RS232 timing上的此插图。它有一些德语位,但很好地说明了除了数据位0-7之外奇偶校验是一个额外的位。

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

有一些奇特的9位应用程序,如Multidrop bus(另请参阅Stackoverflow 14212660),其中第9位不存在用于错误检查的目的(“奇偶校验位”),但对于某些模式切换/寻址。您可以使用temporary parity changes作为解决方法,使用标准的“8数据位”RS232 / RS485硬件和驱动程序来模拟或监视此类9位应用程序。