Hyundai 与 Honda 车型协议:为什么品牌目录不等于通用协议

作者:

在

结论:品牌目录不是通用协议。Hyundai 的经典 CAN 可选 hyundai/hyundaiLegacy、CAN FD 用 hyundaiCanfd;Honda 分 Nidec 与 Bosch,Bosch 还要再分雷达版/无雷达版及 CAN FD。它们是不同的能力组合,必须声明精确平台、固件范围与总线拓扑。CarController 的软件限幅不替代 panda 安全钩子,CarState 的解析结果也不替代固件对驾驶员扭矩、制动和巡航状态的独立采样。

Hyundai:经典 CAN 与 CAN FD

Hyundai 按 CANFD 分支:用相机和 E-CAN 指纹判别 LKA/LFA、按钮、档位及 SCC 来源,LONG、能源类型和限制参数写入 safetyParam。这里要记住:alphaLongitudinalAvailable 与 openpilotLongitudinalControl 分开,前者不能保证后者启用。

层 关键入口 已核对的实现
ECU 生命周期 init()、deinit() 自控纵向且非相机 SCC 时发送 UDS 通信控制,目标地址依平台/转向架构改变;退出尝试恢复。
输入 CarState.update()、update_canfd() 分别把经典 CAN/CAN FD 的速度、驾驶员输入、巡航、转向、车门等信号映射到统一 CarState。
输出调度 CarController.update() 经典 CAN 与 CAN FD 分流至 create_can_msgs()/create_canfd_msgs()。
构帧 hyundaican.py、hyundaicanfd.py 经典 CAN 的 LKAS11/CLU11/SCC 帧与 CAN FD 的转向、取消、ACC、LFA 抑制帧分别构造;CAN FD 的 CanBus 映射 E-CAN、A-CAN、相机总线,不能硬编码单一 bus。
固件接收/发送 hyundai_rx_hook()、hyundai_tx_hook()、hyundai_canfd_tx_hook() 两条分支检查转向扭矩/请求间隔、加速度及按钮权限,诊断地址仅准许指定 tester-present 载荷。
模式组装 hyundai_init()、hyundai_legacy_init()、hyundai_canfd_init() Legacy 因旧报文缺计数器/校验而采用不同接收检查,不能视作安全规则全等。

Honda:Nidec 与 Bosch

Honda 的 Bosch 用 hondaBosch、Nidec 用 hondaNidec;Bosch 继续区分雷达版、无雷达版及 CAN FD。Bosch CAN FD 在此快照中不开放实验纵向。

层 关键入口 已核对的实现
ECU 生命周期 init()、deinit() 有雷达的 Bosch 自控纵向会尝试禁用雷达 ECU 通信,退出时尝试恢复。源码明确警告此操作会禁用原车 AEB。
输出调度 CarController.update()、compute_gas_brake() 区分 Bosch/Nidec;actuator_hysteresis() 与 brake_pump_hysteresis() 处理 Nidec 制动输出。
构帧 hondacan.py 按平台总线构帧;CanBus 映射 PT、radar、camera 等总线。
固件接收 honda_rx_hook() 备用刹车报文 0x1BE 避免把某些车型电脑制动误判为用户踩刹车;Nidec 的原车 AEB 制动与 openpilot 制动比较后决定转发。
模式与转发 honda_nidec_init()、honda_bosch_init()、honda_nidec_fwd_hook() Nidec 对相机制动帧 0x1FA 进行动态转发;Bosch 实验纵向在固件中受 ALLOW_DEBUG 编译门限制,不能只看 Python 配置推断可用。

另外两处细节也影响拆分:Hyundai 侧,经典 CAN 可选 hyundai/hyundaiLegacy,CAN FD 转向灯能力还可能涉及额外 ECU;Legacy 因旧报文缺计数器/校验而采用不同接收检查,测试入口覆盖相机 SCC、Legacy、能源类型、纵向、AEB 位、按钮和诊断场景,但不等于覆盖所有实车变种。

Honda 侧,honda_tx_hook() 对 Nidec 检查制动/HUD,对 Bosch 检查加速度/油门,均阻止主机发送 AEB 执行位;无使能时转向只能为零,Bosch 按钮只能取消,诊断地址仅准许指定 tester-present。备用刹车报文 0x1BE 用于避免把某些车型电脑制动误判为用户踩刹车。

Hyundai 的固件发送侧还要区分纵向状态:hyundai_canfd_tx_hook() 在非自控纵向时仅允许符合取消语义的 ACC 帧,经典 CAN 则另检查 FCA11/SCC12 的 AEB 执行位。Honda 侧的转发也不对称:honda_nidec_fwd_hook() 对相机制动帧 0x1FA 动态转发,而 Bosch 实验纵向在固件中受 ALLOW_DEBUG 编译门限制,不能只看 Python 配置推断可用。

为什么必须按能力组合拆分

同一品牌下,CAN/CAN FD 与 Nidec/Bosch 是不同能力组合,不能互相套用。Honda 的原车 AEB 保留与否依硬件架构和具体纵向方案而变:Nidec 用相机制动帧的动态转发,而 Bosch 雷达禁用方案是另一条路径,不能把 Nidec 转发逻辑套到 Bosch 雷达禁用方案。Hyundai 侧,hyundai_canfd_tx_hook() 中的转向限值还包含驾驶员扭矩抵消、速率与 EPS 转向请求切断容差;这些是固件拒绝候选帧的条件,不应在插件层开放为任意可改配置。

换句话说,能力组合必须由「平台 + 固件范围 + 总线拓扑 + 传感器架构」共同定义,任何一项缺失都可能把另一套组合的结论错误套用过来;这也解释了为何同品牌不同年款需要各自的证据链。

车载硬件与插件化含义

  1. 车型插件应声明精确平台、固件范围、总线拓扑、DBC、能力与安全模式参数;同一品牌的 CAN/CAN FD 或 Nidec/Bosch 必须是不同能力组合。不能让插件动态改写 panda 固件的 TX 白名单和物理限制。
  2. ECU 通信控制必须是受控生命周期操作,记录请求、响应、超时及恢复结果。尤其 Honda Bosch 雷达禁用涉及原车 AEB;目标硬件设计应先明确是否允许此工作模式,而不是默认启用。
  3. 硬件网关需要保持总线来源与时间戳、独立看门狗、断电/主机失联回退、板上 RX/TX/转发安全门;E-CAN/PT/camera 总线映射错误是安全风险,不是普通配置瑕疵。
  4. 每个目标车型建立指纹和固件识别、DBC 解析/打包、安全测试、日志回放、断线与错误帧注入、SIL/HIL、封闭场地验证的证据链。未知或模糊匹配保持被动,不以品牌名放行执行。

常见问题

为什么同一品牌要按经典 CAN 与 CAN FD 分开?

因为两者有不同的输入映射、构帧函数与安全模式:Hyundai 的经典 CAN 可选 hyundai/hyundaiLegacy、CAN FD 用 hyundaiCanfd;Legacy 还因旧报文缺计数器/校验而采用不同接收检查。它们是不同能力组合,不能视作同一套安全规则。

Honda 禁用雷达 ECU 通信有什么代价?

源码明确警告:有雷达的 Bosch 自控纵向禁用雷达 ECU 通信的操作会禁用原车 AEB。因此不能把它当作无副作用的模式切换,目标硬件设计应先明确是否允许此工作模式。

Bosch 的实验纵向能在固件里开放吗?

在固件中受 ALLOW_DEBUG 编译门限制,不能只看 Python 配置推断可用;此外 Bosch CAN FD 在此快照中不开放实验纵向。

Nidec 的相机制动帧转发能套用到 Bosch 吗?

不能。Honda 的原车 AEB 保留与否依硬件架构和具体纵向方案而变;Nidec 对相机制动帧 0x1FA 的动态转发与 Bosch 雷达禁用方案是不同路径,不能互相套用。

延伸阅读

参考资料

  • 项目 02 —— openpilot-research/HYUNDAI_HONDA_DEEP_DIVE.md(取用了 Hyundai 经典/CAN FD 链路、Honda Nidec/Bosch 链路,以及车载硬件与插件化含义)。
  • 项目 02 —— openpilot-research/HYUNDAI_CANFD_PANDA_SAFETY_DEEP_DIVE.md(仅用于确认 CAN FD 逐模式 RX/TX 总线矩阵与纵向构建门的引用位置)。

说明:本文为对固定源码快照的静态结构分析,未运行完整测试套件、未连接硬件、未验证目标车型的真实参数组合。文中所有阈值、行号索引与配置均出自源文档,标注为未验证的结论保留其原有边界。

更新记录

首次发布 2026-10-11 最近核对:2026-10-11

评论

发表回复

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