MX-5 ND2 的 CAN 状态表:221 个开放字段与三级证据标签

作者:

在

结论:这份 Mazda MX-5 ND2 的 HS-CAN 档案,价值不在仪表盘能画几个数,而在于它把总线上的每一个可用位域分成三层:已确认信号、带 _maybe 或 _related 后缀的开放字段,以及已经证伪的负结果。截至 2026-09-30:参考日志里 1,977 个会变化的位中,未被 DBC 信号覆盖的从 1,311 位降到 1,124 位;跨全部日志仍有 221 个字段在半数以上日志里变化却没对上物理含义。同期修掉的最严重问题不是某个信号定义,而是分析工具本身的缺陷:50 份日志重算后,离合器百分比公式被修正为严格的 0.5 倍原始值。

硬件链路与双份 DBC

这台车的采集链路很朴素:OBD 口的高速 CAN(引脚 6 为 CAN_H、14 为 CAN_L,4/5 为地,16 为常电 12 V)经一根自制 Cat5e 短接线接到 CANable 2.0 方案的 USB 适配器,再由树莓派按 KeyState 信号自动启停 candump 日志。总线为 500 kbit/s,通道只有 can0;适配器上的 R120 终结跳线必须拨到 OFF,因为它只是挂在总线上的一个分支,不是总线端点。

项目 取值 这么定的原因
USB 适配器 CANable 2.0 方案,工作模式 USB ID 1d50:606f,烧录模式 0483:df11 两种固件可从 USB ID 区分;误入烧录模式需断电数秒重插
总线与速率 高速 CAN 单通道 can0,500 kbit/s ND2 的 OBD 口只暴露这一条高速总线
终结跳线 R120 OFF 车辆总线两端已终结,第三颗 120 欧电阻会拉偏显性电平
主用 DBC 持续维护的 MX5ND 高速总线扩展版 所有修正与新增都落在这一份
上游原始 DBC 保持原样不做改动 来自社区 6th-Gen Mazda 项目,许可为 CC BY 4.0,留作对照基准
运行环境 树莓派只读根文件系统加内存叠加层 只有挂日志的 U 盘可写,系统改动需要两次重启

命名约定本身就是这套档案的核心契约:没有后缀的信号表示已在多份日志上定量确认;_maybe 表示释义或刻度尚未锁定,只允许原始值透传;_related 表示它与某个已知量同源但不是同一物理量,不能当成简单镜像。此外还有一批信号被显式标记成「名字看起来正常但实际不可用」,例如社区 DBC 里两个修正过的加速度通道,工程上一律改用车身控制模块的同名加速度通道。

已锁定的场位:可以直接引用的定义

下表摘自状态表与开放字段表的确认部分,包含 2026-09-26 实车测试新增的条目。每一条都带具体的判定依据,而不是「看起来合理」。

信号 位置 公式 / 单位 判定依据
离合器行程 已有 DBC 通道 百分比等于 0.5 倍原始值 2026-09-29 重算后 R² 达 1.000,旧的 0.4665 倍加 0.56 被判定为分析工具假象
实际发动机百分比扭矩 0x167 byte4 3.0242 倍原始值减 177.849,残差 4.07 个百分点 与标准 PID 0x62 两次行驶对照,2026-09-29 再校准 +2.6%
制动压力 已有 DBC 通道 斜率 0.0012413、偏移 +32.7986 与真实 OBD 参考通道 R² 0.986,2026-09-29 再校准 +2.4%
倒挡 0x445 bit 7 布尔量 倒车时横摆率符号反向,吻合度 99.7%,样本 1,195
牵引力控制介入 0x211 bit 40 布尔量 5 份日志 6 段弯心出弯工况,同时伴随发动机扭矩下降
强减速标志 0x211 bit 43 布尔量 6 份日志 16 段,触发区间 0.46 至 0.84 g,中位数 0.60 g;两次实车全力制动已确认
ABS 介入 0x211 bit 42 布尔量 35 分钟日志中占 0.052%,恰好落在两段真实调制区间;同日返程对照组为 0.000%
DSC 指示灯 0x415 2|2 3 表示闪烁 介入时的值与自检灯阶段的值不同;旧定义长期读作关闭,已不作为状态依据
冷机指示 0x4F7 5|2 3 表示冷机 21 次记录全部在冷却液正好 55.0 °C 时切换
车身模块供电电压 0x43F 19|10 0.016 V 每 LSB R² 0.998,且恒定低于直流变换器通道 0.68 V
燃油消耗计数器 0x420 byte2 每升 4,834 个计数 两次加满共加油 34.4 升;与空气质量流量及空燃比的速率相关性达 0.99 至 0.999
行驶距离计数器 0x420 byte1 每步 0.1992 米 对着里程表增量标定,覆盖 5 份日志;早期 0.209 是车速高估带偏的结果
剩余保养里程 0x3D1 47|14 公里,原始值等于 173764 减里程公里数 34 份日志 R² 达 1.000000,取代了原先取值混乱的同名字段
转向角速度幅值 0x082 byte5–7 12 位,约 0.5 度每秒每 LSB,符号在 byte7 bit0 28 份日志中对角度求导,相关性达 0.988 至 0.998
方向盘绝对角度(EPAS) 0x86 0.1 倍原始值减 1600 度 剔除无效帧后 R² 达 0.9997 至 0.99995,残差 0.65 至 0.94 度
交通标志限速 0x35F 4|7 km/h 取值 30 到 120,与实际行驶速度吻合,0 表示无限速
平均油耗 0x4F3 byte4–5 大端 0.01 升每百公里,60 秒更新一次 加油复位时刻对齐,后续与计数器、距离推算相差 2.6 毫升

最后一行值得单独说明:瞬时油耗在高速 CAN 上并没有找到独立的广播通道,实践中可以用燃油消耗计数器除以行驶距离计数器自行计算;这也是这套档案一贯的写法——公开发的是方法,而不是整车轨迹数据。相比之下,机油温度与爆震退角这两个关键量完全不在广播里:机油温度对应厂商私有的模式 22 自定义数据标识 0x1310,公式是首字节乘 256 加次字节、再除 100 减 40,标准 PID 0x5C 在这台车上不被支持,因此每 10 秒主动轮询一次;爆震退角对应同样是厂商私有的标识 0x03EC,公式是有符号 16 位整数除 512,两次独立对照分别为 73% 和 81% 逐位相同。

仍然开放的字段:221 个未知字段的分类

开放字段表把「还没有名字」的东西也做了归类。参考日志里 1,977 个会变化的位中,未被 DBC 覆盖的从 1,311 位降到 1,124 位;跨全部日志统计,至少在半数日志中会变化的开放字段共 221 个:32 个测量场(419 位)、42 个状态场、128 个标志位、10 个计数器、9 个校验或噪声。剩余测量位大多集中在前视摄像头报文(0x242 至 0x246)与信息娱乐报文(0x3D2、0x4FE)里。完整报文聚类还给出另一个量级:151 条报文中有 74 条带动态未分配字段,其中 36 条完全未知。

字段 观察到的行为 假设 定向实验
0x200 byte4–5(偏移二进制) 载荷域,与踏板、扭矩的相关性达 0.72 至 0.94 驾驶员需求扭矩或指示扭矩 用牵引力控制请求量做牛米锚点
0x200 byte2–3 多数取负 40 至正 10,能量回收时更低,冷机可到负 49 附件损失扭矩 怠速下逐项开关空调与后窗加热
0x20A byte2–3 疑似有符号;清理后重扫,燃料切断在 15 份日志中相关性中位数 0.71,目标空燃比 7 份为 0.69 混合气或滑行状态 追加标准 PID 对照
0x4DA byte0/1/2/4 起步取 50,滑行时下降,加载荷后缓慢上升 催化器温度或氧存储模型 同时记录催化器温度 PID
0x4FA byte2–3 清理后重扫:扭矩 11 份日志相关性中位数 0.65,节气门 6 份 载荷或暖机自适应 暂缺
0x21F byte4–5 清理后重扫:进气歧管压力 6 份日志相关性中位数 0.70 歧管压力或载荷量 暂缺
0x4D4 byte0–5 点火后归零,几分钟后出现;byte0 在高速公路上升,byte1 在堵车时增长 驾驶评分或经济监视器 按时刻拍照记录显示屏
0x09B bit 2 每 50 到 100 秒出现约 10 秒;怠速期间电流通道下降约 100 个计数 大功率用电设备,疑为散热风扇 听或观察风扇并记录时刻
0x4DF byte0、byte5 冷启动时紧贴合进气温度,相关性 0.980 与 0.994,但斜率分别为 1.44 和 2.24 K 每计数 变换器或电容温度,也可能是随温限值 红外测温仪对比

字节扫描工具本身也经历过一次去伪:早期版本把单个初始化帧造成的常值(例如 0x596)和锚点起始段的自检灯突变误判成候选,清理后候选对从 105 降到 58。工具保留了两处已知局限:排名把 R² 四舍五入到两位,导致「胜出的布局」常常只是一段近似区间;缺少分辨率细化能力时,较短且拟合相差不大的子域可能取胜,工具会对这种情况打印更长的备选提示。目前仍列为中等候选的开放字段是 0x20A byte2–3、0x4FA byte2–3、0x200 byte6–7 与 0x21F byte4–5。

负结果与方法陷阱

这套档案最值得借鉴的一点是它把「找不到」也写成了结论,并附上对照组强度。下面几条在别的 ND2 项目里很容易被重复劳动。

结论 证据 后果
垂直加速度、侧倾角速率与俯仰角速率不在高速 CAN 上 25 组「CAN 加手机」平行记录,正对照组横摆率相关性达 0.95;夜间启动也未见照度调节电机的位置斜坡 只能转向 UDS 会话或中速总线去取
车上没有可用的日历时钟通道 600 多个未知字段做过计数行为筛查,最佳结果是 0x4FE 上的一个 3.33 Hz 点火计时脉冲,周期在 3 份日志上的变异系数仅 0.000025,但每次点火归零 无实时钟期间的日志只能靠文件名加偏移量纠时,后期加装了 DS3231 时钟模块
高频轮询会挤掉同总线上的第三方适配器 约 170 次每秒的请求压力下,对方 19% 至 29% 的请求先读到我们的应答,5% 至 18% 完全无应答,应用侧请求率跌到 0 检测到 0x7DF 或 0x7E0 上有外来请求时,把自身轮询限流到 5 轮每秒
把某个字段当成挡位会出错 原先用 MT_Gear_Actual 取 7 表示倒挡,实际那是点火后约两秒的初始化值,倒车时该字段为 0 挡位判定改用 0x445 bit 7
分析工具差错会让比例尺系统性偏小 重采样函数在拟合时对稀疏参考做了线性插值,压低了 R² 与斜率 离合器、制动压力、扭矩、电池电压的比例尺全部重新折算

还有一处工程细节值得注意:胎压是这套档案里唯一不做周期性广播的量,必须靠主动 UDS 请求获取(请求头 0x720,模式 22,应答落在 0x728,DBC 里按 PID 做多路复用),轮询周期刻意设为 120 秒以压低总线占用。轮位映射直到 2026-09-26 才完整收口:轮胎 1 为左前、轮胎 2 为右前,轮胎 3 与 4 分别为左后、右后。

常见问题

为什么这份档案里还有 221 个字段没有名字?

因为作者把「未解释但会变化」的字段也当作成果登记,而不是静默丢掉。统计口径是至少在半数日志里发生变化的开放字段,共 221 个,其中包含 32 个测量场(419 位)、42 个状态场、128 个标志位、10 个计数器和 9 个校验或噪声字段;剩余测量位集中在前视摄像头与信息娱乐报文里。

总线上的车速为什么比 GPS 高约 2.9%?

这是这台车本身的特性,不是解码错误:70 份带手机 GPS 的日志做比值得到 0.971,即总线车速偏高约 2.9%。它会影响加速、制动、极速与滑行阻力拟合中的绝对数值,因此状态表里专门留了一条提示:性能模型使用绝对值时要扣掉这个偏差。

为什么要给部分信号加 _maybe 后缀而不是直接用?

后缀是这套档案的证据等级标签。_maybe 表示释义或刻度尚未锁定,只能做原始值透传,不能换算成物理量;_related 表示与某个已知量同源但不是同一物理量的镜像。历史上确有反例:某个 15 位扩展场曾被引申为非线性,后来发现是取错位导致的。

第三方 OBD 适配器为什么会被本项目的轮询挤掉?

因为快轮询组在 0x7E0 上以约 170 次每秒发请求,与手机端适配器共用同一个报文头,导致对方 19% 至 29% 的请求先读到我们的应答、5% 至 18% 完全得不到应答,应用侧请求率从约 19 次每秒掉到 0。修复办法是检测到外来请求时把自身轮询限流到 5 轮每秒。

高速 CAN 上有没有可以直接对时的日历时钟通道?

没有。600 多个未知字段做过专门的计数行为筛查,最佳候选是 0x4FE 上的一个 3.33 Hz 点火计时脉冲,周期在 3 份独立日志上的变异系数只有 0.000025,但它每次点火都会归零;另一个看起来像的量被证明是累计工作时间,熄火即停。因此无实时钟期间的日志只能靠文件名加偏移量纠时,后续加装了 DS3231 时钟模块。

延伸阅读

参考资料

  • 项目 01 —— public-can-dbc-datasets/additional/mainbrain-mx5-nd2-can/docs/status/can-bus.md(硬件链路、双份 DBC 策略、可解码信号分组、开放点与纠时机制)
  • 项目 01 —— public-can-dbc-datasets/additional/mainbrain-mx5-nd2-can/docs/status/can-open-fields.md(已确认信号表、实车测试新增项、开放字段分类与报文聚类数量)
  • 项目 01 —— public-can-dbc-datasets/additional/mainbrain-mx5-nd2-can/README.md(仓库定位、许可证与刻意不公开的内容说明)

免责声明

本文所述的 CAN ID、字节位定义、缩放系数与验证状态均来自一台 Mazda MX-5 ND2 车主自行记录的公开档案,属社区逆向工程产物,不代表车辆制造商的官方数据,也未经独立实车复现。不同年款、市场区域与 ECU 软件版本可能存在差异;标注为开放或假设的内容不得用于计量、安全判定或控制用途。本文不构成主动诊断、刷写或执行器操作的授权。

更新记录

  • 2026-10-15 初稿

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注