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

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

📊 看门狗分类总览

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

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

相关推荐
坤坤子吖3 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
无敌贵点大王4 小时前
从寄存器层面重学STM32(7)——定时器
stm32·单片机·嵌入式硬件
蒸蒸yyyyzwd5 小时前
后端相关学习笔记。
笔记·学习
旖旎夜光6 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习
Oll Correct7 小时前
Adobe illustrator 案例十二:视频播放(Media & Video)图标绘制
笔记·ui·adobe·illustrator
叼烟扛炮8 小时前
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
linux·服务器·网络·笔记·学习
旖旎夜光9 小时前
【C++ 基础入门】C++ 继承(上):概念、切片、隐藏、默认成员函数与友元
c++·笔记·学习
叼烟扛炮9 小时前
[LangChain] 学习笔记(05):提示词模板(Prompt)与少样本注入(Few-Shot)实战
linux·人工智能·笔记·学习·langchain·prompt
wuyk55518 小时前
Keil工具链-第05讲-启动文件与__main到底做了什么
c语言·stm32·单片机·嵌入式硬件·物联网
La Pulga1 天前
【FreeRTOS源码学习笔记】任务延时列表
笔记·mcu·学习·嵌入式·freertos·实时操作系统