【问题标题】:high-speed uart in pythonpython中的高速uart
【发布时间】:2016-11-08 00:16:45
【问题描述】:

我有一个通过 UART 以 3 MBaud 发送数据的微控制器。微控制器每 8000 个字节发送一个开始/状态字节。我希望我的 python 脚本能够读取所有数据并分析起始字节之间的数据。

我知道 Python 能够处理 3 MBaud,因为代码 sn-p 显示了起始字节的正确位置:

ser =  serial.Serial('COM3', 3000000, timeout=None)

_RawData = ser.read(100000)

for cnt in range(0, 100000, 1):
    #search for start byte and print the position    
    if(_RawData[cnt] < 128): print(cnt)

但是我需要不断地读取数据流,在这个例子中,我在“ser.read(x)”命令之间丢失了数据。所以我需要在读取流的时候比较数据:

ser =  serial.Serial('COM3', 3000000, timeout=None)

_RawData = []
cnt = 0

for c in ser.read():   
    cnt += 1 
    #search for start byte    
    if(c < 128):
        #print start byte position
        print(cnt)

        # -= start thread =-

        _RawData.clear()
    _RawData.append(c)

但是发现读取单个字节对于该波特率来说太慢了,起始字节位置实际上是随机生成的。有没有办法可以无损地读取我的数据流?

【问题讨论】:

  • 没有关于 OP 的社论,但很有趣的是,python 甚至有能力与 uart 通信。我想当你只有一把锤子时,一切看起来都像钉子。
  • print 可能会减慢您的速度(终端可能比您的 uart 慢)。除此之外,正常模式是for chunk in s.read(chunksize): for ch in chunk: ...
  • @nicomp:UART怎么了?它仍然是从微控制器获取数据到 PC 的最简单方法。在 FTDI 芯片的帮助下,您可以让它以高达 3Mbps 的速度通过 USB 供电。仅仅因为它是一个旧协议并不意味着它很糟糕。
  • @Mathiable 我喜欢 UART,我评论的是高级解释语言可以与 UART 对话。
  • @nicomp:对不起,我似乎误解了你的意思。我确实非常方便,我的整个测试团队都使用 python 和 pyserial 来测试我们的硬件。复杂的测试序列是在很短的时间内编写的。他们可能感染了我一点。

标签: python uart highspeed


【解决方案1】:

我设法让它为我工作。正如其他线程中所建议的,我实现了函数 ser.inWaiting(),它给出了输入缓冲区中等待的字节数(在我的系统上限制为 4096 字节)并从 uart 读取该数量。然后我寻找起始字节并启动一个线程来分析数据:

ser =  serial.Serial('COM3', 3000000, timeout=None)
_RawData = []

while True:
    #get data in input buffer
    bytesToRead = ser.inWaiting()
    Buffer = ser.read(bytesToRead)

    for cnt in range(0,bytesToRead,1):
        #search for start byte   
        if(Buffer[cnt] < 128):
            #print bytes between start bytes
            print(len(_RawData))

            # -= start thread =-

            _RawData.clear()

        _RawData.append(Buffer[cnt])

    #wait a short time for the buffer to fill    
    time.sleep(0.001)

这似乎暂时有效。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2013-11-11
    • 2018-10-25
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多