图片

1 看门狗的基本概念

先看一个典型汽车电子系统中的看门狗定时器(WDT)与微控制器(MCU)的交互设计,如下所示:

图片

MCU是系统的控制核心,负责执行程序逻辑(控制算法、传感器数据处理等)。

WDT是MCU的硬件模块或者独立于MCU的硬件模块, WDT持续“监视”MCU的运行。

MCU需定期向WDT发送“喂狗”信号,以表明程序正常运行。如果MCU因程序跑飞、死锁或电压异常未能及时发送信号,WDT会触发复位操作,强制重启MCU,确保系统恢复至安全状态。

2 看门狗的类型

通常我们接触到的看门狗主要有以下3种类型及对应的工作原理:
1) 超时模式看门狗
该模式是最常见的,即大家所知的喂狗超时引起的MCU重启,其工作原理如下图所示:

图片

MCU正常运行时,MCU需要每5分钟向WDT发送一次“喂狗”信号(图中称为“stroke”,即重置WDT计时器)。向WDT证明MCU程序正在按预期执行,未发生死锁或跑飞。 如果WDT在5分钟超时周期内接收到MCU的喂狗信号,则判定系统正常,继续监控。

图片

当MCU因程序错误、硬件故障或电源问题,未能在5分钟内发送喂狗信号。WDT的计时器超时(5分钟未收到信号),触发故障判定。 WDT“吠叫”(bark),即向MCU发送复位信号(RESET),强制重启MCU,使MCU恢复至初始状态,避免系统持续处于异常状态。

通过周期性喂狗信号监控MCU的运行状态,超时未响应则强制复位,确保系统可靠性,在汽车电子等安全关键领域,此类设计是防止MCU故障导致严重后果的重要保障机制。

2)窗口模式看门狗

上面的超时模式可能会出现一种情况,并不是每5分钟向WDT发送一次“喂狗”信号,而是更短的周期进行喂狗,这时就算出现了MCU运行异常,看门狗可能也检测不到,因为看门狗定时器被频繁地初始化而不会出现超时,因而无法重启MCU。

图片

面对这种情况,我们就好理解窗口模式看门狗了。窗口模式看门狗除了有计时器外,还有上下窗口值的设定,即喂狗操作必须在设定的窗口时间内进行,否则就会触发复位信号

与超时模式(Time-out mode)不同,窗口模式不仅要求MCU在指定时间内发送喂狗信号,还限定了两次信号之间的最小间隔,从而形成一个允许操作的“时间窗口”,如下所示:

图片

MCU正常运行时,MCU需每5分钟发送一次喂狗信号(stroke,即初始化WDT)。  附加约束:两次喂狗信号之间的间隔必须至少为2分钟,这样就确保MCU按预期节奏运行,既不过早(可能程序异常循环)也不过晚(可能死锁)。

WDT的监控逻辑是WDT通过时间窗口(2分钟 ≤ 间隔 ≤ 5分钟),若信号间隔在窗口内,判定为正常。若信号间隔过短(<2分钟)或过长(>5分钟),均触发故障响应。

故障场景1:未按时喂狗(超时),MCU异常表现,未在5分钟内发送任何喂狗信号。  检测到超时后,WDT触发复位信号(bark),强制重启MCU。 

图片

故障场景2:喂狗过于频繁(间隔过短),MCU异常表现。 在2分钟内发送了两次喂狗信号,检测到间隔过短后,WDT同样触发复位信号。 

图片

总之通过时间窗口:下限可防止MCU因代码错误(如死循环)频繁重置WDT, 上限可防止MCU因死锁或崩溃导致长时间无响应。  采用双脉冲检测(Double pulse detection),即WDT会监测两次喂狗信号之间的间隔, 无论超时还是间隔过短,WDT均通过复位MCU使其恢复至初始状态。

在实际应用中的设计考量时间窗口的设定是 需根据MCU任务周期调整。例如,若MCU主循环周期为1分钟,窗口可设为1-3分钟,避免误触发, 高级WDT可能记录故障类型(超时或间隔过短),帮助定位问题根源。 窗口模式比超时模式更严格,可防止MCU因部分功能异常(如部分代码卡死但仍在发送信号)导致的隐性故障。

3)问答模式看门狗 
与之前的超时模式和窗口模式不同,问答模式通过预设数据验证来监控MCU的运行状态,如下所示:

图片

MCU正常运行时,MCU需向WDT发送 预设的二进制信号(图中示例为 `01000001`,对应ASCII字符“A”)。这样通过特定数据证明MCU程序逻辑正常执行,未发生代码篡改或内存错误。若WDT接收到与预设数据完全匹配的信号(`01000001`),则返回“OK”,判定MCU运行正常。

图片

MCU发生故障时,MCU因程序错误、数据损坏或硬件故障,发送了错误的二进制信号(图中示例为 `01000010`,对应ASCII字符“B”)。WDT将接收到的数据(`01000010`)与预设数据(`01000001`)对比,发现不匹配。WDT触发复位信号(RESET),强制重启MCU。

问答模式比简单的定时喂狗更安全,可防止攻击者通过重复发送无效信号欺骗WDT,适用于需要数据完整性验证的场景(如固件防篡改)。问答模式常用于汽车电子、航空航天等领域,防止恶意代码篡改MCU行为。高级WDT可能支持动态预设数据(如滚动密钥),进一步提升安全性。

以上就是最常见的三种模式WDT,不管对内部WDT还是外部WDT来说。最后来探讨一个问题,在汽车ECU发生重启情况时,经常会听到这个重启是内部WDT还是外部WDT引起,这里对于内部WDT好理解,本身包含在MCU中,但外部WDT呢?

3 是否需要外部WDT?

检测MCU故障的WDT功能可以包含在MCU中,也可以独立于MCU,那什么时候需要外部WDT呢?需要外部WDT为关键系统增加了额外的安全层。

比如MCU仅由内部WDT监控时,无法保证出现故障的MCU能够监控自身并检测故障。此时是需要独立运行的WDT,通过外部WDT可以提供所需的冗余。

图片

MCU用于各种电子设备,但是否需要WDT取决于特定应用要求或认为必要的安全级别。汽车ECU是MCU故障或故障可能导致危及生命的事故的设备,在此类影响人类生命的系统或电子控制故障可能导致严重事故的应用中,通常都需要外部WDT来确保足够的冗余。比如ISO 26262等国际标准强调,“功能安全”的概念对于“在安全相关功能和部件发生故障时确保系统安全”至关重要,功能安全需要安装用于检测零件故障等问题的机制,以将风险降低到可接受的风险水平。使用WDT可以检测MCU程序和其他故障,并将设计安全性纳入整个系统。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐