单片机基础知识:内狗外狗/软狗硬狗

在嵌入式系统中,看门狗用于监控系统运行状态。以下是简单整理:

📊 看门狗分类总览

类型 全称 位置 复位对象 特点
内狗 内部看门狗 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,保持外设状态

  • 局部复位:只复位故障模块

相关推荐
cao233311 小时前
关于 y0 y1 yn 变量名冲突说法的指正
笔记
2501_9226395819 小时前
率能半导体 SS6285L直流双向马达驱动芯片:18V/5A,覆盖电子锁、按摩仪、电动玩具、机器人四大应用场景
单片机·嵌入式硬件·硬件工程
~patience~20 小时前
WAV 逆向分析工具使用笔记
笔记
滴啦嘟啦哒20 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
xier_ran20 小时前
【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他
人工智能·笔记·学习
连山齐名20 小时前
ai应用开发的学习笔记
服务器·笔记·学习
乔旭伟20 小时前
中小厂生产管理系统选型笔记:驱动方式、主线链路与成本结构
笔记·需求分析·规格说明书
xier_ran20 小时前
【infra之路】AI 编译器学习笔记(十四):为什么要 tiling,以及矩阵计算单元的“固定“
人工智能·笔记·学习
铅笔小新z20 小时前
【stm32】输入捕获-超声波测距
stm32·单片机·嵌入式硬件
菩提树下的凡夫20 小时前
机器视觉LED光源控制器
单片机·嵌入式硬件