作者 | 糊涂振
出品 | 汽车电子与软件
工作中频繁碰到reset,一会听说是内狗reset了,又一会听说是外狗reset了。到底什么是看门狗,又到底什么是内狗,什么是外狗呢?接下来本文将你了解看门狗的基础知识和基础原理。
什么是看门狗?
汽车控制器的看门狗与我们以前学习单片机所了解的看门狗其实是一个东西,即看门狗(Watchdog Timer,WDT)是一种特殊的定时器。它就像一个 “监督者”,用于监测微控制器系统的运行状态。当微控制器由于软件故障(如程序陷入死循环)、外部干扰(如电磁干扰导致程序跑飞)等原因不能正常运行时,看门狗会在设定的时间内没有被 “喂狗”(即没有执行复位操作)后,产生一个复位信号,使控制器重新启动,从而恢复系统的正常运行。
source: https://blog.csdn.net/zerothpower/article/details/108616557
看门狗通常有一个计数器,它会按照一定的时钟源进行递增或递减计数。在正常情况下,程序需要在看门狗计数器溢出(达到设定的时间限制)之前对其进行复位操作(喂狗),这样计数器就会重新开始计数,避免产生复位信号。如果程序因为故障无法在规定时间内喂狗,计数器溢出就会触发复位。
以TI TPS3851为例,它是一个带有集成看门狗计时器的监控器,这使得它既能监控微控制器的供电,又能以外部方式监控来自微控制器的数字脉冲。一种实现方式是通过微控制器的数字信号输出(GPIO)接入到外部看门狗计时器的看门狗输入(WDI),如下图所示:
Source: TI
微控制器定期向看门狗计时器发送脉冲,以表明系统软件运行正常。如果看门狗计时器在规定的时间范围内(称为看门狗超时)未接收到此脉冲,看门狗计时器就会断言一个复位输出。该复位输出可用于通知微控制器已出现卡顿或冻结,或用于复位微控制器本身。
下图描述了在看门狗超时内接收到的脉冲和在看门狗超时过后接收到的脉冲的两种情况:
Source: TI
#02
什么是硬件看门狗与软件看门狗?
看门狗通常分为硬件看门狗和软件看门狗,下面介绍下它们的主要类型及其工作原理。
2.1 硬件看门狗
常见的硬件看门狗有三种:独立看门狗、窗口看门狗和问答型看门狗。
1) 独立看门狗
独立看门狗通常使用一个独立的定时器,比如STM32的独立看门狗,其时钟源为内部的独立40kHz的RC振荡器,计数器位宽为12位。当正常运行时,主控制器需在计数器减到0之前通过喂狗操作重置计数器;若未及时喂狗,计数器计数到末尾则会产生复位信号,使系统复位。
独立看门狗独立于CPU之外,有自己的时钟源和计数器,可在系统低功耗模式下运行,硬件成本低,软件配置简单,可靠性高,适用于对硬件可靠性要求不是特别严格的场合。
2)窗口看门狗
窗口看门狗除了有递减计数器外,还有上下窗口值的设定,喂狗操作必须在设定的窗口时间内进行,即要求喂狗的时间点必须落在窗口期内,否则就会触发复位信号。
我们可以通过下图来做了解:
Source: https://www.allaboutcircuits.com/technical-articles/watchdog-timers
再比如英飞凌低压差稳压器TLE7273-2中的窗口看门狗,其每个看门狗窗口由一个打开的窗口和一个关闭的窗口组成,只有在打开的窗口期内接收服务才有效,否则报错。
总的来说,窗口看门狗对喂狗时间和系统运行逻辑有更严格的限制,能更精确地检测出系统异常,适用于时序要求严格的应用场景,比如工业控制等领域。
3)问答型看门狗
问答型看门狗要求微控制器按照要求执行一系列固定的对令牌值的算术运算,并将生成的令牌值返回给看门狗设备,设备验证微控制器是否在指定时间窗口内返回正确计算的响应,若不符合要求则视为异常事件,当异常事件计数达到预先定义的限制时,触发失败。
问答型看门狗必须每半个看门狗周期维护一次,这段时间由 WD_TIMER 和 WD_PRE 寄存器位配置的窗口时间定义。看门狗周期分为两个响应窗口,每个窗口占看门狗周期时间的 一半。在第一个窗口期间,控制器 1 读取问题并发送前三个答案。然后控制器等待在第二个窗口中发送第四个也是最后一个答案,在第二个窗口结束时,一个新的看门狗周期开始,该过程重复进行,如下所示:
Source: