看门狗的原理与应用
看门狗基本原理
看门狗,英文简称为“Watchdog Timer ”或者“Watchdog”;
本质上就是一个定时器的作用,简单理解就是 MCU发出一个周期性的信号,这个信号是满足看门狗芯片内部计时器的时间限制,则看门狗芯片输出系统不会复位的电平,如果MCU给出的周期信号不满足看门狗芯片内部计时器的时间限制,则看门狗芯片输出使得系统复位的电平。
为什么需要看门狗
看门狗在系统中,最重要的功能就是确保系统芯片(SoC)设备或微控制器(处)操作正常。
假如因为软件或者其他的一些原因,SoC陷入了无限的循环,是花了太长时间来执行任务,或者甚至完全关闭。此时系统死机,软件异常,则系统功能失效。
如果有使用硬件看门狗电路, MCU异常了,没有正常发出喂狗信号,导致看门狗内部的计时器到达设定时间,还未收到信号,则此时看门狗输出的复位信号,给到MCU,使得MCU复位,MCU复位后继续执行代码,可以使得MCU或者系统从异常中(死循环)中恢复过来。
框图讲解
以TI的芯片为例,讲解看门狗简单实用电路。
1.红色箭头。GPIO是MCU的IO口,最好选择PWM输出,因为这样代码容易实现;WDI是看门狗信号的喂狗输入端。
2.绿色箭头。RESET是看门狗输出的复位信号,这个信号直接给到MCU的复位IO口。
3.MR是手动按键触发的复位端,一般设计不太常用,想用也可以。
内部框图
注意看,WDI信号输入进来之后,内部的计时器会对这个信号的时间进行计数,基于此来判断看门狗喂狗信号是否有效。
简单说: t(tout)— Watchdog time out;这个信号就是看门狗电路内部计时器的最长检测时间阈值。
WDI是MCU给的,从WDI发出的高电平上升沿开始,看门狗计时器计时,假设这个高电平时间是A。
判断逻辑:
- A> t(tout),则此时因为喂狗时间超时,看门狗生效,发出复位信号。
- A< t(tout),则此时因为喂狗时间未超时,看门狗不生效,不会发出复位信号。
当高电平时间到时,此时因为不超过看门狗时间,则WDI翻转电平变为低电平,此时看门狗内部计时器清零,从下降沿开始重新计数。
所以只要喂狗时间不超过这个t(tout),则系统不会复位。
看门狗复位时状态
请注意,假如系统MCU没有给出正确的喂狗信号。
则看门狗复位信号是周期性的,即就是先复位,再恢复正常电平;
如果正常状态下没有喂狗,会继续进入这个电平循环状态。
所以切记,看门狗如果没有喂狗,并不是持续的低电平复位状态。
看门狗芯片使用注意事项
1.看门狗芯片输出有些是OD(漏极开路)、有些是推挽输出,所以,一定要注意区分;
如果分不清楚,可以先预留一颗上拉电阻的位置;
2.看门狗供电电压一定要注意,虽然混用了,不一定坏,但是还是需要按照要求办事;
3.看门狗喂狗信号引脚也可以预留上下拉电阻;
实际事项:因为MCU在初始调试状态时,肯定没有喂狗,所以系统会周期性的复位,可能带来一些调试麻烦。
所以有些看门狗芯片内置了一些功能,就是输入是高阻状态(MCU引脚未初始化时,可能是高阻状态),则此时内部时钟自己产生喂狗信号,此时虽然MCU也没喂狗,但是看门狗芯片也不会复位。
当MCU代码调试OK后,正常状态下,要么WDI引脚是高或者低,如果喂狗周期超过了计时器设定时间,因为配置原因不再是高阻,则此时MCU依旧可以被正常复位。
而预留上下拉的原因就是,增加的上下拉电阻,不可能使得该引脚在高阻状态,就禁用这个模式。