结论:Volvo P1 平台(V50 / S40 / C30 / C70)不是一张 CAN,而是两张经 CEM 网关相连的网络:高速网(HS)跑 500 kbit/s,承载发动机、助力转向、制动/ABS、方向盘传感器与踏板;低速网(LS)跑 125 kbit/s,承载收音机、车门模块、仪表(DIM)、空调(CCM)与 CEM。所有 ID 都是29 位扩展帧。更关键的一条边界是:较早年款需要先通过 K 线激活诊断继电器,CAN 才会出现在 OBD2 接口上。源文档的 HS 表来自 18 份实车日志(约 94.8 万帧)、LS 表来自另一台 C30,两者都不是全平台验证。下述结论仅限源文档记录的这些车辆与年款。
车辆与适用范围
源文档是一份公开研究整理的 CAN 参考表(原文为捷克语),同时给出拓扑、ID 表、若干字节拆分与一个「助力转向泵完整配方」。它自述 HS 表来自某个 V50 项目的 18 份抓包,LS 表来自一台 C30 T5 2011 加另一套 CCM/CEM 仿真。
| 项 | 内容 |
|---|---|
| 车型 | Volvo P1 平台:V50 / S40 / C30 / C70 |
| 年款 / 市场版本 | HS 表来自一台柴油 V50(未给年款);LS 表来自一台 C30 T5 2011;汽油版与其他年款未独立确认 |
| ECU / 改装状态 | 原厂网络;HS 侧含 ECM、助力转向(PSP)、制动/ABS、方向盘传感器、踏板;LS 侧含收音机、车门模块、DIM、CCM、CEM |
| 采集跨度 | HS:18 份抓包、约 948,000 帧(一台车);LS:一份 C30 2011 的接收列表 + CEM/CCM 仿真观察 |
| 适用范围 | 仅限源文档记录的这两台车与其年款;HS DBC 自述「建立在一台具体 V50 的日志上」 |
总线与寻址
源文档把拓扑画得很清楚:两张网经 CEM 网关相连。HS 与 LS 的速率不同,且都是 29 位扩展 ID;生成的 DBC 需要设扩展标志(0x80000000),否则多数工具会当成标准帧。HS 表还给出一条很有用的启发式——每字节的「变化度」列(X 表示变化大、点表示变化小、横线表示恒定),用来判断哪里值得找信号。
| 项 | 内容 |
|---|---|
| 物理层 | 双绞线 CAN,两张网经 CEM 网关互连 |
| 链路层 / 比特率 | HS 500 kbit/s;LS 125 kbit/s |
| 寻址方式 | 29 位扩展 ID(DBC 需带 0x80000000 标志) |
| CAN FD | 否;按经典 CAN 处理 |
| OBD 可达性 | 较早年款需先经 K 线激活诊断继电器,CAN 才在 OBD2 接口可用 |
已解码信号
下表抽取 HS 与 LS 的代表性条目,并附一段诊断读数。源文档大量字段标注为「未解码」「仅推测」,这些标注按原样保留;LS 侧尤其如此。
| 信号 / 功能 | 位置(ID / 字节 / 位) | 解码 / 说明 | 证据 |
|---|---|---|---|
| 发动机转速 | HS 0x00800006 ECM_EngineData,B7 | 原始值 110 = 0 rpm(原始值口径,未给完整换算) | 18 份实车日志 |
| 仪表背光亮度 | HS 0x0100082C Dashboard,B0 低半字节 | 调整亮度 | 实车日志 |
| 光敏(环境光) | HS 0x0100082C,B1 位 7 | 位 | 实车日志 |
| 油门/离合器踏板传感器 | HS 0x0110483C PedalSensors | 源文档未细分到具体位 | 实车日志 |
| 助力转向速度指令 | HS 0x02104136 PSP_SpeedCmd,B6-B7 | 0x0001 = 满转速;值越大越慢,范围 1–6000 | 助力转向协议(第三方) |
| 制动 / 油门 | HS 0x0300410E BrakeThrottle | 源文档未细分到具体位 | 实车日志 |
| 方向盘传感器 | HS 0x0340412E SteeringWheelSensors | 转角 / 角速度(未细分到具体位) | 实车日志 |
| 方向盘按键 | HS 0x19000026,B7 | 按键码(已知 0x20) | 实车日志 |
| 点火状态 | HS 0x19E00006 Ignition,B6 位 6 | 位 | 实车日志 |
| 助力转向 keep-alive | HS 0x1AE0092C,B1 | 轮转序列 0x00 → 0x40 → 0x80 → 0xC0;样例帧 00 00 22 E0 41 90 00 00 |
第三方协议 + 实车日志(周期 2000 ms vs 日志约 420 ms) |
| 助力转向状态 | HS 0x1B200002,12 位 ((B6 & 0x0F) << 8) | B7 | 1105 初值 / 3953 怠速 / 3955 运转,三值均在实车日志出现 | 实车日志 |
| 仪表控制(关键) | LS 0x09C050B8 GaugeCluster_Ctrl | B0 上 nibble 0x40、下 nibble = 背光亮度 0–15;B1 里程增量;B3/B4 转速 16 位;B5 低 nibble 显示消息码 | CEM/CCM 仿真字节拆分 |
| 中控按键 | LS 0x05704000 | B4 位 0-1/2-3/6-7 = EXIT/MENU/POWER;B5 位 6-7 = ENTER;B7 = UP/DOWN/LEFT/RIGHT | 仿真字节拆分 |
| 空调设置 | LS 0x12404002 | B0 右侧温度、B1 左侧温度、B4 常量 0x43 | 仿真字节拆分 |
| 油量 | LS 0x1AD10068 | B0 = 油位;B1 = 0x04 仪表运行 / 0x07 熄火 | 仿真字节拆分 |
另有一段诊断读数:源文档描述的一种厂方诊断风格协议,首个字节是长度、第二个是 ECU 地址,形如 [0xC8+字节数][ECU 地址][命令][参数…];ECM 地址为 0x7A,读数据用 0xA6。已记录的缩放入下:
| 标识 | 含义 | 缩放 |
|---|---|---|
| 0x101D | 转速 | × 40 rpm |
| 0x1140 | 车速 | × 1.25 km/h |
| 0x9D | 增压压力 | × 10 hPa |
| 0xD8 / 0xCE | 冷却液 / 进气温度 | × 0.75 − 48 → °C |
| 0x36 | 点火提前角 | × 191.25 / 255 |
读取方法与注意事项
第一是可达性:源文档说较早年款要先经 K 线激活诊断继电器,CAN 才会出现在 OBD2 接口上;否则在标准诊断口上可能什么都看不到,且这容易被误判为「车不支持」。
第二是寻址位数:所有 ID 都是 29 位扩展帧。源文档提醒,生成 DBC 时必须设扩展标志 0x80000000,否则多数工具会把 ID 当成标准帧,导致匹配失败。
第三是「哪些字节值得看」。HS 表为每个 ID 都标了 B0–B7 的变化度(X / 点 / 横线),这是最快的筛选手段——恒定字节不用找信号,变化大的字节优先。未解码报文在 DBC 里只对「日志中确实变化」的字节生成占位信号(<名称>_B0 … _B7),可直接在抓包工具里画图找相关性。
第四是助力转向泵需要「两条报文同时在线」:keep-alive(0x1AE0092C,只看 B1 的轮转)与速度指令(0x02104136,B6-B7)。源文档记录:没有 CAN 时泵按固定约 75% 功率运行;丢失 keep-alive 后约 5 秒进入失效保护,但保持最后下发的转速。这里只做整理,不建议照此在实车上驱动执行器。
证据等级与边界
可视为实车证据的是 HS 表(18 份抓包、约 94.8 万帧)与三条助力转向状态的取值;属于仿真/文档级的是 LS 侧的字节拆分(来自 CCM/CEM 仿真)与部分周期;属于明确未解码的是 HS 与 LS 表里大量标注为「未解码」的 ID。
不能外推的地方有三处。第一,HS DBC 明确自述「建立在一台具体柴油 V50 的日志上」,汽油版与其他年款可能有 ID 的子集或超集。第二,LS 表来自一台 C30 2011 加仿真,并非 P1 全系;例如遥控电池 ID 在日志里是 0x1E30104A,而 CEM 仿真用 0x1E30106A,源文档自述「其一为笔误,或按年款不同」。第三,源文档保留了「未解码/仅推测」的字段,这些不能当作已确认信号。
关于「安全访问」类问题:源文档未提供任何绕过方法,且不建议尝试。它列出的厂方诊断风格命令里包含激活类服务,本文不展开,也不建议在实车上执行写入或激活操作。
常见问题
为什么在 OBD2 口上抓不到 Volvo P1 的 CAN?
源文档说明较早年款需要先通过 K 线激活诊断继电器,CAN 才会出现在 OBD2 接口上;否则标准诊断口上可能没有流量。
HS 和 LS 是一张网吗?
不是。P1 有两张网经 CEM 网关相连:HS 500 kbit/s(发动机、助力转向、制动、方向盘传感器、踏板)与 LS 125 kbit/s(收音机、车门模块、DIM、CCM、CEM)。
这些 ID 是 11 位还是 29 位?
全部是 29 位扩展 ID。源文档提醒生成 DBC 时要设扩展标志 0x80000000,否则会被当成标准帧而匹配失败。
助力转向泵为什么需要两条报文?
源文档记录它需要 keep-alive(0x1AE0092C,看 B1 的轮转)与速度指令(0x02104136,B6-B7 的 0x0001 表示满转速)同时在线上;缺 keep-alive 约 5 秒后进入失效保护。本文只整理协议,不建议照此驱动执行器。
延伸阅读
- CAN 报文解析的「健康位」在说什么:校验、计数器与总线空窗 —— 承接本文 keep-alive 轮转与未解码字节的判读。
- UDS 诊断工具为什么不能随手调:只读、会话与写 ECU 的分权设计 —— 说明本文诊断读数与「不展开激活/写入」的边界。
- BMW E46 PT-CAN 数据档案:MS42/MS43 的 500 kbps 报文表 —— 同为欧系、同为监听广播帧的解码纪律。
- 同一个「转向灯」在三家车厂是三种实现:车辆状态归一化的坑 —— 对照本文「同一功能分散在两张网」的现象。
- FT86 与 MX-5 的赛道 CAN 信号:RaceChrono 公式表 —— 另一份把「ID 变化度/通道取舍」写清楚的信号表。
参考资料
- 项目 01 ——
public-can-dbc-datasets/additional/chuck3cz-volvo-p1/UPSTREAM_README.md(主来源:拓扑、HS/LS ID 表、字节拆分与助力转向协议)。 - 项目 01 ——
public-can-dbc-datasets/additional/chuck3cz-volvo-p1/VOLVO_P1_CAN_REFERENCE.md(同内容的参考表)。 - 项目 01 ——
public-can-dbc-datasets/additional/chuck3cz-volvo-p1/SOURCE.md(快照范围、DBC 报文/信号条数与证据边界)。
说明:本文整理自第三方开源项目的公开文档,仅代表该文档所记录的单个车辆样本,不代表同型号全系车型。CAN 与诊断操作存在风险,任何实车操作前请自行复核并遵守当地法规。
更新记录
首次发布 2026-10-11 最近核对:2026-10-11
发表回复