为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

吃鸡游戏 2023-07-11 15:34:19
我正在尝试通过 USB/串行端口 [ttyACM*/COM*] 读取协议。当设备返回响应时,我应该收到具有以下模式的帧:| 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术语:帧响应:FF 15 44 7C 00 88 00 00 7B 00 7C 00 73 00 1F 00 00 40 00 26 FE(21 十六进制)可爱通讯:帧响应:ff 15 44 00 00 78 00 00 00 00 01 00 79 00 18 00 00 8d 00 f0 fe(21 十六进制)现在为什么当我尝试使用 picocom 读取序列时,我无法获取我需要的数据?皮科com:picocom -b 2400 -r -l --omap crcrlf --imap 8bithex -fn /dev/ttyACM0帧响应: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:
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

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



查看完整回答
反对 回复 2023-07-11
?
忽然笑

TA贡献1806条经验 获得超5个赞

Picocom 手册页有点令人困惑。
--imap 8bithex仅映射到十六进制字符 128-255,而不是全部

你应该使用这个:
picocom --imap spchex,tabhex,crhex,lfhex,8bithex,nrmhex

这会将所有可能的字符映射到十六进制转录。


查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信