Bootstrap

硬件看门狗工作原理

硬件看门狗是什么?

硬件看门狗(Hardware Watchdog)是一种用于监控系统运行状态的硬件设备或电路。它的主要功能是检测系统是否正常运行,并在系统出现故障或无响应时自动重启或采取其他恢复措施。

工作原理与引脚

硬件看门狗一般外挂在主控芯片MCU上,看门狗内部有一个定时器,系统正常上电复位后该定时器会被重置;MCU在定时器设定的时间内给看门狗发送一个脉冲信号来进行“喂狗”,看门狗接收到喂狗信号后,将定时器重置开启新一轮计时;MCU发生异常无法完成“喂狗”操作直到看门狗定时器超时,看门狗会触发其故障处理操作,发送信号将MCU进行复位;如下:
在这里插入图片描述

  • 根据上面的原理,我们来想一下一个最简单的看门狗芯片有哪些引脚:
    供电引脚VCC和接地引脚GND;
    使能引脚EN;
    喂狗引脚即MCU时钟脉冲输入引脚CLK;
    复位信号输出引脚RST;

  • 以上就是最简单的看门狗所需的引脚,大部分看门狗还有以下几个引脚:
    看门狗定时器时间以及看门狗复位延迟时间设置引脚CTW;
    (定时器时间:即喂狗时间阈值可以通过在此引脚上外接电容来进行设置;)
    (复位延迟时间:看门狗触发复位输出时输出多长时间的脉冲时间;)
    (二者都可以通过在此引脚上外接电容来进行设置;)
    上电复位时间设置引脚CT;
    (上电复位时间:系统上电时看门狗复位输出脉冲持续的时间;)

设计这两个引脚主要是考虑到以下两点原因:

  1. 不同的MCU内部时钟不同,有些功能简单的MCU内部时钟可能很小只有KHz级别,有些功能复杂的MCU内部时钟在MHz级别,看门狗定时器时间需要根据不同的MCU进行配置;
  2. 不同MCU对于RST复位的脉冲时间有不同的要求,看门狗复位时间需要根据不同MCU进行配置;
  3. 不同MCU对上电时序有一定要求,看门狗上电复位时间需要根据不同MCU进行配置;

看门狗工作时主要引脚电压

在这里插入图片描述
上图是看门狗上电后,使能引脚EN(高有效)一直拉高,当时钟输入引脚CLK一直没收到喂狗信号时,各个引脚的电压变化,由上图知道:

  1. 上电后,当VDD电压值达到看门狗最小工作电压V_{DET},看门狗开始上电复位,CT引脚电压开始充电直到CT引脚的电压升高到该引脚阈值V_{CTTH},这段时间为看门狗的上电复位时间tD;
  2. 上电复位完成后,CTW引脚电压开始充电,直到CTW引脚的电压升高到该引脚高边阈值V_{CTWH},这期间看门狗CLK引脚没有接收到来自MCU的喂狗信号,看门狗触发复位操作,将引脚RST(低有效)拉低;
  3. 引脚RST拉低后,CTW电压开始降低,直到CTW引脚的电压升高到该引脚低边阈值V_{CTWL},这段时间为RST持续输出复位低电平信号给MCU,这段时间为看门狗的复位时间tWL;
  4. 复位完成后,看门狗开始重新计时,RST引脚恢复为高电平,CTW引脚电压开始充电,直到CTW引脚的电压升高到该引脚高边阈值V_{CTWH},这段时间为看门狗的喂狗时间阈值tWH;

相关时间设置与计算

以罗姆的BD87B29FVM看门狗为例,手册中提供了根据外接电容来计算喂狗时间阈值(定时器时间),复位时间以及上电复位时间的方法,如下:

在这里插入图片描述
其中tD为上电复位时间,tWH为喂狗时间阈值(定时器时间),tWH为复位时间;

详细计算过程如下:

  1. 喂狗时间阈值由CTW引脚外接的电容来决定:
    t W H = ∣ V C T W H − V C T W L ∣ × C C T W I C T W C = ∣ 0.9 V − 0.3 V ∣ × C C T W 0.3 u A = 2 × C C T W × 1 0 − 6 t_{WH}=\frac{\left | V_{CTWH}-V_{CTWL} \right |\times C_{CTW} }{I_{CTW_C} } =\frac{\left | 0.9V-0.3V \right |\times C_{CTW} }{0.3uA }=2\times C_{CTW}\times 10^{-6} tWH=ICTWCVCTWHVCTWL×CCTW=0.3uA0.9V0.3V×CCTW=2×CCTW×106
    V_{CTWH}为CTW引脚高边阈值,单位为V;V_{CTWL}为CWT引脚低边阈值,单位为V; I_{CTW_C}为CWT充电电流,单位为A;三者均可以在datasheet中找到对应值;
    C_{CTW} 为CTW引脚外接电容容值,单位为F;
    计算除了的tWH为喂狗时间阈值,单位为S,与datasheet中给出的计算公式一致;

  2. 复位时间也由CTW引脚外接的电容来决定:
    t W L = ∣ V C T W H − V C T W L ∣ × C C T W I C T W D = ∣ 0.9 V − 0.3 V ∣ × C C T W 0.9 u A ≈ 0.67 × C C T W × 1 0 − 6 t_{WL}=\frac{\left | V_{CTWH}-V_{CTWL} \right |\times C_{CTW} }{I_{CTW_D} } =\frac{\left | 0.9V-0.3V \right |\times C_{CTW} }{0.9uA }\approx 0.67\times C_{CTW}\times 10^{-6} tWL=ICTWDVCTWHVCTWL×CCTW=0.9uA0.9V0.3V×CCTW0.67×CCTW×106
    V_{CTWH}为CWT引脚高边阈值,单位为V;V_{CTWL}为CWT引脚低边阈值,单位为V; I_{CTW_D}为CWT放电电流,单位为A;三者均可以在datasheet中找到对应值;
    C_{CTW} 为CTW引脚外接电容容值,单位为F;
    计算除了的tWL为复位时间,单位为S,与datasheet中给出的计算公式一致;

  3. 上电复位时间由CT引脚外接电容来决定:
    t D = V C T T H × C C T I C T = 0.9 V × C C T 1.3 u A ≈ 0.69 × C C T × 1 0 − 6 t_{D}=\frac{V_{CTTH}\times C_{CT} }{I_{CT} }=\frac{0.9V\times C_{CT} }{1.3uA }\approx 0.69\times C_{CT}\times 10^{-6} tD=ICTVCTTH×CCT=1.3uA0.9V×CCT0.69×CCT×106
    V_{CTTH}为CT引脚阈值电压,单位为VI_{CT} 为CWT充电电流,单位为A;三者均可以在datasheet中找到对应值;
    C_{CT}为CT引脚外接电容容值,单位为F;
    计算除了的tD为上电复位时间,单位为S,与datasheet中给出的计算公式一致;

以上计算都是通过电荷量的基础公式进行计算的:
Q = I t = C V Q=It=CV Q=It=CV

注意事项

  1. 对于这个看门狗来说,喂狗时间阈值由硬件C_{CTW}电容大小来确定,而真正的喂狗周期由软件来设置:软件设置的喂狗周期不能太长,如果喂狗周期很接近喂狗时间阈值,则系统可能会由于电容精度等误差发生异常复位的情况;软件设置的喂狗周期不能太短,喂狗周期太短会导致系统功耗增大,尤其是在休眠情况下,喂狗太频繁会导致休眠电流偏大;
    因此,通常软件喂狗时间设置为喂狗时间阈值的一半比较合适;
  2. MCU对RST信号在上电时刻和持续时长有一定要求:一般来说MCU要保证上电一段时间后,才允许RST引脚拉高;复位MCU时也会需要RST信号持续一定时间才能正确复位MCU;
    因此,要先明确MCU的需求,再通过看门狗上电复位时间和复位时间公式来计算出CT与CTW引脚外接电容的容值;
;