【问题标题】:Checking for parity errors with pyserial使用 pyserial 检查奇偶校验错误
【发布时间】:2014-10-08 15:43:55
【问题描述】:

我目前正在用 python 编写一个小实用程序来监控串行线路上的通信。这用于调试通过 rs232 连接的一些硬件,因此能够准确地看到线路上发生的事情非常重要。如何使用 pyserial 检查奇偶校验错误?

具体来说,我想知道是否有一种独立于平台的方法来使用 pyserial.xml 查找奇偶校验位的值。我强烈希望不需要termios 来执行此操作,因为它在某些 Windows 机器上使用。

【问题讨论】:

  • 您如何定义“奇偶校验错误”?到目前为止,您尝试过什么?
  • @DanLenski,具体我想看看串行帧中奇偶校验位的值是多少。
  • 我不确定您的硬件设置到底是什么样的,但我相信在标准 PC 串行端口中,奇偶校验检查发生在硬件级别,因此软件不会看到它。如果您希望实现一个“bit-banging”串行端口,它可以让您检查线路上的各个位,那么您可能必须使用不同的硬件......制作某种 GPIO 接口?
  • 我可以设置一个微控制器来接收串行,然后通过为接收到的每个字节发送 2 个字节,将其连同奇偶校验位和任何帧错误信息一起发送到计算机。然后该输出将由脚本解析。然而,这正是我想通过使用几个 USB 到串行转换器以及 pyserial 来避免的工作。我想如果不可能的话,我会再次研究基于微控制器的方法。
  • 我发现了一些其他可能对您有所帮助的主题。这些讨论了从串行端口读取原始数据的各种复杂性:stackoverflow.com/questions/12437593stackoverflow.com/questions/8606291

标签: python serial-port pyserial


【解决方案1】:

我用我的 Pi 上的 GPIO4 逐位监测奇偶校验。

灵感here

我的解决方案是在第二个字节中输出奇偶校验位并将所有内容写入文件:

import time
import pigpio # http://abyz.me.uk/rpi/pigpio/python.html

RXD=4 # number of GPIO pin

pi = pigpio.pi()

if not pi.connected:
    exit(0)

pigpio.exceptions = False # Ignore error if already set as bit bang read.

handle = pi.file_open("/home/pi/Documents/bit_bang_output.txt",pigpio.FILE_WRITE) #assuming that the file /opt/pigpio/access (yes without extension) contains a line /home/pi/Domcuments/* w

pi.bb_serial_read_open(RXD, 9600,9) # Set baud rate and number of data bits here. Reading 9 data bits will read the parity bit.

pigpio.exceptions = True

stop = time.time() + 5.0 # recording 5.0 seconds

while time.time() < stop:

    (count, data) = pi.bb_serial_read(RXD)
    if count:
        #print(data.hex(),end="")
        pi.file_write(handle, data.hex())

pi.bb_serial_read_close(RXD)

pi.stop()

【讨论】:

    猜你喜欢
    • 2020-08-29
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2013-03-18
    • 2011-01-13
    • 2020-04-20
    • 2015-06-29
    • 2017-11-06
    相关资源
    最近更新 更多