在嵌入式系统中,看门狗用于监控系统运行状态。以下是简单整理:
📊 看门狗分类总览
| 类型 | 全称 | 位置 | 复位对象 | 特点 |
|---|---|---|---|---|
| 内狗 | 内部看门狗 | MCU芯片内部 | 仅复位MCU | 集成度高,成本低 |
| 外狗 | 外部看门狗 | MCU外部独立芯片 | 复位整个系统 | 可靠性高,独立性强 |
| 软狗 | 软件看门狗 | 软件实现 | 复位任务/进程 | 灵活性高,不涉及硬件 |
| 硬狗 | 硬件看门狗 | 硬件电路 | 复位硬件系统 | 可靠性最高,不可绕过 |
🔍 详细定义
1. 内狗(Internal Watchdog)
-
定义:集成在MCU/CPU内部的看门狗定时器
-
工作原理:
// 典型的内狗操作 WDT_Init(2.0); // 设置2秒超时 while(1) { WDT_Feed(); // 喂狗 // 主程序代码 } -
优点:
-
无需外部元件
-
成本低
-
易于配置
-
-
缺点:
-
可能被软件禁用或绕过
-
与MCU共用时钟,时钟失效时也失效
-
-
典型应用:消费电子、低成本设备
2. 外狗(External Watchdog)
-
定义:独立的看门狗芯片,通过I/O引脚连接MCU
-
硬件连接:
+------------+ +------------+ | MCU |-------| 外部看门狗 | | (GPIO) WDI |<----->| (RESET) | +------------+ +------------+ | | +---> 复位整个系统 <---+ -
优点:
-
完全独立,MCU死机仍有效
-
可复位整个系统(包括外设)
-
抗干扰能力强
-
-
缺点:
-
增加成本和PCB面积
-
需要额外引脚
-
-
典型芯片:MAX6369, TPS3823, CAT823
3. 软狗(Software Watchdog)
-
定义:纯软件实现的监控机制
-
实现方式:
// 多任务系统中的软狗示例 Task_Monitor() { while(1) { for(each task) { if(task_timeout) { task_restart(); // 重启该任务 } } delay(100ms); } } -
变种:
-
任务级看门狗:监控单个任务
-
数据流看门狗:监控数据通信
-
逻辑看门狗:监控业务逻辑状态
-
-
优点:
-
灵活,可定制监控逻辑
-
可局部复位,不影响整个系统
-
-
缺点:
-
依赖系统正常运行
-
可能被bug影响
-
4. 硬狗(Hardware Watchdog)
-
定义:基于硬件电路的看门狗,不可软件禁用
-
实现方式:
-
专用看门狗芯片(如外狗)
-
RC定时器电路:
MCU --[喂狗信号]--> 单稳态触发器 --[超时]--> 复位电路 (周期性脉冲) (RC决定时间) (强制复位)
-
-
特点:
-
即使程序跑飞也能正常工作
-
不依赖软件时钟
-
通常用于安全关键系统
-
🎯 组合应用场景
场景1:工业控制器(高可靠性)
外狗(独立芯片)
↓ (系统级监控)
内狗(MCU内置)
↓ (MCU级监控)
软狗(任务监控)
↓ (应用级监控)
三重保护机制
场景2:消费电子(成本敏感)
内狗(主监控)
↓
软狗(关键任务监控)
↓
两级保护,成本最低
场景3:汽车电子(功能安全)
硬狗(ASIL D级)
↓
外狗(独立监控)
↓
内狗(MCU内置)
↓
软狗(应用监控)
四重保护,符合ISO 26262
⚠️ 设计注意事项
喂狗策略
// 错误的喂狗方式(可能失效)
if(condition1) WDT_Feed();
if(condition2) WDT_Feed();
// 正确的喂狗方式(独立线程)
void Watchdog_Thread(void) {
while(1) {
WDT_Feed();
OS_Delay(500); // 500ms喂一次
}
}
超时时间设置
| 系统类型 | 推荐超时 | 理由 |
|---|---|---|
| 实时控制系统 | 10-100ms | 快速响应故障 |
| 通用嵌入式 | 1-2s | 平衡响应和误触发 |
| 低功耗设备 | 5-10s | 允许休眠唤醒周期 |
复位方式选择
-
冷复位:完全断电重启(最彻底)
-
热复位:只复位CPU,保持外设状态
-
局部复位:只复位故障模块