SBC Watchdog 深度 — Simple / Window / Q&A + MCU 协同
本质与导读
本质 Watchdog 是 SBC 独立监视 MCU 是否真在按预期跑代码 —— 不是靠 MCU 自证。所以 ASIL D 主驱要上挑战式 Q&A WD:SBC 出题(FS65 用 16-bit LFSR 伪随机 challenge)、MCU 读种子按固定变换算出 answer 回写,验的是 CPU+Flash+算法链全活,而非只看喂狗 task 在跑。trip 时 SBC 直接拉硬件安全输出(FS0B/FS1B)命令外部栅驱执行 STO 进 safe state、不经 MCU 决策,这才是 ASIL D 分解 channel B 物理/时钟/软件/电源四项独立的核心。
主线坐标:旁支 · 低压控制域 · ↑ 全景主线
1. 3 类看门狗协议
看门狗的本质都是"MCU 定时喂狗,超时则 reset",但喂的方式 + 验证深度决定保护强度。Simple 只看时间;Window 加时间窗口;Q&A 还验算法正确性。下图把三类时序 + Q&A 详细协议一次画清:
2. Simple Watchdog
最基础形式:MCU 任何时间在 Tmax 内喂一次,WD 计数器 reset;超 Tmax 未喂 → WD trip → SBC 拉 nRESET。
实现:
void main_task(void) {
while (1) {
// application code...
feed_watchdog(); // GPIO toggle 或 SPI write
delay_ms(50);
}
}
保护强度:
- ✓ MCU 整体卡死 (CPU hang) → 喂狗 task 也停 → reset
- ✗ 死循环里调 feed_watchdog():仍喂狗,WD 不 trip,application 实际挂了
- ✗ stuck loop:也喂狗,WD 不查 application 在哪里
ASIL 上限 B。EV 主驱不够。
3. Window Watchdog
升级版:喂狗必须在时间窗口 [Tmin, Tmax] 内,早喂也 trip。
典型:
- Tmin = 5 ms
- Tmax = 15 ms
- 喂狗时间窗口宽度 10 ms
实现:
void main_task(void) {
uint32_t last_feed_us = get_time_us();
while (1) {
// application code...
uint32_t now = get_time_us();
if (now - last_feed_us >= T_MIN_US) {
feed_watchdog();
last_feed_us = now;
}
// 不在窗口内不喂
}
}
保护强度:
- ✓ 同 Simple WD
- ✓ 防"死循环喂狗" — 死循环执行快,会早喂触发 reset
- ✓ 防 stuck loop(任务慢 → 错过窗口)
- ✗ 不能验"喂狗代码"是否真在 main task 里跑(还是被错误调度跑了)
ASIL 上限 C-D。EV 主驱够用但偏简单。
4. Q&A Watchdog (Challenge-Response)
最严:SBC 出题 → MCU 算 → 答。整个 protocol 验CPU + Flash + 算法真在执行。
典型 SBC (NXP FS65 挑战式) Q&A 算法(核到 datasheet / AN14879 Fig.4):
- SBC 内 16-bit LFSR 生成伪随机 challenge,存
WD_LFSR寄存器(默认种子 0x5AB2;INIT_FS 阶段 MCU 也可注入自己的 seed) - MCU 读 seed,按固定变换(取反全部 bit + 交换 MSB/LSB)算出 answer,经 SPI 写回——不是查表也不是 CRC,是 LFSR 的确定性变换(不同 SBC 变换不同,见 §5)
- SBC 比对:对 → 刷新窗口 + 生成新 LFSR;错 / 超时 / 喂早(CLOSED 段)→ bad refresh,fault error counter 上升(bad +2 / good −1 是 FS65/TLF35584 家族的滞回模式)
- counter 数到 final(默认 6) → 升级到 latched 的 Deep Fail-Safe(拉 FS0B/FS1B + 关 rail,只能 power-cycle 退出);单次 RSTB 只是重开 256 ms INIT_FS 窗口 retry
通用 Q&A 骨架(算法随 SBC 变:FS65=LFSR 变换 / L9788=64-byte ROM LUT / TPS65381A=计算式):
// MCU 端
void wd_task_10ms(void) {
uint8_t Q = sbc_read_question(); // SPI 读 SBC
uint16_t A = compute_answer(Q); // 加密 / 查表 / CRC
sbc_write_answer(A);
}
uint16_t compute_answer(uint8_t Q) {
// 算法在 Flash table + RAM 状态
uint8_t seed = (Q >> 4) & 0x0F;
uint8_t counter = Q & 0x0F;
uint16_t base = ANSWER_LUT[seed];
return crc16(base + counter); // 真涉及 Flash + RAM + CPU
}
保护强度:
- ✓ Window WD 所有
- ✓ 验 CPU 真在执行算法(死循环喂狗也算不对答案)
- ✓ 验 Flash 完整性(LUT 数据正确)
- ✓ 验 RAM 状态(counter 递增)
- ✗ 仍不能验 application 逻辑正确(算法本身可能 bug)
ASIL 上限 D,EV 主驱 ASIL D 首选。
5. 主流 SBC Q&A 协议 (2026)
下表汇总主流 SBC 挑战式/Q&A 协议特征,每格均核到官方 datasheet(窗口周期几乎都可配,故不列固定周期,以免误当硬值):
| SBC(WD 模式) | 挑战 Q | 应答 A | 算法 / 错次计数 | 接口 |
|---|---|---|---|---|
| NXP FS65 challenger | 16-bit LFSR | LFSR 变换值 | 取反全 bit + MSB/LSB 交换;fault counter final 默认 6 | SPI |
| NXP FS26 challenger | 16-bit LFSR | LFSR 变换值 | 同 challenger 家族(seed 可 MCU 注入) | SPI |
| Infineon TLF35584 FWD | 表选 question | 32-bit(4 字节) | 前 3 字节→FWDRSP,末字节→FWDRSPSYNC;ΣFWO 错 +2 / 对 −1 | SPI |
| TI TPS65381A | 4-bit token | 4 字节(计算,勿用 LUT) | 双 50% response window,分 2 段答;DC 靠计算式 | SPI |
| ST L9788 WDA | 4-bit REQU | 32-bit(4 字节) | 64-byte ROM LUT;ERR_CNT 初值 6 | MSC |
原稿曾列 "ST L9784 / MPS MP2932" 两行——核后均属虚构料号误用:L9784 是 ST 发动机管理的传感器接口 IC、无 SBC Q&A 狗;MP2932 是 MPS 的 6-phase VR10/VR11 PWM 控制器、根本不是 SBC。已删,换成上表 5 颗可核实的真器件(见 SBC 页 §5 与 FS65 深页 §3.2)。
EV ASIL D 主流配对:TC397 + TLF35584 / S32K3 + FS65 — 都跑挑战式 Q&A。经济车身档反而用无 Q&A 的窗口/超时狗 SBC(如 NXP UJA1169),Q&A 只在 ASIL C-D 才必需——上错档次要么防不住(见 §2)要么白花成本。
6. Watchdog Trip 后的硬件反应
watchdog 错次达阈值 → SBC 不是只 reset,而是多硬件信号同时拉:
- nRESET / RSTB 拉低 → MCU 复位 → 应用停,并重开 256 ms INIT_FS 窗口 retry(单次不锁死)
- FS0B(必要时叠 FS1B)安全输出 拉低 → 栅极驱动 IC 的 enable/STO 输入被拉停 → 关栅 → 主驱 safe state
- FCCU / INTb 通知 VCU 或汇集片内 fault(可选)
- fault error counter 数到 final(默认 6)→ 进 latched Deep Fail-Safe — 除 VKAM 外全 rail 关断、FS0B+FS1B 同时拉低,只能 power-cycle 退出
注意 SBC 上没有字面 'STO' 引脚:STO 是 IEC 61800-5-2 的安全功能,由 SBC 的 FS0B 命令外部栅驱执行。EV 主驱watchdog trip 直接拉硬件安全输出、不靠 MCU 决策 — 这是 ASIL D 分解 channel B 的本质。
链接:SafeState Manager §3 2nd-Level
7. 调试常见问题
EV PEU 开发中 watchdog 是最容易 debug 失败的模块。下表 5 个反复出现的:
7.1 Q&A 算法 mismatch
MCU 端算法跟 SBC 期望不一致(版本 / 多项式 / seed 用错) → 量产瞬间所有 ECU watchdog trip。
对策:
- 用 SBC 厂商的 reference C code(NXP / Infineon 都给)
- 集成测试覆盖 Q&A 至少 1000 个不同 seed
7.2 timing 不够
MCU 读种子 + 算 answer + SPI 写回必须落在 OPEN 窗口内(ms 级,不是 μs);若算法 + 中断延迟吃掉窗口 → 错过 OPEN 段 → 假 fail。注意窗口是 ms 级、单轮计算预算才是 μs 级——别把两者混为一个 "≤100 μs timeout"。
对策:
- profile MCU 算法 + SPI 往返时间(挑战式变换本身 <1 μs,瓶颈在 SPI 帧 + ISR 进入),对 OPEN 窗口留 ≥ 50% margin
- 把 LUT 放 Flash 0 wait state 区(仅 L9788 这类查表式狗需要)
- 关键算法 inline,避免函数调用开销
7.3 SPI bus 失常
Q&A 通过 SPI 通讯,SPI bus 错(CRC / 通讯丢)→ 假 fail。
对策:
- SPI 走线短 + 屏蔽
- 每 Q&A 帧带 CRC + retransmit (但要避免延误 timeout)
7.4 多任务调度抢占
RTOS 下 wd task 被高优先级中断抢占 → 没及时回答 → fail。
对策:
- wd task 设最高优先级
- 关键中断不超过 50 μs
7.5 单元测试缺失
集成测试不模拟 watchdog fail → 量产后无 way to test → 真 fail 时 reaction 错。
对策:
- 必有"unit test: SBC fault injection 模拟 Q answer wrong"
- HIL 测试包 Q&A 故障 scenario
8. ASIL D DFA 中 watchdog 的角色
ASIL D = B(D) + B(D) 分解时,SBC Q&A WD 是 channel B 的核心:
- channel A:主 MCU 双核 lockstep(开发 B 等级)
- channel B:SBC + Q&A WD + STO 硬件(开发 B 等级)
DFA 4 项独立性证据(见 topic-asil-decomposition-deep §3):
- 物理独立:SBC 单独 IC,独立 LDO
- 时钟独立:SBC 内部时钟,不共享 MCU 时钟
- 软件独立:Q&A 算法跑 SBC 内部 ROM,跟 MCU SW 完全分离
- 电源独立:12V → SBC 独立 buck,不共享 MCU 主 power
watchdog 是 SBC 监视 MCU 的主要手段,SBC 自身不需要被 MCU 监视(双向不对称是 OK 的)。
9. 设计参数速查
EV 主驱 ASIL D Q&A WD 典型参数:
| 参数 | 典型值 | 来源 |
|---|---|---|
| Q 长度 | 4-16 bit(FS65=16-bit LFSR;TPS65381A=4-bit token) | SBC datasheet |
| A 长度 | 16-32 bit(TLF35584/L9788 均为 4 字节) | SBC datasheet |
| Q&A 窗口周期 | 可配(下例取 10 ms) | 项目级配置 |
| MCU 算法 + SPI 往返 | < 100 μs(须 < OPEN 窗口的 50%) | profile,OPEN 窗口决定 |
| 错次阈值 | fault counter final 默认 6 | SBC 内部,bad +2 / good −1(FS65/TLF35584) |
| Trip 反应时间 | < 1 μs (硬件) | SBC datasheet |
| FTTI | < 100 ms (整链) | ISO 26262 + HARA 决定 |
10. Worked design — FS6523 + S32K344 挑战式 WD 时序 + FTTI 预算
前面讲协议,这节把它落到一块真板子:EV 主驱 PEU,channel B = NXP FS6523(2.2 A FS1b 版安全 SBC:CAN+FS1B,无 LIN)+ S32K344(lockstep MCU)。危害"非预期扭矩输出"的 HARA 定出 FTTI = 100 ms,要验证挑战式 WD 的检测时延 + 硬件反应能否吃进这个预算。
第一步 — 单轮应答延迟(会不会错过 OPEN 窗口):取窗口周期 10 ms、CLOSED/OPEN 各 50% → OPEN 窗口 5 ms。MCU 一轮要读 16-bit LFSR 种子、算 answer、写回,逐项预算:
| 预算项 | 值 | 说明 |
|---|---|---|
| 读种子(SPI + ISR) | ~15 μs | 16-bit @ 8 MHz(纯时钟 2 μs)+ CS 建立 + ISR 进入 |
| 算 answer | < 1 μs | LFSR 取反 + MSB/LSB 交换,几条指令 |
| 写 answer(SPI) | ~15 μs | 16-bit 回写 |
| 单轮合计 | ~30 μs | ≪ OPEN 5 ms,余量约 160× |
单轮延迟根本不是瓶颈——真正的紧约束是两条:(a) INIT_FS 首次 good refresh 必须 ≤ 256 ms,否则上电即 RSTB;(b) 连续 miss 到 fault counter final 的检测时延要 ≤ FTTI。
第二步 — FTTI 分解(检测 + 反应):bad refresh 使 fault counter +2、good −1(FS65/TLF35584 家族的滞回;FS65 精确增量以 SMUG 为准),final = 6。MCU 一旦跑飞持续答错,从全对到 final 需连续 3 次 bad refresh,故检测时延 = 3 × 窗口周期 = 3 × 10 ms = 30 ms。再加硬件反应(RSTB/FS0B 拉低 < 1 μs + 栅驱关栅传播数 μs),整链 ≈ 30 ms,远小于 FTTI = 100 ms。
结论:10 ms 窗口对 100 ms FTTI 有约 3× 余量,剩 ~70 ms 留给上游诊断链路 jitter + 安全裕度。但若高转速工况把 FTTI 收紧到 30 ms,30 ms 检测时延就吃满预算——此时必须把窗口降到 ~5 ms(检测降到 15 ms)或向 SMUG 确认 fault counter 实际增量,否则 WD 检测链在最坏工况下无余量。这正是"窗口周期不是拍脑袋填 10 ms,而是 FTTI 反推"的落点。
11. 工程陷阱(Gotcha)
watchdog 设计失败往往不是协议本身,而是配置 / timing / 测试 4 类问题。下表 7 个典型坑:
| 陷阱 | 描述 | 预防 |
|---|---|---|
| Simple WD 用于 ASIL D | 防不了死循环喂狗 | 必上挑战式 Q&A |
| MCU 算法 + SPI 太慢 | 错过 OPEN 窗口 → 假 fail | profile + 留 50% 窗口 margin |
| Q&A 算法 mismatch | 量产瞬间所有 ECU trip | 用 vendor ref code + 集成测试 |
| WD task 被中断抢占 | 假 fail | task 最高优先级 + IRQ < 50μs |
| 没 HIL 测试 WD trip | 量产 fail 才发现 | FI test 必涵盖 |
| INIT_FS 256ms 首刷漏配 | 上电即 RSTB → 上电-复位死循环 | startup 序列内 ≤256ms 完成首次 good refresh |
| DEBUG pin 未屏蔽量产件 | WD timeout 被禁用、FS0B 不释放 | 量产固件强制退 DEBUG,产线核 DEBUG pin 电平 |
12. 工作极限(Corner)
挑战式 WD 在三个极端场景最容易暴露盲区,需在 DVT 专项覆盖——都不是协议逻辑错,而是环境 / 种子 / 调度把"本该通过"逼成"误判失效"。
C1 — 冷启角(−40°C):INIT_FS 256ms 窗口被低温频偏 + BIST 侵占
−40°C 下 SBC 内部 RC 振荡器频偏、ABIST/LBIST(每次从 LPOFF 唤醒重跑)耗时拉长,VPRE 建立也变慢。若首次 good refresh 的软件路径按 25°C 时序设计,冷启时可能超过 256 ms INIT_FS 窗口 → 上电即 RSTB,陷入上电-复位循环(§11 的 INIT_FS 陷阱在低温被放大)。冷启 DVT 应专项验证 −40°C 下首次正确应答完成时间 ≤ 窗口 × 0.7。
C2 — 弱 LFSR 种子:注入退化 seed 使 challenge 可预测,诊断覆盖塌陷
FS65 允许 MCU 在 INIT_FS 注入自己的 LFSR seed。若注入的种子让 16-bit LFSR 落入短周期 / 退化序列(极端如全 0),challenge 变得可预测甚至恒定——"跑飞但周期性重放上一个 answer"的 MCU 蒙对概率上升,挑战式狗退化成 simple 狗,诊断覆盖被悄悄削掉。对策:用默认 0x5AB2 或厂商验证过的最大长度种子,别自造;把种子选取纳入 safety review,而非留给应用工程师随手填。
C3 — Q&A task 被 STL 抢占:core self-test 争 CPU → OPEN 窗口应答 jitter
安全软件常在后台跑 STL(core self-test / Flash CRC 扫描),这些是 CPU 密集任务。若 wd task 优先级不够高,STL 一旦抢占,Q&A 应答在 OPEN 窗口内出现 jitter,偶发 miss 累积推高 fault counter(+2/−1 的滞回下,3 次连 miss 就到 final=6)→ 间歇性 WD 复位,且在产线 EOL 极难复现。对策:wd task 置最高优先级、关键 ISR < 50 μs、STL 切成不超过窗口 margin 的时间片,并在 HIL 上叠加最坏 CPU 负载复现 jitter。
核心要点
- 3 类 WD:Simple (ASIL B 上限) / Window (ASIL C-D) / 挑战式 Q&A (ASIL D 首选)。
- Q&A protocol 让 SBC 验 CPU + Flash + RAM + 算法链 真在跑,Simple WD 不行。
- EV 主驱 ASIL D 必挑战式 Q&A:窗口周期可配 + fault counter final 默认 6(bad +2 / good −1)+ 硬件 FS0B/FS1B 反应。
- FS65 挑战式用 16-bit LFSR(种子 0x5AB2,answer = 取反全 bit + MSB/LSB 交换),不是 CRC/查表——原稿列的 ST L9784 / MPS MP2932 两颗系虚构料号误用,已删。
- 主流 SBC:FS65 + TLF35584 + TPS65381A 全内置挑战式/Q&A,算法各异(LFSR 变换 / 表选问题 4 字节 / 4-bit token 4 计算字节)。
- WD trip 直接拉 FS0B/FS1B 安全输出(命令外部栅驱 STO,SBC 无字面 STO 引脚),不靠 MCU 决策 — ASIL D 分解 channel B 的本质。
- DFA 4 项独立性:物理 / 时钟 / 软件 / 电源 必证。
- worked design:10 ms 窗口对 100 ms FTTI 有 ~3× 余量(检测 ≈ 3 × 窗口 = 30 ms);FTTI 收紧到 30 ms 就要降窗口。
- 7 个工程陷阱 + 3 corner 集中在 配置 / 时序 / 种子 / 调度 / 测试,代码逻辑反而少。
缩写表
只列本页用到的工业标准缩写;通用英语…
只列本页用到的工业标准缩写;通用英语 / 单位 / 月份 / 我们的
层/Lxtag 不列。覆盖不到的术语见正文 inline 注释。
| 缩写 | 全称 | 中文 / 备注 |
|---|---|---|
| SBC | System Basis Chip | 系统基础芯片(电源 + 收发器 + 监控集成) |
| MCU | Microcontroller Unit | 微控制器(本页多指车规多核 MCU) |
| STO | Safe Torque Off | 安全转矩关闭 (IEC 61800-5-2) |
| NXP | NXP Semiconductors | 恩智浦半导体 |
| TI | Texas Instruments | 德州仪器 |
| ISO | International Organization for Standardization | 国际标准化组织 |
| EV | Electric Vehicle | 电动车 |
| ASIL | Automotive Safety Integrity Level | ISO 26262 安全完整性等级 QM→A→B→C→D |
| DFA | Dependent Failure Analysis | 相关失效分析(ISO 26262-9) |
| ST | STMicroelectronics | 意法半导体 |
| VCU | Vehicle Control Unit | 整车控制器 |
| ECU | Electronic Control Unit | 电子控制单元 |
| SPI | Serial Peripheral Interface | 串行外设接口 |
| RTOS | Real-Time Operating System | 实时操作系统 |
| LDO | Low Dropout Regulator | 低压差线性稳压器 |
| FTTI | Fault Tolerant Time Interval | 容错时间间隔 |
| HARA | Hazard Analysis and Risk Assessment | 危害分析与风险评估,part 3 |
| FMEDA | Failure Modes, Effects and Diagnostic Analysis | 含诊断覆盖的 FMEA |
Cross-references
- ← 索引
- 功能安全工程师指南 hub — V-cycle + 27 篇深度页全集 (本页在 §12.3 HW 安全设计)
- 辅助电源全栈 hub — Chain 流路 + 8 主题
- 低压辅助电源 hub
- SafeState Manager 深度 — 2nd-Level B(D) 角色
- SBC 多 rail sequencing
- ASIL 分解深度 — DFA 4 项
- Fault Injection Test 深度 — Q&A FI scenarios
- Aurix TC3xx ASIL D — MCU 配 SBC
- 辅助电源 FMEDA + DFA 深度 — SBC 在 AUX 链 FMEDA 主战场的工程化