看门狗定时器(WatchDog Timer)在出现程序跑飞卡死的时候用来强制复位处理器或控制器。具体操作是:通常程序正常循环会在一定周期内进行“喂狗”,若程序执行一个错误代码或者程序卡死,将不能进行“喂狗”,WDT会将控制器进行复位。而且,WDT不能检测瞬态故障,只有在WDT计数器达到预定的时间间隔时才会产生复位。
WDT基本原理
WDT的核心是计数寄存器,时钟源连续递增计数器的值,计数器发生溢出时,WDT产生复位。为防止复位,需要周期性的将计数清零,俗称“喂狗”。
内部或外部WDT
现在好多MCU内置WDT,使用内部WDT最大优势就是节省成本体积,但缺点也比较明显容易受软件程序失效影响,稳定性不佳。使用外部WDT IC具有独立的时钟源,稳定性较高,但相应的也会增加一定成本。
在一些要求较高的场合下,建议使用外部WDT IC。
看门狗电路
本身看门狗电路比较简单,一个IO引脚用来喂狗,另一个IO引脚输出复位响应。详细的设计需要仔细查看DataSheet。
本文将介绍一下有些系统会涉及操作系统启动时间较长超出溢出周期的方案设计。
一些系统启动需要经历U-boot–kernel–文件系统–应用层,这种启动时间短则几十秒,多则甚至1分钟以上,只有系统启动正常后才能进行喂狗,如果这是外部WDT IC 一直得不到喂狗,就会一直产生喂狗,系统进入死锁状态。
下面介绍两种方法:
1. 模拟开关+普通WDT
使用一个单刀双掷模拟开关接到WDI引脚上,当启动时WDI通过模拟开关将接到悬空态,这种情况下,看门狗会禁止,内部计数器停止计数。当系统正常启动后,打开IO调整模拟开关,进行正常工作。
2. 使用长时间溢出周期的WDT
如下芯片启动会有51s延时,常规超时1.6s复位。如下示意: