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

标签 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 ]

如有任何帮助,我们将不胜感激。 谢谢

最佳答案

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

参见 RS232 timing 上的插图来自维基百科。它有一些德语位,但它很好地显示了奇偶校验是如何在数据位 0-7 之外增加一个位。

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

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

关于python - 带或不带奇偶校验的 RS232 字长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21565253/

相关文章:

python - 如何扩展某些选定行的列大小并添加 2D 数组 python2.7 的附加行

c# - 从 SQL Server 2008 R2 使用 GSM 调制解调器发送 SMS

c - require 'serialport' 需要错误的 gem

Ruby 串口超时异常

php - 如何在 php 中将字符转换为 7 位偶校验

python - 根据列值是否在另一列中将列添加到 PySpark DataFrame

python - flask-migrate 无法删除表,因为其他对象依赖于它

python用 'æøå'编码json

java - 将输出更改为 4x4 矩阵

来自二进制数的 C# 奇偶校验位