1. 前言
本文为MCAL系列入门介绍,如您对AutosarMCAL配置,通信,诊断等实战有更高需求,可以参见AutoSar 实战进阶系列专栏,快速链接:AutoSar实战进阶系列导读
本文主要介绍WDG模块,在这里指的是内部看门狗,按Autosar架构外部看门狗属于板载器件,一般在SBC中,在这里不再赘述。
内部看门狗是MCU提供的功能安全组件,通过周期性的去刷新计数Counter值来检测程序运行状态,一旦出现长时间未执行喂狗操作则会判定程序跑飞,进而导致程序进Trap或者Reset。下面介绍中,将首先介绍内部看门狗的一些基本概念,再介绍WDG的一般工作过程。
2. 基本概念
2.1 喂狗
如果没学过嵌入式的同学看到喂狗可能会非常不解,为什么喂狗还需要再来解释一波,不就是“喂狗”吗?在嵌入式的WDG中,喂狗即Trigger Watchdog,即触发看门狗,当触发看门狗后,计时counter会被刷新重新开始计算,通过判断喂狗的时机或间隔来判断程序是否在正常运行。
2.2 超时狗与窗口狗
按运行模式WDG可划分为超时狗(Timeout Wdg)或窗口狗(Window Wdg)
超时狗:即采用Timeout模式计时,在Timeout时间内都可以喂狗,当检测到超过设定的Timeout时间仍未喂狗则会触发进一步安全保护措施。
窗口狗:即在某个特定的窗口周期内才能喂狗,在窗口期外喂狗都无效,例如下图中在(0.72-1.2)*Twd范围内喂狗有效。
整体而言,超时狗喂狗较为容易,即只要在timeout时间内喂上狗就可以,而窗口狗只能在open window阶段才可以喂狗,其对时机的要求更严格,相对而言,安全等级也更高。
2.2 Fast/Slow/Stop Mode
按是否喂狗及喂狗频率可将WDG的运行模式划分为Fast-Mode,Off-Mode,Slow-Mode:
Fast-Mode:快狗模式
在快狗模式下,喂狗频率通常更高,同样对发生Reset限制的Timeout时间也较慢狗模式更短,以更快的检测到程序跑飞复位
Off-Mode:禁用/关闭看门狗模式
在ECU ShutDown前需要关闭看门狗,以便关闭整个ECU,但在正常运行情况下,防止Wdg切换到此模式。
Slow-Mode:慢狗模式
与快狗模式对应,在慢狗模式下,喂狗的频率相对会慢一点,Timeout时间更长,例如在实际使用中,考虑到初始化到周期任务的时间较长,在Wdg初始化后会先设置WDG的运行模式为Slow-Mode,在周期任务正式运行后再切换为Fast-Mode。
3. WDG运行过程
如下图WDG的运行过程主要包括三部分:初始化、喂狗及设置看门狗模式。
在初始化中,一般由EcuM在DriveInitOne部分完成,初始化时会设置看门狗的初始喂狗模式,并开始喂狗。
看门狗喂狗,在AutoSar架构中,程序运行起来后Wdg喂狗前需要先在WdgM中校验喂狗条件是否满足,如果满足则WdgM再调用WdgIf_SetTriggerCondition()触发喂狗,具体可参考博主另外介绍WdgM部分的文章。
设置看门狗运行模式,运行模式的设置在内狗初始化中进行设置,等WdgM运行起来后同样可以调用WdgIf_SetMode()去设置模式。