硬件看门狗工作原理
硬件看门狗是什么?
硬件看门狗(Hardware Watchdog)是一种用于监控系统运行状态的硬件设备或电路。它的主要功能是检测系统是否正常运行,并在系统出现故障或无响应时自动重启或采取其他恢复措施。
工作原理与引脚
硬件看门狗一般外挂在主控芯片MCU上,看门狗内部有一个定时器,系统正常上电复位后该定时器会被重置;MCU在定时器设定的时间内给看门狗发送一个脉冲信号来进行“喂狗”,看门狗接收到喂狗信号后,将定时器重置开启新一轮计时;MCU发生异常无法完成“喂狗”操作直到看门狗定时器超时,看门狗会触发其故障处理操作,发送信号将MCU进行复位;如下:
-
根据上面的原理,我们来想一下一个最简单的看门狗芯片有哪些引脚:
供电引脚VCC和接地引脚GND;
使能引脚EN;
喂狗引脚即MCU时钟脉冲输入引脚CLK;
复位信号输出引脚RST; -
以上就是最简单的看门狗所需的引脚,大部分看门狗还有以下几个引脚:
看门狗定时器时间以及看门狗复位延迟时间设置引脚CTW;
(定时器时间:即喂狗时间阈值可以通过在此引脚上外接电容来进行设置;)
(复位延迟时间:看门狗触发复位输出时输出多长时间的脉冲时间;)
(二者都可以通过在此引脚上外接电容来进行设置;)
上电复位时间设置引脚CT;
(上电复位时间:系统上电时看门狗复位输出脉冲持续的时间;)
设计这两个引脚主要是考虑到以下两点原因:
- 不同的MCU内部时钟不同,有些功能简单的MCU内部时钟可能很小只有KHz级别,有些功能复杂的MCU内部时钟在MHz级别,看门狗定时器时间需要根据不同的MCU进行配置;
- 不同MCU对于RST复位的脉冲时间有不同的要求,看门狗复位时间需要根据不同MCU进行配置;
- 不同MCU对上电时序有一定要求,看门狗上电复位时间需要根据不同MCU进行配置;
看门狗工作时主要引脚电压
上图是看门狗上电后,使能引脚EN(高有效)一直拉高,当时钟输入引脚CLK一直没收到喂狗信号时,各个引脚的电压变化,由上图知道:
- 上电后,当VDD电压值达到看门狗最小工作电压V_{DET},看门狗开始上电复位,CT引脚电压开始充电直到CT引脚的电压升高到该引脚阈值V_{CTTH},这段时间为看门狗的上电复位时间tD;
- 上电复位完成后,CTW引脚电压开始充电,直到CTW引脚的电压升高到该引脚高边阈值V_{CTWH},这期间看门狗CLK引脚没有接收到来自MCU的喂狗信号,看门狗触发复位操作,将引脚RST(低有效)拉低;
- 引脚RST拉低后,CTW电压开始降低,直到CTW引脚的电压升高到该引脚低边阈值V_{CTWL},这段时间为RST持续输出复位低电平信号给MCU,这段时间为看门狗的复位时间tWL;
- 复位完成后,看门狗开始重新计时,RST引脚恢复为高电平,CTW引脚电压开始充电,直到CTW引脚的电压升高到该引脚高边阈值V_{CTWH},这段时间为看门狗的喂狗时间阈值tWH;
相关时间设置与计算
以罗姆的BD87B29FVM看门狗为例,手册中提供了根据外接电容来计算喂狗时间阈值(定时器时间),复位时间以及上电复位时间的方法,如下:
其中tD为上电复位时间,tWH为喂狗时间阈值(定时器时间),tWH为复位时间;
详细计算过程如下:
-
喂狗时间阈值由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=ICTWC∣VCTWH−VCTWL∣×CCTW=0.3uA∣0.9V−0.3V∣×CCTW=2×CCTW×10−6
V_{CTWH}为CTW引脚高边阈值,单位为V;V_{CTWL}为CWT引脚低边阈值,单位为V; I_{CTW_C}为CWT充电电流,单位为A;三者均可以在datasheet中找到对应值;
C_{CTW} 为CTW引脚外接电容容值,单位为F;
计算除了的tWH为喂狗时间阈值,单位为S,与datasheet中给出的计算公式一致; -
复位时间也由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=ICTWD∣VCTWH−VCTWL∣×CCTW=0.9uA∣0.9V−0.3V∣×CCTW≈0.67×CCTW×10−6
V_{CTWH}为CWT引脚高边阈值,单位为V;V_{CTWL}为CWT引脚低边阈值,单位为V; I_{CTW_D}为CWT放电电流,单位为A;三者均可以在datasheet中找到对应值;
C_{CTW} 为CTW引脚外接电容容值,单位为F;
计算除了的tWL为复位时间,单位为S,与datasheet中给出的计算公式一致; -
上电复位时间由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×CCT≈0.69×CCT×10−6
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
注意事项
- 对于这个看门狗来说,喂狗时间阈值由硬件C_{CTW}电容大小来确定,而真正的喂狗周期由软件来设置:软件设置的喂狗周期不能太长,如果喂狗周期很接近喂狗时间阈值,则系统可能会由于电容精度等误差发生异常复位的情况;软件设置的喂狗周期不能太短,喂狗周期太短会导致系统功耗增大,尤其是在休眠情况下,喂狗太频繁会导致休眠电流偏大;
因此,通常软件喂狗时间设置为喂狗时间阈值的一半比较合适; - MCU对RST信号在上电时刻和持续时长有一定要求:一般来说MCU要保证上电一段时间后,才允许RST引脚拉高;复位MCU时也会需要RST信号持续一定时间才能正确复位MCU;
因此,要先明确MCU的需求,再通过看门狗上电复位时间和复位时间公式来计算出CT与CTW引脚外接电容的容值;