python - 如何使用 pyserial 和 picocom 打印仅十六进制缓冲区?

标签 python serial-port pyserial

我正在尝试通过 USB/串行端口 [ttyACM*/COM*] 读取协议(protocol)。当设备返回响应时,我应该收到具有以下模式的帧:

| FF | 15 | 15 44 | 44 7D | 00 | 00 88 | 88 00 | 00 0D | 00 | 00 00 | 00 86 | 86 00 | 00 76 | 76 00 | 00 00 | 00 00 | 00 00 | 00 40| 00 | 00 A7|有限元| (21 十六进制)

我必须使用的配置如下:

  • 波特率:2400
  • 数据位:8
  • 奇偶校验:无
  • 停止位:1
  • 握手:无

现在,当我尝试在 Linux 上使用 CuteCom 或在 Windows 上使用 HTerm 来阅读此内容时,一切正常,并且当我将其显示为十六进制时,我得到的框架正是我需要的。

H术语:

On HTerm/Windows i get the frames

帧响应:FF 15 44 7C 00 88 00 00 7B 00 7C 00 73 00 1F 00 00 40 00 26 FE(21 十六进制)

可爱通讯:

On CuteCom/Linux i also get the frames

帧响应:ff 15 44 00 00 78 00 00 00 00 01 00 79 00 18 00 00 8d 00 f0 fe(21 十六进制)

现在为什么当我尝试使用 picocom 读取序列时,我无法获取我需要的数据?

Picocom:picocom -b 2400 -r -l --omap crcrlf --imap 8bithex -f n/dev/ttyACM0

Can't get the frame on picocom

帧响应:ff D 82 88 81 82 y@> fe(6 十六进制?)

画面中间的奇怪字符是怎么回事?

但更重要的是,当尝试在 python 中接收帧时(我将使用它来解析包),我也无法获得与 Cutecom/hterm 相同格式的帧:

Python [代码]:

ser = serial.Serial("/dev/ttyACM0",2400,timeout=0.3, bytesize=8, parity='N',rtscts=0)
ser.close()
ser.open()
ser.flush()
ser.write(b'\xff\x09\x53\x83\x00\x00\x00\xdf\xfe')

while True:
    s = ser.read_until(b'\xfe')
    ser.flush()
    print(s)
    time.sleep(3.0)

Python:

Can't get the frame on python either

帧响应:b'\xff\x15D\x82\x00\x88\x00\x00\x81\x00\x82\x00y\x00\x1f\x00\x00@\x00>\xfe'(16 十六进制?)

在这里,我在框架中间得到了一些不同大小的十六进制数字和奇怪的字符。编辑:(我意识到“奇怪的字符”实际上是基于收到的十六进制代码的 ASCII 字符,我如何才能将此缓冲区更改为仅十六进制?)

知道为什么 Python 和 Picocom 会发生这种情况吗?使用这些工具时我应该如何阅读框架?

编辑:我尝试使用 ssterm 使用十六进制读取序列号并且它有效,为什么?我如何使用 pyserial 使其与 picocom 和 python 一起工作?

ssterm:

communication works with ssterm

帧响应:ff 15 44 82 00 88 00 00 81 00 82 00 79 00 1f 00 00 40 00 3e fe(21 十六进制)

最佳答案

事实证明,Python 只是方便地将十六进制字符更改为 ASCII。但该值保持不变,因此框架可以正常使用。而 picocom 会忽略空字符。

关于python - 如何使用 pyserial 和 picocom 打印仅十六进制缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63725331/

相关文章:

python - 枚举在 Python 2.7 中不可迭代

python - 如何在没有命令提示符窗口的情况下运行 wxPython 对话框?

serial-port - 串行端口握手。硬件和无握手之间有什么区别?

Linux termios VTIME 不工作?

Python readlines Api 从串口访问时需要很长时间

python - 高效精准的欧式距离计算

Python在句子字符串上滑动窗口

serial-port - 从gradle中的/dev/ttyUSB0读取测试结果

python - 在 pySerial (Windows) 中查找特定的串行 COM 端口

python - 在 python3 asyncio 中使用串口