本文最后更新于 2026年5月19日。
关键发现:
-
第 9 帧: ID=0x7f9, PCI=13, DATA=13 07 62 FA 13 FF FF FF
问题所在: 首帧的 PCI 是 0x13 而不是 0x10 !这是 ISO-TP 协议的首帧格式 : -
13 = 首帧标识,其中高 4 位 1 表示首帧,低 4 位 3 表示数据长度信息的一部分
-
07 = 实际数据长度(767 字节,计算公式:(0x13 & 0x0F) << 8 | 0x07 = 0x307 = 775 字节)
修复代码,正确识别 ISO-TP 首帧,使用 正确的 ISO-TP 协议解析 :
修复内容:
1. ISO-TP 首帧识别
# 原来:只识别 0x10
if data[0] == 0x10:
# 现在:识别所有 0x10-0x1F 范围
if (data[0] & 0xF0) == 0x10:
2. ISO-TP 连续帧识别
# 原来:只识别 0x21-0x2F
elif 0x21 <= data[0] <= 0x2F:
# 现在:识别所有 0x20-0x2F 范围
elif (data[0] & 0xF0) == 0x20:
3. 帧序号说明
- 首帧: 0x10-0x1F (高 4 位为 1)
- 连续帧: 0x20-0x2F (高 4 位为 2)
- 流控帧: 0x30-0x3F (高 4 位为 3)
现在运行脚本应该能正确解析所有数据帧了,