【问题标题】:RS232 word size with or without parity带或不带奇偶校验的 RS232 字长
【发布时间】:2014-03-01 04:13:18
【问题描述】:

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

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 模块的行为也是如此。

标签: python serial-port parity


【解决方案1】:

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

在维基百科的RS232 timing 上查看此插图。它有一些德文位,但它很好地显示了奇偶校验是如何除了数据位 0-7 之外的额外位。

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

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

【讨论】:

    猜你喜欢
    • 2011-01-13
    • 2015-06-29
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2019-05-10
    相关资源
    最近更新 更多