2. 硬件看门狗 vs 软件看门狗:独立硬件看门狗芯片(如MAX706)与MCU内部看门狗模块的区别
看门狗这东西,说白了就是给系统请了个保安。但这个保安是外聘的,还是内部兼职的,差别可大了去了。
我做了十几年消防报警系统,见过太多因为看门狗选型翻车的案例。今天咱们就掰扯清楚,硬件看门狗和软件看门狗到底该怎么选。
2.1 先搞清楚:看门狗到底在防什么?
嵌入式系统跑着跑着,可能因为电源波动、电磁干扰、程序跑飞等原因死机。看门狗的作用就是:发现系统死了,然后强制重启。
你想想看,消防报警系统要是死机了,火警都报不出来,那后果多严重。所以看门狗不是可选项,是必选项。
核心区别一句话总结:
硬件看门狗是独立的芯片,不吃你家MCU的电源,不跑你家MCU的时钟。软件看门狗是MCU内部的一个外设模块,跟MCU共用一套资源。
2.2 硬件看门狗芯片(以MAX706为例)
MAX706这芯片我用了很多年,皮实耐造。它就是个独立的小芯片,专门干一件事:监视MCU有没有按时喂狗。
工作原理
MCU每隔一段时间(比如1秒)给MAX706的WDI引脚送一个脉冲。如果超过1.6秒没收到脉冲,MAX706就认为MCU挂了,立刻拉低RESET引脚,强制MCU复位。
// 喂狗代码示例(MCU端)
#define WDI_PIN PB0
void feed_watchdog(void) {
// 给WDI引脚一个低脉冲
GPIO_ResetBits(GPIOB, WDI_PIN);
delay_us(10);
GPIO_SetBits(GPIOB, WDI_PIN);
}
void main(void) {
while(1) {
// 主循环逻辑
do_something();
// 喂狗,告诉MAX706:我还活着
feed_watchdog();
}
}
硬件看门狗的优点
- 完全独立:MCU死透了,它还能正常工作。电源、时钟都是自己的。
- 抗干扰能力强:MCU被电磁干扰打死了,硬件看门狗不受影响。
- 超时时间精准:用RC振荡器或晶振,误差小,稳定。
- 还能干别的:很多硬件看门狗芯片还带电源监控功能,比如MAX706能检测电源掉电。
硬件看门狗的缺点
- 多占PCB面积:多一个芯片,多几个电阻电容。
- 成本增加:虽然不贵,但批量生产时每分钱都要算。
- 喂狗方式受限:只能用GPIO引脚喂,不能像软件看门狗那样灵活配置。
我的经验:
在消防报警主机的主控板上,我坚持用硬件看门狗。因为主控板一旦死机,整个系统就瘫痪了。多花几毛钱,买个安心。
2.3 MCU内部看门狗模块
现在大部分MCU都内置了看门狗,比如STM32的IWDG(独立看门狗)和WWDG(窗口看门狗)。
工作原理
内部看门狗本质上是一个计数器,MCU时钟驱动它不断递减。如果减到0还没被重新装载,就触发复位。
// STM32 IWDG 初始化示例
void IWDG_Init(void) {
// 使能写访问
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
// 设置预分频器:4分频,40kHz / 4 = 10kHz
IWDG_SetPrescaler(IWDG_Prescaler_4);
// 设置重装载值:10kHz / 1000 = 10ms,即10ms内必须喂狗
IWDG_SetReload(1000);
// 重装载计数器
IWDG_ReloadCounter();
// 使能IWDG
IWDG_Enable();
}
void main(void) {
IWDG_Init();
while(1) {
do_something();
// 喂狗
IWDG_ReloadCounter();
}
}
内部看门狗的优点
- 零成本:不用额外买芯片,不用额外占PCB面积。
- 配置灵活:超时时间、喂狗窗口都可以软件配置。
- 使用方便:写几行代码就搞定了,不用操心硬件连线。
内部看门狗的缺点
- 不够独立:MCU内部振荡器停了,看门狗也跟着停。
- 抗干扰能力弱:MCU被电磁干扰打死了,内部看门狗大概率也挂了。
- 精度一般:内部RC振荡器精度有限,超时时间可能有偏差。
我曾经踩过的坑:
有一款产品用了内部看门狗,在实验室跑得好好的。结果到现场,靠近大功率电机的地方,MCU频繁死机。查了三天才发现,电磁干扰把MCU内部振荡器打偏了,看门狗也跟着失效。后来换成硬件看门狗,问题解决。
2.4 选型依据:什么时候用哪个?
我个人习惯这样选:
| 应用场景 | 推荐方案 | 理由 |
|---|---|---|
| 消防报警主机主控板 | 硬件看门狗 | 可靠性要求极高,不能容忍任何死机风险 |
| 消防探测器节点 | 内部看门狗 | 成本敏感,节点数量多,死机影响范围小 |
| 工业现场控制 | 硬件看门狗 | 电磁环境恶劣,干扰大 |
| 消费类电子产品 | 内部看门狗 | 成本优先,死机了用户重启一下就行 |
| 安全关键系统 | 硬件看门狗 + 内部看门狗双保险 | 双重保障,一个挂了另一个顶上 |
我的建议:
如果你做的是消防报警系统,主控板一定要用硬件看门狗。探测器节点可以用内部看门狗,但要做好抗干扰设计。如果预算允许,主控板可以同时启用内部看门狗,形成双重保护。
2.5 避坑指南
我这些年总结的几个要点:
- 喂狗位置要选对:别在主循环开头喂狗,要在关键任务执行完后喂。否则程序卡在某个任务里,看门狗也发现不了。
- 超时时间要留余量:别卡得太死。比如任务最长执行100ms,超时时间设200ms比较合理。
- 硬件看门狗也要防干扰:喂狗信号线要短,最好加个滤波电容。
- 内部看门狗别忘了使能:我见过有人初始化了但没使能,程序跑飞了看门狗也不动。
一个小技巧:
调试阶段可以把看门狗关掉,方便调试。但量产前一定要打开,并且做充分的喂狗测试。
嗯,硬件看门狗和软件看门狗的区别,说白了就是:一个靠得住但贵,一个便宜但靠不住。选哪个,看你项目对可靠性的要求有多高。消防报警系统这种人命关天的东西,我建议你别省那几毛钱。