结论:Volkswagen MQB 的 panda safety 用同一张 RX 表区分两种模式,差异几乎全在 TX 白名单:Stock ACC 模式允许在 bus 0 与 bus 2 发 GRA_ACC_01,自控纵向模式则完全不发该帧,改为允许 ACC_02/06/07。纵向配置依赖 FLAG_VOLKSWAGEN_LONG_CONTROL,且只有 ALLOW_DEBUG 构建才读取它,所以上层 CarParams 设置了纵向能力,并不能单独证明发布固件允许发送 ACC。本文为固定源码快照 c8fb906 的静态阅读,bus 号是单个 safety 实例的本地编号。
模式与总线矩阵
volkswagen_mqb_init() 初始化共享状态与同一张 RX 表;仅在 ALLOW_DEBUG 构建中读取纵向参数位,从而选择 Stock 或 Long 的 TX 白名单。两种模式都没有专属转发钩子,通用转发只在 bus 0 与 bus 2 之间,check_relay 地址在目标总线上被静态阻断。
一个容易误读的点是方向:LH_EPS_03 的 RX 在 bus 0,候选 TX 在 bus 2,不能因为 ID 相同就把两个方向混为一个。
| 模式 | RX | 关键 TX | 使能来源 |
|---|---|---|---|
| Stock ACC | 七组均在 bus 0 | HCA_01、LDW_02 在 bus 0;LH_EPS_03 在 bus 2;GRA_ACC_01 在 bus 0 及 bus 2 | TSK_06 原车巡航接合沿;主开关关闭或 GRA Cancel 退出 |
| 自控纵向 | 同一七组均在 bus 0 | HCA_01、LDW_02、ACC_02/06/07 在 bus 0;LH_EPS_03 在 bus 2;无 GRA_ACC_01 TX | TSK_06 主开关可用时,GRA Set/Resume 释放沿进入;Cancel 退出 |
RX 完整性与状态来源
volkswagen_mqb_rx_hook() 更新移动状态、驾驶员扭矩、巡航许可、按钮、油门和两种制动观测。制动状态是 Motor_14 踏板开关或 ESP_05 压力检测的组合,之后由共享安全层处理制动退出。ESP_19 的四轮原始值求和大于零即判移动,它不形成第二车速估计。
需要注意,忽略 checksum 与计数器的两帧仍留在 RX 存活表里,因此不能写成「完全不检查」。频率是检查配置,并非对每帧的实时 deadline 保证。
| RX 帧 | 检查配置 | 钩子消费 |
|---|---|---|
| ESP_19 0x0B2 | 8 字节、100 Hz;忽略 checksum/计数 | 四轮原始值求和大于 0 判移动 |
| LH_EPS_03 0x09F | 8 字节、100 Hz;CRC + 4 位计数 | 带符号驾驶员扭矩采样 |
| ESP_05 0x106 | 8 字节、50 Hz;CRC + 4 位计数 | 制动压力超过门限的布尔值 |
| TSK_06 0x120 | 8 字节、50 Hz;CRC + 4 位计数 | ACC 状态 3/4/5 视为接合,2 视为主开关可用 |
| Motor_20 0x121 | 8 字节、50 Hz;CRC + 4 位计数 | 原始油门字段非零 |
| Motor_14 0x3BE | 8 字节、10 Hz;忽略 checksum/计数 | 踏板开关位 |
| GRA_ACC_01 0x12B | 8 字节、33 Hz;CRC + 4 位计数 | 纵向 Set/Resume 释放沿,任意模式 Cancel 退出 |
TX 字段门与空白
volkswagen_mqb_tx_hook() 检查 HCA_01 的扭矩与请求位、ACC_06/07 的加速度,以及在未允许控制时 GRA 的设置/恢复位。HCA_01 由共享扭矩钩子检查最大 300、每帧上升 4 与下降 10、实时差 75、驾驶员扭矩余量 80 和请求位;LH_EPS_03 bus 2 虽在 TX 表中用于 Emergency Assist 兼容,但本模式 TX 钩子没有该帧的专属扭矩或载荷检查,其准入只受白名单和继电器故障约束。
GRA_ACC_01 在 Stock 模式允许 bus 0/2 与 8 字节;未允许控制时只禁止字节 2 的 Set/Resume 对应位,钩子并不要求 Cancel 必须置位,也不全面约束其余按钮位。已允许控制时,这一专属按钮门不再限制这些位。ACC_06/07 只在纵向 TX 表中,两帧主加速度都用 -3.5 至 2.0 m/s² 活动范围与 3.01 m/s² 未激活编码,ACC_07 的另一加速度字段固定要求 3.02 m/s²。
| TX 帧 | 专属检查 | 空白与边界 |
|---|---|---|
| HCA_01 | 最大 300、每帧上升 4/下降 10、实时差 75、驾驶员扭矩余量 80、请求位 | 共享扭矩钩子生效 |
| LH_EPS_03(bus 2) | 仅白名单与继电器故障约束 | 本模式无专属扭矩/载荷检查 |
| GRA_ACC_01 | Stock 模式;未允许时禁字节 2 Set/Resume 位 | 不要求 Cancel 置位,不全面约束其余按钮位 |
| ACC_06/07 | 仅纵向表;主加速度 -3.5 至 2.0,未激活 3.01 | ACC_07 另一字段固定要求 3.02 |
| LDW_02 / ACC_02 | 无本模式专属载荷分支 | 白名单不证明仪表语义或 ECU 接受 |
面向自制硬件的插件契约
车型插件应提交 MQB 平台、DBC、网关或相机线束、固件构建及纵向授权证据,未知组合保持只读。总线插件要分别标注 LH_EPS_03 的 bus 0 RX 与 bus 2 TX,以及 Stock 模式 GRA_ACC_01 的 bus 0/2 TX,不能按单一 ID 推断方向。
转向与纵向插件只提供意图;可信任网关负责编码、节拍、HUD 与 LH_EPS_03 模板及 ECU 静默回执,最终 TX 仍由独立 MCU safety 决定。故障注入须覆盖两路制动输入失效、主开关或按钮沿错序、CRC 与计数故障、拒帧、错总线,以及纵向固件不支持时的降级。
证据与缺口
三项模式离线探针直接运行编译版 safety:调试构建的 Stock 模式允许 bus 2 的 GRA_ACC_01,纵向模式拒绝它;用 DBC 打包的未激活加速度 ACC_06=3.01 m/s² 仅在调试纵向模式通过。以同一 LONG 参数但无 ALLOW_DEBUG 编译后,bus 2 的 GRA_ACC_01 再次可通过、该合法未激活 ACC_06 被拒,说明该测试构建实际退回 Stock TX 表。
这里说的「无调试宏」只表示本机 C 测试库的预处理条件,不等于目标 MCU 固件已验证。现有 test_volkswagen_mqb.py 覆盖扭矩、冗余制动、Stock 按钮、纵向加速度与按钮使能;本机运行该模块 65 项,9 项跳过,其余通过,但仍没有目标板或实车数据,不能宣称车载可用。
常见问题
Stock ACC 与自控纵向模式的 TX 白名单差在哪?
Stock 模式在 bus 0 与 bus 2 发 GRA_ACC_01;自控纵向模式完全不发该帧,改为在 bus 0 发 ACC_02/06/07。两种模式的 RX 都是同一七组、都在 bus 0。
为什么 LH_EPS_03 的 RX 在 bus 0、TX 却在 bus 2?
这是该实例的本地总线角色分工:RX 取自 bus 0,候选 TX 在 bus 2,用于 Emergency Assist 兼容。不能因为 ID 相同就把两个方向混为一个。
忽略 checksum 与计数器的两帧是不是等于完全没检查?
不等于。ESP_19 与 Motor_14 虽然忽略 checksum 与计数,但仍留在 RX 存活表中,仍受地址、总线、长度与存活检查约束。
上层 CarParams 开了纵向能力就代表固件允许发 ACC 吗?
不代表。纵向配置依赖 FLAG_VOLKSWAGEN_LONG_CONTROL,且只有 ALLOW_DEBUG 构建才读取它;上层能力位不能单独证明发布固件允许发送 ACC。探针显示无调试宏编译时会退回 Stock TX 表。
延伸阅读
- Volkswagen MEB panda safety:Gen2 CRC、双车速与曲率 —— 对照本文 MQB 的扭矩链与总线角色划分。
- 从使能到车轮:执行链上的八道门,以及它们各自不保证什么 —— 解释本文 TX 白名单之后为何还有继电器与 ECU 边界。
- 同一个「转向灯」在三家车厂是三种实现:车辆状态归一化的坑 —— 承接本文 RX 状态来源与总线方向的差异。
参考资料
- 项目 02 ——
openpilot-research/VOLKSWAGEN_MQB_PANDA_SAFETY_DEEP_DIVE.md(取用了双模式总线矩阵、RX 完整性表、TX 字段门与空白、模式离线探针结论)。 - 项目 02 ——
openpilot-research/VOLKSWAGEN_MEB_PANDA_SAFETY_DEEP_DIVE.md(同品牌关联专题,用于对照 MQB 与 MEB 的差异,本文未展开其 Gen2 CRC 细节)。
说明:本文为对固定源码快照的静态结构分析,未运行完整测试套件、未连接硬件、未验证目标车型的真实参数组合。文中所有阈值、行号索引与配置均出自源文档,标注为未验证的结论保留其原有边界。
更新记录
首次发布 2026-10-11 最近核对:2026-10-11