PySerial:前256个字节中的数据损坏

时间:2014-07-03 12:40:51

标签: python pyserial

我使用pyserial处理一些数据,这些数据通过1.25MBaud的串行接口传输。我使用一个非常简单的线程来收集数据:

class SerialReadThread(StoppableThread):

    def __init__(self, port):
        super(SerialReadThread, self).__init__()
        self.serial = s.Serial(
            port=port,
            baudrate=1250000, # 1.25 MBaud
            bytesize=s.EIGHTBITS,
            parity=s.PARITY_NONE,
            stopbits=s.STOPBITS_ONE,
            timeout=0.5 # Do not wait longer than a half second for next message
        )
        self.data = []

    def run(self):
        # Discard old Buffer Data
        self.serial.flushInput()
        #self.serial.read(256)
        while not self.stopped():
            data = self.serial.read(64)
            self.data.append(data)
            log.debug(":".join("{:02x}".format(ord(c)) for c in data))

如果我读取并处理数据,我总是在前256个字节中得到一个错误的字节。正常8字节的消息之一是9字节长,我不知道这个附加字节来自何处。如果我在启动接收器后启动发送器,则不会传输错误的字节。到目前为止唯一有效的解决方案是在self.serial.read(256)行中发表评论。之后,即使我阅读了大量数据,也不会出现错误。

是否有其他解决方案,而不仅仅是跳过第一条消息?

1 个答案:

答案 0 :(得分:0)

这可能只是线路上的一些噪音。通常,对于超过115200的波特率,您需要2个停止位,因此它将是:

whenChanged