结论:这是一份为赛道遥测整理的马自达 RX-8 CAN 笔记,用 6 个报文 ID 承载 9 个信号:0x201 同时给出油门、转速与车速,0x212 给出刹车与手刹两个开关量,0x231、0x420、0x250、0x81 各给出一个信号。它的价值在于把字节偏移、长度、位掩码与换算公式写到了可直接落地的粒度;边界也同样清楚——只在 2006 年款(series 1)手动挡带 DSC 的一台车上用 OBDLink MX+ 与 RaceChrono v7.5.3 验证过,转速除数还有 4.0 与 3.85 两套并存,刹车压力至今只有开关量、没有连续量。
九个信号的字段边界
先要澄清一个术语:笔记里的「PID」指的是 CAN 报文 ID,不是 OBD-II 服务 01 下的参数标识符。这决定了取数方式是被动监听总线,而不是主动请求应答。多字节值统一按大端解析,这是后面所有公式的前提。
| 信号 | 报文 ID | 字节偏移 | 长度 | 位掩码 | 类型 | 换算公式 |
|---|---|---|---|---|---|---|
| 油门开度 | 0x201 |
6 | 1 | 无 | UINT8 | 百分比 = 值 / 2(原始值范围 0 到 200) |
| 引擎转速 | 0x201 |
0 | 2 | 无 | UINT16 | rpm = 值 / 4.0 |
| 车速 | 0x201 |
4 | 2 | 无 | UINT16 | km/h =(值 – 10000)/ 100.0 |
| 刹车踏板 | 0x212 |
5 | 1 | 0x08 |
Bool | 踩下 = 值 |
| 手刹 | 0x212 |
4 | 1 | 0x40 |
Bool | 拉起 = 值 |
| 空挡 | 0x231 |
0 | 1 | 0x80 |
Bool | 空挡 = 取反后的值 |
| 冷却液温度 | 0x420 |
0 | 1 | 无 | UINT8 | 摄氏度 = 值 – 40 |
| 进气温度 | 0x250 |
3 | 1 | 无 | UINT8 | 摄氏度 = 值 – 40 |
| 转向角 | 0x81 |
2 | 2 | 无 | INT16 | 度 = 值(有符号) |
九个信号里 0x201 一条报文就占了三个,且彼此不重叠:转速在偏移 0 占 2 字节,车速在偏移 4 占 2 字节,油门在偏移 6 占 1 字节。这种紧凑布局意味着解析时一次取 8 字节即可解出三个量,但也意味着任何一个偏移写错都会静默地取到相邻信号。
位掩码到 RaceChrono 位号的换算
笔记给字节偏移与位掩码,RaceChrono 公式里用的却是 0 到 63 的位号,两者需要对账。RaceChrono 的约定是从最高位起算:位 0 是最高位,位 57 的权值为 64。据此可以推出换算关系——位号等于字节偏移乘以 8,再加上掩码在该字节内从高位往低数的序号。
| 信号 | 字节偏移 | 位掩码 | 掩码在字节内的高位序号 | RaceChrono 位号 | RaceChrono 公式 |
|---|---|---|---|---|---|
| 空挡 | 0 | 0x80 |
0 | 0 | (1 – BitsToUInt(raw, 0, 1)) * 100 |
| 手刹 | 4 | 0x40 |
1 | 33 | BitsToUInt(raw, 33, 1) * 100 |
| 刹车踏板 | 5 | 0x08 |
4 | 44 | BitsToUInt(raw, 44, 1) * 100 |
三个位号都能对上:0 = 0×8+0,33 = 4×8+1,44 = 5×8+4。三个开关量都乘 100,是为了把布尔量塞进 RaceChrono 的百分比通道。空挡那一项额外做了取反:原始位在空挡或踩离合时为 0,其余情况为 1。
两处未定系数与一处待办
笔记里真正需要用户在落地时做判断的,是笔记公式与 RaceChrono 公式不一致的地方。这些差异大多有明确原因(单位制不同),唯独转速那一处被原作者标记为「需要调查」。
| 信号 | 笔记公式 | RaceChrono 公式 | 差异原因 | 是否待定 |
|---|---|---|---|---|
| 引擎转速 | 值 / 4.0 | 值 / 3.85 | 4.0 是标准公式,3.85 更贴合仪表显示 | 是,原作者标注需调查 |
| 车速 | (值 – 10000)/ 100.0 得 km/h | (值 – 10000)/ 360 | RaceChrono 需要 m/s,故除以 360 而非 100 | 否 |
| 冷却液温度 | 值 – 40 得摄氏度 | 值 – 40 | RaceChrono 自动转换为华氏度 | 否 |
| 进气温度 | 值 – 40 得摄氏度 | 值 – 40 | RaceChrono 自动转换为华氏度 | 否 |
| 转向角 | 值(有符号) | 值 × -1 | RaceChrono 需取反才能正确显示转向动画 | 否 |
| 刹车压力 | 无 | 无 | 笔记 TODO:希望以压力量替代开关量 | 是,尚未找到 |
转速除数为什么不能随手选一个
4.0 与 3.85 在 7000 rpm 处的差值约 273 rpm,足以让换挡提示与圈速分析出现系统性偏差。笔记明确写到除以 4 是标准公式,但 3.85 看起来更接近车辆仪表显示的值,而作者并未判定哪个正确。落地时的合理做法是用仪表或独立转速计做一次标定,而不是沿用其中任意一个。
车速公式里的 10000 偏移
车速要先把原始值减掉 10000 再除以 100,说明这条通道带了一个 10000 的零点偏移,而不是从 0 计起。这样的设计让原始值具备表达负速度(倒车)的余量,但也意味着如果直接把该 uint16 当无符号数解释而忘记减偏移,会得到约 100 km/h 的固定假值。落地时应先确认目标工具是按有符号还是无符号取值,并在静态停车状态下先读一次原始值做零点校验。
验证环境与适用边界
这套代码带的免责声明写得很直接:仅供实验用途,使用风险自负。它的验证矩阵也很窄,只有一台车、一个适配器、一个手机型号与一个软件版本。
| 项目 | 取值 | 对适用性的影响 |
|---|---|---|
| 车辆 | Mazda RX-8 2006(series 1),手动变速箱,带 DSC | 自动挡或其他年款未验证 |
| 适配器 | OBDLink MX+ 蓝牙扫描仪 | 换适配器后需重新确认透传是否完整 |
| 手机 | Huawei P30 Pro,Android 10 | 蓝牙协议栈差异可能影响采样连续性 |
| 软件 | RaceChrono v7.5.3,需开启实验功能 | 7.5.3 起必须启用实验特性才能生效 |
| 字节序 | 多字节值为大端 | 按小端解析会得到完全错误的速度与转速 |
| 位编号 | 从最高位起算,范围 0 到 63,位 57 的权值为 64 | 与常见 LSB 起算工具不通用 |
常见问题
这里的 PID 是 OBD-II 的 PID 吗?
不是。笔记里的 PID 指 CAN 报文 ID,例如 0x201、0x212、0x231、0x420、0x250、0x81,取数方式是被动监听总线而不是主动请求应答。这与 OBD-II 服务 01 下的参数标识符是两套体系,混用会得到完全不同的字节布局。
这些报文适用于所有 RX-8 年款吗?
不能这样假定。笔记声明只在 Mazda RX-8 2006(series 1)、手动变速箱、带 DSC 这一台车上验证成功,并明确为实验用途。自动挡、其他年款或不同市场版本的报文布局可能不同。
引擎转速为什么会有 4.0 和 3.85 两套除数?
笔记写到除以 4 是标准公式,但 3.85 看起来更接近车辆仪表显示的值,作者自己也标注「不知道哪个是对的,需要调查」。两者在高转速区的差值可达数百 rpm,落地前应用仪表或独立转速计做一次标定。
RaceChrono 里的位号 44、33、0 是怎么算出来的?
由字节偏移与位掩码换算而来。RaceChrono 从最高位起算,位号等于字节偏移乘 8 再加掩码在字节内从高位往低数的序号:刹车 0x08 在偏移 5,得 5×8+4 = 44;手刹 0x40 在偏移 4,得 4×8+1 = 33;空挡 0x80 在偏移 0,得 0×8+0 = 0。
刹车压力能从这些报文里取到吗?
暂时不能。笔记只解出了 0x212 里的刹车踏板开关量与手刹开关量,并把「找到刹车压力代替开关信号」列为 TODO。也就是说目前只有布尔状态,没有连续的制动压力通道。
延伸阅读
- Mazda MX-5 NC 的 CAN 笔记:10 个 ID 与 RaceChrono 公式 —— 同为马自达车型的 RaceChrono 取数口径
- Mazda MX-5 ND2:HS-CAN 开放字段与逐字节标定 —— 另一代马自达平台的逐字节方法
- OBD-II PID 入门:车速 0x0D 为什么是整数 —— 区分 OBD-II PID 与 CAN 报文 ID
- 车载信号为什么会说谎:TTL、源时间与 500 ms 新鲜度阈值 —— 遥测链路上的数据可信度判定
参考资料
- 项目 01 ——
public-can-dbc-datasets/additional/topolittle-rx8-can-notes/README.md(9 个信号的报文 ID、字节偏移、位掩码、换算公式与验证设备清单)
免责声明
本文所述的 CAN 报文解析均来自公开仓库的实验性笔记,原作者明确声明仅供实验用途、使用风险自负,且与文中提到的任何公司无关联或赞助关系。文中数字未经独立实车验证,不同年款、市场与 ECU 版本可能存在差异。涉及安全相关用途时请仅作参考,并以实际测量与官方资料为准。
更新记录
- 2026-10-14 初稿
发表回复