目录
1. 术语解释
1.1 缩写表
缩写 | 描述 | 解释 |
---|---|---|
SC | Supervision Cycle | 监控周期 |
SE | Supervised Entity | 受监控实体 |
CP | Check Point | 程序检查点 |
Transition | - | CP至另一个CP的迁移路径 |
Graph | - | 由Transition组成的程序流,WdgM 会监控其中的 路径 |
2.前言
在功能安全中,看门狗是一个不可或缺的功能模块;那么,看门狗是什么呢?看门狗有几种?在什么情况下喂狗?看门狗喂狗方式分几种?喂狗的频率如何控制?
2.1 喂狗
在嵌入式程序中,看门狗是用来监测一旦发生错误就向芯片发出重启信号的电路,防止程序跑飞,也可以防止程序在线运行时出现死循环。AutoSar的看门狗功能中,喂狗即Trigger Watchdog,当触发看门狗后,计时counter会被刷新重新开始计算,通过判断喂狗的时机或间隔来判断程序是否在正常运行。
1.2 内狗/外狗
Wdg通常有两种:一种是芯片内部自带的片内看门狗,另一种是在芯片外部通过SPI这种接口连接的片外看门狗。
- 内狗:MCAL只负责常用的有MCU内部看门狗,片内看门狗的特点是Wdg模块是直接访问相关硬件寄存器。
- 外狗:片外看门狗属于板级设备抽象层负责,通常需要使用MCAL提供的其他模块(比如SPI,DIO,PWM等)来访问/控制外扩看门狗芯片。这种不能直接访问硬件寄存器。
由于其特殊性,该模块的代码除了可以在ROM里面运行外,也可能会在RAM里面运行。比如在Bootloader刷写Flash时,Wdg模块可能作为二进制文件里面的一部分在RAM上运行。
1.3 超时狗/窗口狗
按喂狗时机又能将看门狗分为超时狗(Timeout Wdg)和窗口狗(Window Wdg)。
1.3.1 超时狗
超时狗喂狗很简单,即采用Timeout模式计时,在Timeout时间内都可以喂狗,当检测到超过设定的Timeout时间仍未喂狗则会触发进一步安全保护措施。
1.3.2 窗口狗
窗口狗需要在某个特定的窗口周期在open window内才能喂狗,在窗口期外喂狗都无效,例如下图中在(0.72-1.2)*twD范围内喂狗有效。
相较而言,窗口狗的喂狗时机要求更加严格,安全等级也更高。
3.Wdg架构
在AutoSar架构中,作为功能安全中至关重要的一个功能,看门狗系统架构相对简单,如下图:
服务层有WdogM(Wdog Manager)模块,主要为软件状态机,通过软件策略来实现一些监测功能,对上可汇报当前错误状态,对下可调用抽象层接口进行一系列不同类型的复位操作。ECU抽象层则有WdogIf模块,主要将各种看门狗模块进行抽象化管理。MCAL层则就是各种类型看门狗的WdgDriver了。
4.相关模块
Module | 相关功能 | 备注 |
---|---|---|
BswM | 重启partition | 可以在启动阶段完成Wdgm_Init |
EcuM | 负责WdgM的初始化和去初始化 | 可以将Wdg_Init和Smu_Init放入启动阶段 |
Dem | 提供故障事件上报的功能 | - |
Rte | 获取SE的监督状态 | - |