时钟监控、故障检测与时钟失效切换:CMU/CCS 设计
更新时间:2026-09-19。前置:SoC 时钟控制器、全数字 PLL、无毛刺时钟 mux。功能安全(汽车 ISO 26262、工业)要求系统在主时钟丢失时仍能进入安全态——这靠时钟监控与失效切换。
本文要回答的问题
- 硬件怎么在没有「更快参考」时判断时钟频率异常/停振?
- PLL 失锁、晶振停振分别怎么检测?
- 检测到故障如何无毛刺地切到安全时钟并通知系统?
- 监控器自身的可信性、误触发和恢复有哪些坑?
一、要检测的故障
- 停振(stuck-at):晶振/外部时钟停在 0 或 1,系统无沿停摆。
- 频率越界(too fast/too slow):PLL 漂移、配置错误导致频率超规格(高频会时序违例,低频会超时)。
- PLL 失锁(loss of lock):LOCK 信号丢失或抖动。
- 时钟抖动/毛刺过大:更难,常由专门测量或锁相状态间接反映。
二、CMU 检测原理
时钟监控单元(Clock Measurement Unit)通常用两个独立时钟互为参考:
bash
待测时钟 f_test ◄─┐
├─ 计数器互测:
参考时钟 f_ref ───┘ 在 N 个 ref 周期内数 test 的沿数
count 落在 [min,max] 才合法- 频率窗口检测:在已知参考的固定闸门内计数被测时钟,超出上下限即报「频率过高/过低」;这和 定时器测频闸门法原理相同,但做成硬件自治、带迟滞。
- 停振检测:用一个常开的低速 RC(独立于晶振/PLL)作「生命检查」,若在超时窗口内看不到被测时钟的边沿,判定停振。关键是参考必须来自独立时钟源(内部 RC/独立振荡器),否则主时钟死了监控器也跟着死。
- PLL LOCK:直接接 PLL 的 lock 信号,失锁即事件;但 lock 可能误报/漏报,通常结合频率窗口双重确认。
- ** duty/边沿检测**:可选监测占空比/缺失脉冲。
监控器一般可编程阈值(上下限、闸门长度、滤波)、有中断标志和复位动作选择。
三、CSS 时钟安全切换
检测到主时钟致命故障时,时钟安全系统(Clock Security System/CMU 联动)自动动作,通常不依赖软件:
bash
主时钟正常: core ◄── glitch-free mux ── PLL/HSE
故障检测: 硬件立即把 mux 切到安全时钟(内部 RC,如 HSI/内部 16M/低速 RC)
├─ 置故障标志、发 NMI/中断(安全时钟下仍能执行)
├─ 关断可能损坏的高频外设/进入安全态
└─ 软件在安全时钟上记录、降级运行或受控复位- 切换必须经 无毛刺/无停摆时钟 mux(见 glitch-free mux):先在内部安全停旧时钟选择、同步到新时钟域再开新选择,保证输出不出现窄脉冲也不长时间无沿。
- 备用时钟(内部 RC)通常精度差但不依赖外部晶振,频率足够跑安全代码和通信降级;不能用它跑要求精确时序的外设(见 时钟控制器约束)。
- 恢复:主时钟恢复后需重新等 PLL LOCK、由软件确认稳定再切回,不能硬件自动来回抖(加迟滞/手动确认)。
四、与复位/安全系统联动
- 故障可配置为发 **NMI(不可屏蔽)**而非普通中断,确保即使在关中断临界区也能响应。
- 严重时触发系统复位或把电机驱动器/PWM 置安全电平(与定时器 刹车 BKIN 类似的安全理念)。
- 监控结果接入安全 MCU/ESM(Error Signaling Module)、复位控制器(见 系统复位控制器),形成诊断覆盖;安全设计还要有「监控器自检」——能注入测试故障验证 CMU 真的能报警。
五、常见的坑
- 监控时钟与被测同源:主时钟停了参考也停,监控器一起死,失去保护;参考必须独立(内部 RC)。
- 阈值不留裕量:正常温漂/抖动就触发误报;要按数据手册分布设上下限并加迟滞。
- 切换有毛刺/停摆:用普通组合 mux 切时钟产生窄脉冲或空档,二次危害;必须 glitch-free。
- 切到 RC 后还按高频跑外设:UART/USB/PWM 时序全错,要同步降级/重配。
- 失锁只看 LOCK 位:LOCK 抖动未滤波/未与频率窗口双确认,误动作或漏检。
- 自动来回切换抖动:主时钟在阈值附近时反复切,需迟滞+软件确认恢复。
- 故障响应被普通中断屏蔽:关中断期间漏响应,应走 NMI/硬件直连安全动作。
- 监控器从不自检:CMU 本身坏了无人知,安全标准要求可注入测试。
- 备用 RC 未校准/未上电:真故障时备用源不可用。
- 只检测不停振处理:检测到了但没有定义安全态(关 PWM/通知/复位),等于没保护。
- 复位/时钟域交叉未同步:故障标志跨域未用 两级同步,亚稳态导致漏报。
相关与延伸
时钟树与无毛刺切换见 SoC 时钟控制器、无毛刺时钟 mux、全数字 PLL;跨域标志见 CDC;安全态/复位见 系统复位控制器。
总结
时钟监控用「独立常开 RC 作参考,在固定闸门内计被测时钟的边沿数」做频率上下限与停振检测,并用 PLL LOCK 双重确认;一旦主时钟致命失效,CSS 不经软件立即用无毛刺时钟 mux 切到独立内部 RC 安全时钟、发 NMI 并把危险外设/PWM 置于安全态,软件再在低速时钟上降级或受控复位,恢复时须等 PLL 锁定并人工确认以防抖动——监控器与主时钟同源、阈值无裕量误报、切换出毛刺和切到 RC 后不降级外设是四大致命坑。