结论:2022 Ram ProMaster 的被动 CAN 工作必须按三条独立总线规划:C-CAN(OBD 引脚 6/14,500 kbit/s)、B-CAN / CAN IHS(DLC 引脚 3/11,125 kbit/s 实测)和 CAN CH(DLC 引脚 12/13,500 kbit/s 实测)。这批记录里登记的 UDS 端点共 16 个,全部走 29-bit ISO-TP normal-fixed 寻址。真正决定能不能落地的不是「能读多少帧」,而是三条边界:OEM 文档里的 CAN-B 50K 说法不能用来配波特率;B-CAN 上 0x760 的被动里程只被认可为中控模块的本地副本;0x1F4 字节 4 高位已被完整复核驳回,不能当当前挡位。
三条总线的速率、引脚与证据来源
三条总线里只有 C-CAN 的 500 kbit/s 同时有 OEM 文档和实测两个来源,另外两条的通信参数都来自本机实测。B-CAN 是最容易被带偏的一条:该车型的 COMMUNICATION / CAN BUS DESCRIPTION 明确把 CAN-C 写成 500K、CAN-B 写成 50K,但这份文档用的是 C-1 到 C-8 与 BH 这套分支命名,与 DLC 图的 CAN C/CH/IHS 命名体系并不对齐。2026-07-20 在引脚 3/11 上的被动捕获给出 125 kbit/s 且零 RX 错误,因此以实测为准,文档里的 50K 只保留为线索。
| 总线 | 速率 | 引脚 | 接入方式 | 证据边界 |
|---|---|---|---|---|
| C-CAN / HS-CAN | 500 kbit/s | OBD 6/14 | 经 SGW 旁通的内部 C-CAN tap,Board A CAN1 角色 | 动力总成与诊断;法规要求的 OBD-II Mode 01 PID 不经此旁通 |
| B-CAN / CAN IHS | 125 kbit/s(实测) | DLC 3/11 | 标签转接线的 B-CAN 支路,Board A CAN2 角色 | 舒适与车身;派生配置的 8 个目标里 4 个已应答,另外 4 个仍超时 |
| CAN CH(第二条高速总线) | 500 kbit/s(实测) | DLC 12/13 | 灰色 12/13 适配器,Board B CAN1 角色 | 被动捕获零收发错误,同时完成 ABS、EPS、HALF、ORC 的身份读取 |
永久安装用两块双通道适配器承载三个角色(gs_usb,USB VID:PID 1d50:606f):C-CAN 与 B-CAN 分别落在第一块的 dev_id 0(CAN1)和 1(CAN2),CAN CH 在第二块的 dev_id 0,剩下那一路保持 down。四块板载红色终结跳线全部拆除,因为三个 tap 接入的是车内已经终结的网络;虽然适配器支持 CAN FD,暴露出来的三条总线一律配成 classical CAN、FD off。角色由 USB 序列号加 dev_id 解析,Linux 的 canN 编号只是枚举顺序,不作为身份依据。
16 个 UDS 端点的总线分布与行为差异
下表是已登记的端点。它们的 DID 命名空间按 ECU 隔离——雷达的某个 DID 和其他模块的同名 DID 没有任何关系,所以不要把这些行合并成一张「整车 DID 表」。
| 键 | 模块 | 总线 | TX → RX | 已记录的行为 |
|---|---|---|---|---|
radar_acc |
Bosch ACC 雷达 | C-CAN | 18DA2AF1 → 18DAF12A | 扫描途中切断点火仍会 ACK;车速只能走内部 DID,OBD PID 不可用 |
pcm |
动力总成模块(3.6L) | C-CAN | 18DA10F1 → 18DAF110 | 固定 DLC 8 零填充是已知可用配方;遗留会话请求已两次验证 |
rf_hub |
RF Hub(TPMS / RKE) | C-CAN | 18DAC7F1 → 18DAF1C7 | 点火 OFF 仍应答,属 KL30 常电,是驻车取电压的入口 |
tcm |
ZF 948TE 变速箱 | C-CAN | 18DA18F1 → 18DAF118 | 读取 211B–2132、2136–213E 与 026B 均为正向 |
shifter |
电子换挡器 | C-CAN | 18DA1FF1 → 18DAF11F | 身份已读取,可用于模块级区分 |
bcm_ccan |
车身控制模块 C-CAN 端点 | C-CAN | 18DA40F1 → 18DAF140 | 执行类请求受电源模式门控,钥匙 OFF 常见否定响应 |
cluster |
组合仪表 IPC | C-CAN | 18DA60F1 → 18DAF160 | 已把若干仪表符号逐项绑定到具体 DID |
telematics |
远程通信盒模块 | C-CAN | 18DAC6F1 → 18DAF1C6 | 唯一一个车上后台诊断客户端从不查询的已注册模块 |
ics_bcan |
中控面板 | B-CAN | 18DA85F1 → 18DAF185 | 里程 DID 2001 以 0.200 Hz 轮询,收到 302/302 正向应答 |
uconnect_bcan |
主机 / 显示屏 | B-CAN | 18DA87F1 → 18DAF187 | 身份与阶段性故障码家族匹配 |
climate_bcan |
自动空调模块 | B-CAN | 18DA98F1 → 18DAF198 | 所选变体未通过校验,其仪表标签不可直接套用 |
emcm2_bcan |
中控菜单 / 音量按键 | B-CAN | 18DAD9F1 → 18DAF1D9 | 设备子类型匹配加上 OEM CAN-IHS 角色 |
abs_canch |
ABS / ESC | CAN CH | 18DA28F1 → 18DAF128 | 历史偶发故障码,最后一次测试通过 |
eps_canch |
电动助力转向 | CAN CH | 18DA30F1 → 18DAF130 | 无故障报告 |
half_canch |
前视摄像头辅助模块 | CAN CH | 18DA31F1 → 18DAF131 | 同一身份还可通过网关在 C-CAN 侧被动读到 |
orc_canch |
乘员约束控制器 | CAN CH | 18DAC0F1 → 18DAF1C0 | 无故障报告 |
网关路由是这张表的隐藏前提:在 C-CAN 上发给 CAN CH 目标的物理请求会被网关逐帧转发,中位延迟 0.31 ms(51 次交互,落在 0.23–2.78 ms 区间),网关还会在 CAN CH 侧替换成自己的流控帧;ECU 应答被复制回 C-CAN 时目标字节被改写为 F2,所以 C-CAN 上看到的 18DAF2xx 是网关副本,不是第二个诊断仪。另有一条与时统高度相关的事实:车上存在一个后台诊断客户端,会在外部 F1 流量静默 92 秒以上后才启动只读扫描,一旦外部轮询恢复便在 1 至 2 秒内终止;做被动相关性分析时必须把这些窗口单独标出来。
C-CAN 广播帧:可以直接进遥测的那部分
下面这张表只收已经 allowlist 进遥测的信号。入选判据是「是否与同类 DID 做过定量化对照」,而不是看上去是否合理——这也是为什么同属 0x100 的扭矩字节还停在候选名单里。
| ID | 字节 / 位 | 解码式 | 含义 | 验证强度 |
|---|---|---|---|---|
0x2EF |
帧存在性 | 无 | 点火 ON 门控 | 已验证;帧计数门控曾失败,存在性门控有效 |
0x41A |
byte0 | 4.0 + raw × 0.05 V | 系统电压 | 已验证,含驻车唤醒场景 |
0x41D |
byte2 | raw × 4 kPa | 机油压力 | 与内部 DID 逐字节镜像,怠速 733/733 样本 R² 0.9998047 |
0x2ED |
byte0 | raw − 40 °C | 冷却液温度 | 怠速 R² 接近 1.0,负载工况 1,351/1,356 样本 |
0x0FC |
bytes0–1 BE u16 | 屏蔽低两位后除以 4 rpm | 发动机转速 | 负载工况 1,351/1,356 样本 R² 0.9999794 |
0x0F0 |
bytes3–4 高 11 位 | 右移 5 位后减 500 Nm | 变速箱请求扭矩上限 | 236 样本 R² 0.99999986 |
0x1F7 |
打包 17 位:byte0 bit0 加 bytes1–2 | raw / 32 rpm | 变速箱输出轴转速 | 低于 16 位边界 R² 0.99999578 |
0x1F7 |
byte3 有符号 i8 | 0.375 × raw + 57 °C | 变速箱油温 | 多次 RMSE 低于 0.89 °C,另含一次预热反例 |
0x1F7 |
bytes4–5 BE u16 | raw / 2 rpm | 涡轮 / 输入轴转速 | 盲区复原 2,014 样本 R² 0.99996705 |
0x101 |
byte0 bit0、byte1 左移 3 位、byte2 高 5 位 | raw / 16 km/h | 瞬时车速 | 由变速箱侧证据裁定为 /16,否决早期的 /32 候选 |
0x0EE |
bytes0–1 BE u16 | raw / 128 km/h | 独立高分辨率车速 | 169 样本 R² 0.9990360 |
0x5A0 |
byte3 / byte2 | mph 与四舍五入后的 km/h | ACC 设定车速 | 两字节在 1 km/h 内一致才允许发布 |
0x0E0 |
byte0 | raw mph | 限速标志识别值 | DLC 4、10 Hz,读数为 0 时不发布 |
一处值得单独说明的工程约定:2026-07-19 的离线分析确认 0x101 的 bytes0–2 是瞬时车速,而不是旧笔记里写的里程累加器。两条日志分别给出 539,982 帧(约 99.998 Hz,原始值域 0–2153)和 224,137 帧,帧内 CRC-8/SAE-J1850 在 224,137 帧上全部匹配。0x0EE 独立跟踪同一物理量,回归关系约为 0x0EE_raw ≈ 8.0099 × speed_raw − 11.6,移动样本相关系数 0.9999919。两者 integrals 在另一条记录的差值为 0.007 km,证明的是彼此关系,不是物理量纲。
被驳回的候选与还没闭环的边界
这批记录的价值有一半来自「已经否掉什么」。下面四项在别的项目里很容易被当成常识采用,但在这里都有明确的驳回或降级理由。
| 候选 | 结论 | 决定性证据 |
|---|---|---|
0x1F4 byte4 高位 = 当前挡位 |
驳回 | 完整复核扫过 4,187,827 帧得到 42,574 对有效轴速比样本;开发段里 21,725 对取值为 7、6,548 对取值为 8,但两组中位数都是 0.699,而 OEM 八挡为 0.580 |
B-CAN 0x760 = 整车里程 |
仅认可为中控本地副本 | 对 302 次内部里程应答,冻结公式为「十分之一公里值等于 10 倍被动原始值」;174 次邻近匹配 p95 误差 0 计数,但与仪表仍有约 11.6 mi 差 |
0x417 bytes2–3 = 变速箱油温 |
驳回 | 两次独立盲驾都不支持该假设,最佳 R² 仅 0.44824 且斜率为负 |
0x100 bytes0–1 = 实际扭矩 |
保留候选 | 2,014 样本盲区分段里 overrun 段 R² 仅 0.63031,不能当作实际扭矩发布 |
里程那条还要多说一句:2026-08-30 的三总线行驶记录里,中控计数器在首个 25 分钟窗口增加 23.0 km(14.291537 mi),独立车速积分为 14.365140 mi,相差 0.512%;跨钥匙周期的第二次比对里,中控增加 116.817 mi、积分增加 116.511358 mi,相差 0.262%。这两组数字证明的是相对刻度,不是绝对基线。
正面闭环的案例也有一个,就是机油寿命。在驻车、点火 ON、发动机 OFF 的条件下,向 PCM 发出一条固定 DLC 8 零填充请求 03 22 21 85 00 00 00 00,物理地址为 18DA10F1 → 18DAF110,收到正向应答 62 21 85 52,无符号字节换算后为 82%。这次读取没有会话切换、没有 TesterPresent、没有流控帧,C-CAN 发送计数仅从 127233 增加到 127234,三条总线的收发错误计数保持为零。存在 limits 的工程约定是:参数超出 0 到 100 时置为不可用,而不是裁剪成百分比。
常见问题
OEM 文档写明 CAN-B 是 50 kbit/s,为什么实际按 125 kbit/s 配置?
因为那份文档使用的是另一套分支命名(C-1 到 C-8 与 BH),与诊断口的 CAN C/CH/IHS 命名体系并不对齐,其 50K 描述更可能指向另一条内部支路。2026-07-20 的被动捕获在引脚 3/11 上测得 125 kbit/s 且零 RX 错误,2026-07-25 的灰色适配器捕获又独立在引脚 12/13 上确认 500 kbit/s,两者都以实测作为配置依据。
B-CAN 上的 0x760 里程值能不能替代仪表里程?
不能。它与中控内部计数器的关系式已经冻结并复制过:十分之一公里值等于 10 倍被动原始值,174 次邻近匹配的 p95 误差为 0 计数、平均绝对误差 0.1724 计数;相对刻度也经两次独立检验,分别为 0.512% 与 0.262%。但它与仪表的绝对读数仍相差约 11.6 mi,因此只能当中控本地副本使用,不能据此摘掉仪表上的星标。
为什么读取 PCM 机油寿命不需要切换诊断会话?
2026-10-03 的实车验证显示,在驻车、点火 ON、发动机 OFF 条件下发出一条零填充请求,就拿到了正向应答 62 21 85 52。但这不能推广成「默认会话支持 22 读取」的普遍结论:继承会话没有被正面识别,且同一 PCM 的其他 DID 曾明确要求遗留会话。工程上的处理是沿无会话切换的配方发一次,被拒绝就上报需要会话并就此停止。
0x1F4 的字节 4 高位能不能直接当成当前挡位?
不能。2026-09-22 的两秒样本曾把它对上七挡比值 0.699,但完整复核扫过 4,187,827 帧、取到 42,574 对有效样本后,出现了大量比值稳定在 2.842、1.909、1.382 而该位仍为 7 的情形;开发段里取值为 8 的 6,548 对,中位数同样是 0.699 而不是八挡的 0.580。这些都是稳定工况下的反例,不是换挡瞬态。
C-CAN 上出现 18DAF2xx 帧意味着什么?
意味着那是网关把 CAN CH 上某个 ECU 的应答复制回 C-CAN 的副本,目标字节从 F1 改写为 F2,并不是第二个诊断仪在发话。转发延迟中位 0.31 ms,51 次交互落在 0.23–2.78 ms 区间,网关还会在 CAN CH 侧替换自己的流控帧。做被动归因时不要把它算成外部工具的流量。
延伸阅读
- UDS 诊断工具为什么不能随手调:只读、会话与写 ECU 的分权设计 —— 解释为什么有的 DID 必须走遗留会话
- 车载信号为什么会说谎:TTL、源时间与 500 ms 新鲜度阈值 —— 与该车静态帧新鲜度审核同源的方法
- 商用车 DBC 知识包的许可证链:16 条报文与四类来源分级 —— 另一类证据边界的处理方式
- 车型 CAN 数据库 —— 按车型横向比对总线参数
参考资料
- 项目 01 ——
public-can-dbc-datasets/additional/jakeiwen-promaster-2022/docs/bus-map.md(三条总线的速率、引脚与证据,16 个 UDS 端点,以及三条总线的广播帧表) - 项目 01 ——
public-can-dbc-datasets/additional/jakeiwen-promaster-2022/findings/2026-07-19_ccan_drive_signal_analysis.md(0x101与0x0EE车速字段的定位与两条日志的样本量) - 项目 01 ——
public-can-dbc-datasets/additional/jakeiwen-promaster-2022/findings/2026-08-30_three_bus_drive_odometer_validation.md(中控里程与被动0x760的冻结公式及跨钥匙周期复制) - 项目 01 ——
public-can-dbc-datasets/additional/jakeiwen-promaster-2022/findings/2026-09-22_gear_and_oil_life_offline.md(挡位候选驳回的完整复核数据与机油寿命闭环)
免责声明
本文所有波特率、引脚、CAN ID、字节位定义与转换系数均来自一台 2022 款 Ram ProMaster 的公开逆向记录,未经独立实车复现;不同年款、市场区域与 ECU 软件版本可能存在差异,标注为「已验证」的结论仅指在该车当时的捕获条件下成立。本文不构成对任何车辆执行主动诊断、刷写或执行器操作的授权,涉及安全相关用途请以实际测量与制造商资料为准。
更新记录
- 2026-10-15 初稿
发表回复