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

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

📊 看门狗分类总览

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

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

相关推荐
KhalilRuan21 小时前
数据结构与算法-笔记
笔记
v先v关v住v获v取21 小时前
12米折叠式高空作业车工作臂设计9张cad+三维图+设计说明书
科技·单片机·51单片机
单片机系统设计1 天前
基于STM32的水质检测系统
网络·stm32·单片机·嵌入式硬件·毕业设计·水质检测
KhalilRuan1 天前
秋招笔记汇总
笔记
唔好理总之好犀利1 天前
FreeRTOS中断内使用taskENTER_CRITICAL()进入临界区
单片机·嵌入式硬件
csg11071 天前
PIC单片机入门实战(一):PIC16F1824/PIC12F1822,从振荡器与Timer1开始
单片机·嵌入式硬件·物联网
清风6666661 天前
基于单片机的车辆超载报警系统设计及人数检测设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
QQ_21932764551 天前
基于单片机的自动售货机系统设计
单片机·嵌入式硬件
laplace01231 天前
Part3 RAG文档切分
笔记·python·中间件·langchain·rag