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

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

📊 看门狗分类总览

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

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

相关推荐
m0_7360348518 小时前
1.28笔记
前端·chrome·笔记
丝斯201118 小时前
AI学习笔记整理(63)——大模型对齐与强化学习
人工智能·笔记·学习
CQ_YM1 天前
ARM时钟与定时器
arm开发·单片机·嵌入式硬件·arm
xiebs_1 天前
0127TR
单片机·嵌入式硬件
奥特曼_ it1 天前
【数据分析+机器学习】基于机器学习的招聘数据分析可视化预测推荐系统(完整系统源码+数据库+开发笔记+详细部署教程)✅
笔记·数据挖掘·数据分析
四维碎片1 天前
QSettings + INI 笔记
笔记·qt·算法
zzcufo1 天前
多邻国第5阶段17-18学习笔记
笔记·学习
BlackWolfSky1 天前
鸿蒙中级课程笔记4—应用程序框架进阶1—Stage模型应用组成结构、UIAbility启动模式、启动应用内UIAbility
笔记·华为·harmonyos
中屹指纹浏览器1 天前
指纹浏览器性能优化实操——多实例并发与资源占用管控
经验分享·笔记
了一梨1 天前
SQLite3学习笔记5:INSERT(写)+ SELECT(读)数据(C API)
笔记·学习·sqlite