结论:Chrysler 平台的身份链里,0x22 F132 这一个 DID 走的是两条响应路由:仪表/SRS/ABS/雷达/EPS 用 rx_offset=-0x280,ABS/混动/发动机/变速箱用默认 +0x8,发动机与变速箱还额外查 supplier 软件号。匹配分精确与通用 fuzzy 两级,fuzzy 明确排除 EPS/前视雷达并要求两个 ECU 地址上的独有版本指向同一车型,且 Chrysler 没有品牌自定义 fuzzy。转向能力不是规范化零件号解析,而是对 EPS 固件版本前 4 字节的前缀启发式:非 Ram 平台 >= b"6841" 抬高最低转向速度,Ram 1500 落在 b"68" < prefix <= b"6831" 时才可设为 0。识别、BSM、雷达解析与可发送控制是四种不同能力,必须分别声明与验证。
十个平台是入口索引,不是适用性声明
CAR 与 ChryslerCarSpecs 声明 10 个平台:Pacifica 4、Jeep 3、Ram 2、Durango 1,并给出 PT/雷达 DBC、质量、轴距与基础最低转向速度。Cherokee 使用 CUSW PT DBC,Ram 使用独立 DBC。FW_VERSIONS 对这 10 个平台逐一列出 ECU 地址与版本原始字节:发动机版本可含尾部空格,Ram HD 列了 engine 0x7e0 却没有 transmission 条目,该文件也没有旧式 FINGERPRINTS。
这些声明不是物理线束、EPS 固件或执行权限的证明,也不代表已完成所有年款的报文与安全审计。版本字节必须按字节保存,不应剥除尾部空格或把车型名称当成版本匹配规则。
FW_QUERY_CONFIG:一个 DID,两条响应路由
查询配置在 bus 0 上组织了三组请求,最容易踩坑的是「同一个 ABS 类型出现在两组」——因此不能只按 ECU 类型推导响应地址,必须按请求组分别对应偏移。
| 请求组 | 目标 ECU | 偏移 / 结果 |
|---|---|---|
0x22 F132 |
仪表 / SRS / ABS / 雷达 / EPS | rx_offset=-0x280;如 EPS 0x75a 预期响应 0x4da |
0x22 F132 |
ABS / 混动 / 发动机 / 变速箱 | 默认 +0x8;如发动机 0x7e0 默认响应 0x7e8 |
0x22 supplier |
发动机 / 变速箱 | 额外查询 supplier ECU 软件号 |
extra_ecus |
混动 ABS 替代地址 0x7e4 |
加入查询集合,get_fw_versions() 标为 logging,build_fw_dict() 排除 |
CHRYSLER_VERSION_REQUEST 为 0x22 F132,supplier 软件号也走 0x22,每组正响应以 0x62 加相同 DID 为前缀。这里的版本正则 [A-Z0-9_]{10} ? 只用于离线固件表的全匹配测试,不是运行时未知版本归一化器。混动 ABS 的替代地址应视为额外采集,不应成为自动选型证据。
精确与模糊匹配:独有 ECU 数与冲突拒绝
match_fw_to_car_exact() 对每个候选的已知 ECU/版本逐项检查:未见 essential ECU 或已见不匹配都可淘汰,非 essential 缺席可略过。要记住它返回的是集合,不保证唯一,没有实测固件时不能据此宣称车型已识别。
通用 fuzzy(match_fw_to_car_fuzzy())排除 EPS、前视雷达等共享 ECU,要求两个不同 ECU 地址上的独有版本都指向同一车型。Chrysler 未配置品牌自定义 fuzzy,因此未知 EPS 版本不能单独作为 fuzzy 身份;两个 ECU 冲突时会拒绝候选,缺帧或共享件则可能导致无结果。
| 能力 | 判定依据 | 边界 |
|---|---|---|
| 精确匹配 | 候选的已知 ECU/版本逐项核对,essential 缺失或不匹配可淘汰 | 返回集合,不保证唯一 |
| 通用 fuzzy | 两个不同 ECU 地址上的独有版本指向同一车型 | 排除 EPS/前视雷达;Chrysler 无品牌自定义 fuzzy |
| BSM | 依据 bus 0 地址探测,而非固件型号 | 与车型识别是两件事 |
| 雷达解析 | 统一 radarUnavailable=True |
默认禁用,需另行启用 |
转向能力:前缀启发式,不是零件号解析
CarInterface._get_params() 用固件版本前 4 字节做前缀判断。非 Ram 平台:新平台或任意 EPS 版本前缀按字节序 >= b"6841" 时,置高最低转向速度标志;Ram 1500 的 EPS 前缀落在 b"68" < prefix <= b"6831" 时可设 minSteerSpeed=0;最后的高阈值标志把最低速度设为 17.5 m/s。
这些判断是代码里的能力启发式,不是规范化零件号解析;CarParams 需要保留固件来源和未知状态。CarController.update() 用 minSteerSpeed 决定 LKAS 使能,平台分支决定关断迟滞并包含重新使能等待,扭矩在未激活或使能位关闭时归零。参数阈值会进入实时执行链,不能仅凭插件清单声明「支持低速转向」。
四种能力必须分开声明
Ram HD 与 CUSW 被标记 dashcamOnly;CUSW 选独立 safety model,Ram DT/HD 使用安全参数位;雷达统一 radarUnavailable=True;BSM 依据 bus 0 地址而非固件型号。源文档把这一点总结为一句要求:车型识别、BSM、雷达解析和可发送控制是四种不同能力,必须分别声明、验证和降级。对缺失或相互矛盾的证据应返回未知,高阈值与零速转向不应从车型说明或单一未验证响应推断。
常见问题
为什么 ABS 的响应地址不能只按 ECU 类型推导?
因为同一个 DID 0x22 F132 在 bus 0 上有三组请求,同一个 ABS 类型会同时出现在 rx_offset=-0x280 组和默认 +0x8 组。源文档明确不能按 ECU 类型单独推导响应地址,必须按请求组对应偏移。
EPS 版本能不能单独决定车型身份?
不能。通用 fuzzy 明确排除 EPS、前视雷达等共享 ECU,要求两个不同 ECU 地址上的独有版本都指向同一车型,且 Chrysler 未配置品牌自定义 fuzzy。因此未知 EPS 版本不能单独作 fuzzy 身份。
Ram 1500 的零速转向是怎么判定的?
由 EPS 固件版本前 4 字节的前缀启发式判定:当 b"68" < prefix <= b"6831" 时可设 minSteerSpeed=0。这是代码中的能力启发式,不是规范化零件号解析,CarParams 需保留固件来源和未知状态。
车型被识别出来,是否就能发送转向控制?
不能等同。源文档强调车型识别、BSM、雷达解析和可发送控制是四种不同能力。Ram HD/CUSW 标记 dashcamOnly,雷达统一 radarUnavailable=True,而 minSteerSpeed 等阈值会进入实时执行链,不能仅凭插件清单声明支持低速转向。
延伸阅读
- 车型指纹与固件匹配:识别链上的两道关口 —— 精确与 fuzzy 两级匹配的通用语义。
- Chrysler panda 安全模式 —— 承接 CUSW/Ram 的安全模型与参数位差异。
- Chrysler CAN 构帧与控制契约 —— 从构帧角度看平台分支如何进入发送路径。
- 同一个「转向灯」在三家车厂是三种实现:车辆状态归一化的坑 —— 品牌差异为何必须逐平台声明。
- 从使能到车轮:执行链上的八道门,以及它们各自不保证什么 —— 解释「可识别」与「可执行」之间的门。
参考资料
- 项目 02 ——
openpilot-research/CHRYSLER_FIRMWARE_QUERY_STEERING_CAPABILITY_IDENTITY_DEEP_DIVE.md(取用了 10 个平台固件库、0x22 F132双偏移查询、精确与 fuzzy 匹配边界、转向能力前缀启发式及四类能力分层)。
说明:本文为对固定源码快照的静态结构分析,未运行完整测试套件、未连接硬件、未验证目标车型的真实参数组合。文中所有阈值、行号索引与配置均出自源文档,标注为未验证的结论保留其原有边界。
更新记录
首次发布 2026-10-11 最近核对:2026-10-11