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

发布时间 2023-11-30 10:25:51作者: abaelhe

MCU看门狗使用注意事项
目录

前言
(一)看门狗分类
(二)启动看门狗
(1)通过接口设置
(2)通过寄存器直接设置
(3)通过选项字节配置
(三)休眠唤醒喂狗
(1)常规方式
(2)异常情况
(3)补救方案
结尾

类比于 Heartbeat/心跳 检测多用在软件及服务领域,
WatchDog/看门狗 多用在硬件与系统领域(硬件看门狗),
也有用在软件与应用及服务领域的(软件看门狗)。

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

  • 监控部分: 有规律性的心跳检测,
  • 响应部分: 硬件/系统或进程/服务/应用/任务 的心跳响应,
  • 异常处理部分: 看门狗/心跳 检测异常时触发的机制与行为,
    例如触发硬件中断或系统软件中断,硬重启(冷启动)与软重启(热启动)。

回到顶部
前言
最近因为项目产品硬件设计有问题,导致设计的一款产品把硬件电源开关以及硬件系统复位功能去掉了。
更严重的是,这产品已经开始生产了,硬件已经无法修改,
所以软件必须上看门狗,否则设备死机或是异常后就只能拆设备拔电池复位了。

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

在看门狗初始化之前系统异常了会怎样?软件独立看门狗与硬件独立看门狗它们有什么区别?
如果异常不可避免,有没一个地方可以缓存设备状态,系统异常复位后状态不被清除。

选项字节里开启硬件看门狗与软件代码开启有什么区别?
看门狗是在中断过程喂狗还是在主程序中喂狗比较好?
​看门狗初始化可以放到时钟初始化之前么?如果时钟死掉了,看门狗还能正常工作么?
低功耗深度休眠后还需要喂狗么?如果需要,要怎么设计?使用什么唤醒设备喂狗?

回到顶部
(一)看门狗分类
看门狗的分类,根据实现方式的不同,可以分为软件看门狗和硬件看门狗:

软件看门狗:通过软件实现的一种机制,通常由系统中的软件来设置和管理
硬件看门狗: 嵌入在处理器或芯片中的专用硬件模块
根据使用方式的不同,又可以区分为独立看门狗和窗口看门狗

独立看门狗: 独立看门狗通常用于监控整个系统的运行状态,而不特定于某个任务或进程,当系统故障,死锁,无响应的时候,应用程序无法进行正常喂狗,看门狗超时从而产生复位。

窗口看门狗: 窗口看门狗更专注于监控特定任务或进程的运行状态,并在特定的时间窗口内完成。比如在某个任务中,它的执行时间要求非常高,可以使用窗口看门狗,它有一个时间窗口,如果太早喂狗和太晚喂狗,都会产生异常,正因为它喂狗时间有个时间窗口,所以才叫窗口看门狗。

我使用的普冉PY32F030系列MCU,它是32位Cortex-M0+的内核,里面带有一个独立看门狗IWDG和一个窗口看门狗WWDG。

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

回到顶部
(二)启动看门狗
看门狗的启动有多种方式:

通过接口设置启动
直接设置寄存器启动
设置选项字节启动