Suzuki Swift ZC32S 的 CAN 地图:6 条报文与 9 个信号

作者:

在

结论:Suzuki Swift Sport ZC32S 的公开 CAN 地图只有 6 条报文、9 个信号,且刹车压力仍是无物理单位的裸值、转向角只是近似量。它足够驱动一块 ESP32 + MCP2515 的车载 OLED 仪表,但不能当整车网络定义或标定依据——派生出的 DBC 明确假设 Motorola 字节序、DLC 8 与 Unknown 发送方,全部未经实车抓包复核。

六条报文能做什么:一份为显示服务的地图

这份地图来自一个车载显示项目,硬件是 ESP32 WROOM 加 MCP2515 CAN 控制器,输出到 SSD1306 OLED,另有 8 颗 WS2812 组成换挡灯、旋转编码器切换页面、ESP32 内置 BLE 被动接收 4 个原厂 TPMS 传感器。它的目标不是整车解析,而是把七个显示页面需要的数据取出来,因此覆盖面天然很窄:转速、四轮轮速、水温、油门、转向角、刹车压力,加上蓝牙胎压。

CAN ID 信号 字节位置 换算 证据强度
0x124 发动机转速 data[1]、data[2] raw 为 data[1] 高字节、data[2] 低字节合成的 16 位值;RPM = raw / 4 高,README 与固件一致
0x1B8 四轮轮速 FR 0–1、FL 2–3、RR 4–5、RL 6–7 km/h = raw × 0.0276923 高,四角各 16 位
0x310 冷却液温度 data[1] TempC = data[1] − 40 高,单字节偏移
0x122 油门踏板 data[1] Pedal% = data[1] × 100.0 / 255.0 高,单字节比例
0x119 转向角 data[2]、data[3] 居中约 32768,满舵约 ±495°(左约 37792、右约 27808) 中,作者标注为近似
0x1AF 刹车压力 data[6]、data[7] 无换算,保留有符号裸值 低,未声明物理单位

真正决定这份地图可用性的不是 ID 数量,而是最后一列。前四行的公式是可以直接搬进固件的;转向角只能用于「左打还是右打」这类定性显示;刹车压力连单位都没有,只能画相对变化趋势。

TPMS 走的是蓝牙,不是 CAN

四个原厂胎压传感器通过 BLE 广播被 ESP32 被动接收,按固定 MAC 地址区分左前、右前、左后、右后。压力换算为 ((data[3] << 8 | data[4]) / 10.0 * 0.0689476) - 1.0(单位 bar),温度为有符号字节 data[2]。扫描跑在独立的 FreeRTOS 任务里,以免阻塞 CAN 接收。这意味着胎压与 CAN 数据是两条独立链路,做数据融合时必须各自打时间戳,不能假设同源同周期。

派生 DBC 的四条假设:用之前必须知道

归档方从这份公开地图生成了一份派生 DBC(6 条报文、9 个信号),但它同时明确列出了自己做过的假设。这四条假设就是使用边界。

假设项 取值 为何这样假设 校验方式
字节序 Motorola(高字节在前) 固件表达式为高字节在前 抓包后按两种字节序分别解码比对
帧长度 DLC 8 README 未给出实际帧长 抓包读取实际 DLC
发送方 Unknown,消费者标记 Display 发送 ECU 身份未知 按 ID 反查总线活动与断电隔离
单位与标定 刹车保持裸值,转向角近似且被固件截断为整数 固件显示公式未声明物理单位 需与制动压力传感器、转角台架对照

把假设显式写出来,比把不确定项悄悄填成确定值要安全得多。派生文件本身也被声明为独立整理的研究草稿,既不是上游产物也不是原厂 DBC;车型适配、总线段归属、单位与缩放都未经抓包核对。

100 Hz 与 10 Hz:为什么轮速帧要单独分配缓冲

这一条是整份文档里最有工程价值的细节。轮速帧 0x1B8 的速率是 100 Hz,水温帧 0x310 是 10 Hz,两者速率相差一个数量级。MCP2515 的硬件滤波器把接收缓冲 RXB0 单独留给水温 ID,避免高频轮速帧把尚未读取的水温帧覆盖掉。

同一条经验对任何 MCU 方案都成立:当同一总线上混装不同周期的报文时,接收缓冲与中断优先级的分配要按「最慢的那一帧」来设计,而不是按平均速率。否则表现不是报错,而是某个慢信号偶发跳变——这类问题在后期极难定位。

另外还需注意权利状态:归档说明指出该修订版本未找到仓库许可证,因此派生文件与来源 README 被作为私有离线研究副本保留,在权利确认前不宜再分发或集成。

常见问题

这份 ZC32S 的 CAN 地图能直接用于整车网络解析吗?

不能。它只有 6 条报文、9 个信号,目标是为车载显示取数,不是整车网络定义。派生 DBC 也明确声明车型适配、总线段归属、单位与缩放未经抓包核对,未找到上游许可证,只能作离线研究参考。

为什么 0x1B8 轮速帧要单独处理接收缓冲?

因为速率相差一个数量级:轮速帧 0x1B8 为 100 Hz,水温帧 0x310 为 10 Hz。作者用 MCP2515 的硬件滤波器把接收缓冲 RXB0 单独分配给水温 ID,使高频帧无法覆盖尚未读取的低频帧,否则故障表现是水温偶发跳变而非报错。

转向角 0x119 的 ±495° 能直接当作标定值用吗?

不能。归档说明指出转向角是近似值,且固件把它截断为整数处理。它只能支持定性显示(居左、居中、居右)与粗略角度趋势,要做转向角的定量分析需要在转角台架上重新标定,并确认左约 37792、右约 27808、居中约 32768 这三个锚点。

派生 DBC 里刹车压力为什么没有单位?

因为来源固件的显示公式没有声明物理单位,归档方据此保留了有符号裸值 raw = (data[6] << 8) | data[7]。在获得制动压力传感器的对照测量之前,这个值只能用于观察相对变化,不能换算成 bar 或 MPa,更不能作为制动强度的判断依据。

延伸阅读

参考资料

  • 项目 01 —— public-can-dbc-datasets/additional/8rea-suzuki-swift-zc32s/README.upstream.md(6 个 CAN ID 的字节位置、换算公式、帧率与 MCP2515 缓冲分配)
  • 项目 01 —— public-can-dbc-datasets/additional/8rea-suzuki-swift-zc32s/SOURCE.md(派生 DBC 的 6 报文 9 信号、Motorola 与 DLC 8 假设、权利状态)
  • 项目 01 —— public-can-dbc-datasets/additional/8rea-suzuki-swift-zc32s/README.md(硬件清单、TPMS 蓝牙换算与显示页面结构)

免责声明

本文所述 CAN ID、字节位置与换算公式均来自公开开源仓库的说明文件,属社区逆向工程产物,不代表车辆制造商的官方数据,未经独立实车抓包验证。不同车型年款、市场与 ECU 版本可能存在差异。涉及行车安全的改动请以实际测量与官方资料为准。

更新记录

  • 2026-10-14 初稿

评论

发表回复

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