SBC Watchdog 深度 — Simple / Window / Q&A + MCU 协同

功能安全L1别名 watchdog · window watchdog · Q&A watchdog · SBC watchdog · 看门狗 · challenge-response · 更新

本质与导读

本质 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 详细协议一次画清:

Watchdog 3 类协议 — Simple / Window / 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 challenger16-bit LFSRLFSR 变换值取反全 bit + MSB/LSB 交换;fault counter final 默认 6SPI
NXP FS26 challenger16-bit LFSRLFSR 变换值同 challenger 家族(seed 可 MCU 注入)SPI
Infineon TLF35584 FWD表选 question32-bit(4 字节)前 3 字节→FWDRSP,末字节→FWDRSPSYNC;ΣFWO 错 +2 / 对 −1SPI
TI TPS65381A4-bit token4 字节(计算,勿用 LUT)双 50% response window,分 2 段答;DC 靠计算式SPI
ST L9788 WDA4-bit REQU32-bit(4 字节)64-byte ROM LUT;ERR_CNT 初值 6MSC

原稿曾列 "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,而是多硬件信号同时拉:

  1. nRESET / RSTB 拉低 → MCU 复位 → 应用停,并重开 256 ms INIT_FS 窗口 retry(单次不锁死)
  2. FS0B(必要时叠 FS1B)安全输出 拉低 → 栅极驱动 IC 的 enable/STO 输入被拉停 → 关栅 → 主驱 safe state
  3. FCCU / INTb 通知 VCU 或汇集片内 fault(可选)
  4. 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):

  1. 物理独立:SBC 单独 IC,独立 LDO
  2. 时钟独立:SBC 内部时钟,不共享 MCU 时钟
  3. 软件独立:Q&A 算法跑 SBC 内部 ROM,跟 MCU SW 完全分离
  4. 电源独立: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 默认 6SBC 内部,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 μs16-bit @ 8 MHz(纯时钟 2 μs)+ CS 建立 + ISR 进入
算 answer< 1 μsLFSR 取反 + MSB/LSB 交换,几条指令
写 answer(SPI)~15 μs16-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 窗口 → 假 failprofile + 留 50% 窗口 margin
Q&A 算法 mismatch量产瞬间所有 ECU trip用 vendor ref code + 集成测试
WD task 被中断抢占假 failtask 最高优先级 + 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 集中在 配置 / 时序 / 种子 / 调度 / 测试,代码逻辑反而少。

缩写表

只列本页用到的工业标准缩写;通用英语…

只列本页用到的工业标准缩写;通用英语 / 单位 / 月份 / 我们的 层/Lx tag 不列。覆盖不到的术语见正文 inline 注释。

缩写全称中文 / 备注
SBCSystem Basis Chip系统基础芯片(电源 + 收发器 + 监控集成)
MCUMicrocontroller Unit微控制器(本页多指车规多核 MCU)
STOSafe Torque Off安全转矩关闭 (IEC 61800-5-2)
NXPNXP Semiconductors恩智浦半导体
TITexas Instruments德州仪器
ISOInternational Organization for Standardization国际标准化组织
EVElectric Vehicle电动车
ASILAutomotive Safety Integrity LevelISO 26262 安全完整性等级 QM→A→B→C→D
DFADependent Failure Analysis相关失效分析(ISO 26262-9)
STSTMicroelectronics意法半导体
VCUVehicle Control Unit整车控制器
ECUElectronic Control Unit电子控制单元
SPISerial Peripheral Interface串行外设接口
RTOSReal-Time Operating System实时操作系统
LDOLow Dropout Regulator低压差线性稳压器
FTTIFault Tolerant Time Interval容错时间间隔
HARAHazard Analysis and Risk Assessment危害分析与风险评估,part 3
FMEDAFailure Modes, Effects and Diagnostic Analysis含诊断覆盖的 FMEA

Cross-references