MCU/CPU/*PU的 WatchDog/看门狗 使用注意事项

类比于 Heartbeat/心跳 检测多用在软件及服务领域,

WatchDog/看门狗 多用在硬件与系统领域(硬件看门狗),

也有用在软件与应用及服务领域的(软件看门狗)。

“喂狗”即“心跳探活”, 系统分三部分:

  • 监控部分: 有规律性的心跳检测,
  • 响应部分: 硬件/系统或进程/服务/应用/任务 的心跳响应,
  • 异常处理部分: 看门狗/心跳 检测异常时触发的机制与行为,

    例如触发硬件中断或系统软件中断,硬重启(冷启动)与软重启(热启动)。

回到顶部

前言

最近因为项目产品硬件设计有问题,导致设计的一款产品把硬件电源开关以及硬件系统复位功能去掉了。

更严重的是,这产品已经开始生产了,硬件已经无法修改,

所以软件必须上看门狗,否则设备死机或是异常后就只能拆设备拔电池复位了。

关于看门狗在低功耗场景的应用,几个问题点可以提前思考:

在看门狗初始化之前系统异常了会怎样?软件独立看门狗与硬件独立看门狗它们有什么区别?

如果异常不可避免,有没一个地方可以缓存设备状态,系统异常复位后状态不被清除。

选项字节里开启硬件看门狗与软件代码开启有什么区别?

看门狗是在中断过程喂狗还是在主程序中喂狗比较好?

​看门狗初始化可以放到时钟初始化之前么?如果时钟死掉了,看门狗还能正常工作么?

低功耗深度休眠后还需要喂狗么?如果需要,要怎么设计?使用什么唤醒设备喂狗?

回到顶部

(一)看门狗分类

看门狗的分类,根据实现方式的不同,可以分为软件看门狗和硬件看门狗:

  • 软件看门狗:通过软件实现的一种机制,通常由系统中的软件来设置和管理
  • 硬件看门狗: 嵌入在处理器或芯片中的专用硬件模块

根据使用方式的不同,又可以区分为独立看门狗和窗口看门狗

  • 独立看门狗: 独立看门狗通常用于监控整个系统的运行状态,而不特定于某个任务或进程;

    当系统故障,死锁,无响应时,应用程序无法正常喂狗,看门狗超时从而产生复位。
  • 窗口看门狗: 窗口看门狗更专注于监控特定任务或进程的运行状态,并在特定的时间窗口内完成。

    比如在某个任务执行时间要求非常高,可以使用窗口看门狗,

    它有一个时间窗口,如果太早喂狗和太晚喂狗,都会产生异常,

    正因为它喂狗时间有个时间窗口,所以才叫窗口看门狗。

软件独立看门狗与硬件独立看门狗的区别:

软件独立看门狗通过软件初始化,可以通过关闭时钟以关闭。

如果在设备上电到初始化看门狗之前系统异常,看门狗是不生效的,这种情况多出现在软件初始化的时候异常。

硬件独立看门狗通过烧录器烧录的时候配置,或者是通过软件程序修改选项字节里面参数进行修改。

硬件独立看门狗一旦配置好,上电的时候开始生效并且无法关闭,除非重新修改配置项参数。

硬件独立看门狗开启之后,硬件时钟会自动开启并且无法关闭。

休眠唤醒喂狗

超低功耗设备的*PU处理器多是深度睡眠模式以达到省功耗的目的;此模式状态的看门狗还是在正常运行的。

即在深度休眠模式,还是需要有规律的唤醒设备进行喂狗。

我使用的硬件内核带有独立看门狗IWDG和窗口看门狗WDG。

其中,独立看门狗和窗口看门狗,还有软件和硬件的区别,主要差异是在看门狗的启动方式上不同。

下面我们的介绍,主要针对独立看门狗。

(二)启动看门狗

看门狗的启动有多种方式:

  • 通过接口设置启动
  • 直接设置寄存器启动
  • 设置Setting/Config Bits的Flags(选项字节启动)

设置Setting/Config Bits的Flags(选项字节启动)

MCU内部有一个小的flash,有个FLASH user option可以设置MCU的一些配置参数包括看门狗参数。

注意这些参数是可以通过烧录器在烧录的时候就把参数配置进去,即硬件级全局配置。

对于已经烧录的设备,可以通过写选项字节的方式把IWDG_SW置位或是重置。

直接设置寄存器启动

直接往Datasheet上公开的*WDG寄存器地址写入对应参数使能IWDG, 例:

void init_wtd(void)

{

volatileu int32_t *IWDG_KR_ADDR = (volatileuint32_t *)0x40003000UL;

volatileu int32_t *IWDG_PR_ADDR = (volatileuint32_t *)0x40003004UL;

volatileu int32_t *IWDG_RLR_ADDR = (volatileuint32_t *)0x40003008UL;

*IWDG_KR_ADDR = 0x5555;

*IWDG_PR_ADDR = 0x03;

*IWDG_RLR_ADDR = 0xF40;

}

实际IWDG是有四个寄存器,还有一个IWDG_PR,

如果不初始化时钟,看门狗不会启动的,即使设置完看门狗也是不会启动。

如果要使能时钟,可以添加时钟设置语句:SET_BIT(RCC->CSR, RCC_CSR_LSION);

直接设置寄存器有一个好处,就是在boot中, 因为对代码量要求比较高,可以比较精简的实现功能。

通过接口设置

可以直接参考官方sample进行初始化:

IWDG_HandleTypeDef IwdgHandle;

HAL_Init();

/##-3- Configure & Start the IWDG peripheral ########/

IwdgHandle.Instance = IWDG;

IwdgHandle.Init.Prescaler = IWDG_PRESCALER_32;//T=1MS

IwdgHandle.Init.Reload = (1000); //1ms1000=1s

IwdgHandle.Init.Window = IWDG_WINDOW_DISABLE;

if(HAL_IWDG_Init(&IwdgHandle) != HAL_OK)

{

/
Initialization Error */

Error_Handler();

}

需要特别注意,因为IWDG是依赖于LSI时钟的,在HAL_IWDG_Init 函数调用之前必须先打开LSI时钟。

以上官方给的sample,是在HAL_Init()中把LSI时钟打开的

MCU/CPU/*PU的 WatchDog/看门狗 使用注意事项的更多相关文章

  1. android -- WatchDog看门狗分析

    在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生 ...

  2. 服务器watchdog看门狗的理解

    1.什么是watchdog?watchdog,中文名称叫做“看门狗”,全称watchdog timer,从字面上我们可以知道其实它属于一种定时器.然而它与我们平常所接触的定时器在作用上又有所不同.普通 ...

  3. Resin 的watchdog(看门狗)介绍和resin负载均衡实现

    为了稳定和安全,Resin使用一个独立的watchdog进程来启动和监视Resin服务器.watchdog连续你检测Resin服务器的状态,如果其没有反应或者迟钝,将会重启Resin服务器进程.大多数 ...

  4. 基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读

    本文将介绍看门狗驱动的实现. 目标平台:TQ2440 CPU:s3c2440 内核版本:2.6.30 1. 看门狗概述 看门狗其实就是一个定时器,当该定时器溢出前必须对看门狗进行"喂狗“,如 ...

  5. 【分享】iTOP-iMX6UL开发板驱动看门狗 watchdog 以及 Linux-c 测试例程

    iTOP-iMX6UL开发板看门狗测试例程,iTOP-iMX6UL 开发板的看门狗驱动默认已经配置,可以直接使用测试例程. 版本 V1.1:1.格式修改:2.例程修改完善,其中增加喂狗代码.1 看门狗 ...

  6. 在多任务(RTOS)环境中使用看门狗

    最近在SEGGER的博客上看到一篇有关在实时操作系统使用看门狗的文章.从一个失败的太空项目出发,分析了看门狗的作用及使用,自我感觉很有启发,特此翻译此文并推荐给各位同仁.为了阅读方便,有些航天领域名词 ...

  7. tiny4412 裸机程序 三、关闭看门狗和调用C程序【转】

    本文转载自:http://blog.csdn.net/eshing/article/details/37112779 一.原理说明 上是章中大家可能有会觉得奇怪,CPU不是有看门狗嘛?为什么CPU没有 ...

  8. 【分析笔记】Linux gpio_wdt.c 看门狗设备驱动源码分析

    基本原理 该看门狗的设备驱动实现原理很简单,比较主要的有两点: 一.定时器喂狗 通过定时器根据配置文件配置的喂狗方式(如脉冲切换.电平切换),对指定的 gpio 进行脉冲切换或电平切换实现喂狗. 脉冲 ...

  9. 给NIOS II CPU增加看门狗定时器并使用

    给NIOS II CPU增加看门狗定时器并使用   配置看门狗定时器: 设置计时溢出时间为1秒 计数器位宽为32位 勾选No Start/Stop control bits 勾选Fixed perio ...

  10. 【小梅哥SOPC学习笔记】给NIOS II CPU增加看门狗定时器并使用

    给NIOS II CPU增加看门狗定时器并使用 配置看门狗定时器: 1. 设置计时溢出时间为1秒 2. 计数器位宽为32位 3. 勾选No Start/Stop control bits 4. 勾选F ...

随机推荐

  1. Windows 提权指南

    男儿若遂平生志,五经勤向窗前读. 导航 壹 - Se 特权 贰 - RunAs 叁 - 弱服务 肆 - Windows 内核 伍 - 密码搜寻 陆 - 杂项 AlwaysInstallElevated ...

  2. 用c#从头写一个AI agent,实现企业内部自然语言数据统计分析

    1.本文目的 不借助任何框架,使用c#写一个agent,实现调用阿里千问大模型完成预定任务.同时完成一个可扩展的agent框架雏形. 2.预期读者 本文假设读者已经了解了一些基本概念,例如AI,fun ...

  3. tomcat-shell脚本

    自动部署项目脚本参考: #!/bin/bash#自动部署脚本source /etc/profileexport LANG=zh_CN.UTF-8#tomcat路径tomcatBinPath=/usr/ ...

  4. Jeesite5:Star24k,Spring Boot 3.3+Vue3实战开源项目,架构深度拆解!让企业级项目开发效率提升300%的秘密武器

    企业级应用开发的需求日益增长.今天,我们要介绍的是一个在GitHub上广受好评的开源项目--Jeesite5.这不仅是一个技术框架,更是企业级应用开发的加速器.接下来,我们将深入探讨Jeesite5的 ...

  5. Java基础之“数组扩容”

    一.Java数组扩容的思路 正常逻辑:Java数组对象的大小是固定不变的,数组对象是不可扩容的. 尽然正常的不行,我们就在new他一次,利用数组复制方法可以变通的实现数组扩容. 逻辑:先弄出一个新的数 ...

  6. SQL 条件求和

    SUMIF 就是 Excel 中的 sumif () 函数的功能. 工作中用的频率极其高, 像我就几乎天天在用的呢. 也是做个简单的笔记而已. 为啥我总是喜欢对比 Excel 呢, 因为我也渐渐发现, ...

  7. Excel 拼接为 SQL 并打包 exe

    关于 Excel 拼接 sql 这个操作, 我已经整过好几篇了, 当然在工作中也是蛮常用的, 今天主要是来写个终篇, 彻底结束它, 然后将代码进行打包为 exe 这样的桌面小软件, 除了自己用, 也可 ...

  8. 私人问卷收集系统-Surveyking问卷收集系统

    前言 但凡提及问卷收集系统,问卷星与腾讯问卷通常都为大家首选问卷调查系统. 担心数据安全,海量问卷管理不便,工作流创建困难?快速部署自有问卷调查系统开始你的问卷调查之旅. 无论是问卷调查,考试系统,公 ...

  9. Spring扩展接口-内置事件ContextEvent

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  10. Lecture2 Linear methods for regression, Optimization

    书接上回,KNN模型有两个好处,一个是它很简单,另一个就是它既可以用来做回归,又可以用来做分类.但是坏处也很明显,就是它太粗暴了,基本上不怎么学习,只是对数据做一个简单的存储,等有了新的数据(测试数据 ...