参考链接:AUTOSAR软件架构 — MCAL Wdg模块解析(nxp为例)
1、注意点
在 autosar 规范中,系统必须能够实现自动喂狗,这就需要使用定时器来实现周期性的定时喂狗。
在实现自动喂狗功能时,需要注意定时器的频率与看门狗的超时时间相匹配,确保在规定的时间内完成喂狗任务。
2、软件看门狗和硬件看门狗区别
基于看门狗的实现逻辑,一般意义上我们可以将看门狗分为硬件看门狗与软件看门狗。
顾名思义,硬件看门狗就是通过硬件自身的机制来实现看门狗功能,其本质也是通过定时器原理来实现,只不过此时软件的角色仅仅是使能定时器,定时器自身的变化与更新由硬件自身完成;软件看门狗则是整个定时器的使能与更新完全由软件来做,当然软件也是通过定时器完成,只不过是间接方式。
硬件看门狗
如上所述,硬件看门狗依赖自身定时器来完成看门狗功能,俗称“硬狗”。常见的硬件看门狗比如MCU内部自带的看门狗,PMIC中内嵌的看门狗以及外部的独立看门狗等。
软件看门狗
软件看门狗如上所述,属于通过软件定时器的方式来实现看门狗功能,俗称“软狗”。软件看门狗的时间本质上也需要依赖硬件外设上的硬件定时器。
比如常见的我们会通过ostick的方式来进行记时功能,通过一个task运行软狗监控的定时器不断递减的主程序,其他task程序则是重置定时器,如果软件监控主程序某个task的定时器归零,那么此时可以便可以判断其他task并没有被正常的执行,此时便可以通过主动复位的方式来实现看门狗功能。
3、autosar规范中的看门狗
其实,针对上述软狗与硬狗相结合使用的应用场景,AUTOSAR架构也已经将其标准化考虑在整个Watchdog协议栈中来实现,因此在实际项目的开发过程中,大家可以通过以下的学习来进一步了解基于AUTOSAR的Watchdog协议栈工作原理与使用方法。
如下图3展示了AUTOSAR架构针对Watdog协议栈的软件层级拓扑关系图:
如上图3所示,在AUTOSAR架构下,Watchdog协议栈可以分为如下三个软件模块:
- Watchdog Driver:用于实现针对硬件看门狗的寄存器操作与控制,可以分为MCU内部看门狗(Internal Watchdog)与外部看门狗(External Watchdog),该外部看门狗可以通过GPIO或者IIC或者SPI来实现喂狗;
- Watchdog Interface:Watchdog If作为整个Watchdog Stack的一部分,其主要功能则是为了实现上层Watchdog Manager与底层Watchdog Driver的连接,当然其连接的底层Watchdog Driver可以存在多个,这在多核设计中较为常见。
- Watchdog Manager: Watchdog Manger模块作为整个看门狗协议栈中的服务层,Watchdog Manager的主体功能就是为了负责整个程序执行的正确性,并触发相应的硬件看门狗的喂狗动作,扮演了整个监控的核心角色。
通过上述AUTOSAR架构下的三个模块便可以实现整个AUTOSAR Watchdog Stack的功能,接下来小T将针对这三个模块进行详细讲解,保证我们都能够对这三个模块有个较为清晰的认识与理解,更好的运用到实战中。
3.1、理解Watchdog Driver模块
该模块提供了初始化硬件看门狗,改变操作模式,设置触发看门狗喂狗方式等功能。同时,可以按照该看门狗是否位于芯片内部,可以将位于芯片内部的看门狗称为内部看门狗,位于芯片外部的看门狗称为外部看门狗。
不论是内部看门狗还是外部看门狗,对于Watchdog Driver而言其使用的看门狗驱动的API应始终保持一致。只不过内部看门狗而言,其驱动属于MCAL层,而对于外部看门狗则属于ECU硬件抽象层,该外部看门狗驱动需调用MCAL中其他驱动来实现喂狗动作,如GPIO,IIC或者SPI等驱动。
3.1.1、内部看门狗
内部看门狗由于其涉及到芯片内部本身,如果芯片本身硬件存在问题,可能会导致内部看门狗自身失效,从而出现自身难保的困境,所以从某种程度来讲,对于关键安全系统,仅使用内部看门狗显得并不安全,此时还是需要依赖于外部看门狗来保证其功能安全。
3.1.2、外部看门狗
外部看门狗是位于被保护芯片外部的看门狗,该看门狗可以是独立硬件看门狗,即该类看门狗仅提供看门狗功能,但是一般都是QM等级,还有一类便是集成在PMIC内部的看门狗,该类看门狗一般都可以达到ASIL B或者ASIL D功能安全等级要求。
外部看门狗对于关键安全系统而言,一般都是必需的,从某种意义上来讲,内部看门狗其实可有可无,外部看门狗才至关重要。
3.2、看门狗控制模式
在AUTOSAR架构中,针对Watchdog Driver而言,定义了看门狗控制模式存在如下三种模式:
- Off Mode:表示看门狗关闭状态,对于关键安全系统,一般不能将其切换至Off状态,即一旦打开,将不能被关闭;
- Slow Mode:表示看门狗的一个长时间喂狗窗口,该模式一般用于系统启动初始化过程中;
- Fast Mode:表示看门狗的正常喂狗窗口喂狗模式,该模式运用在系统正常运行的过程中。
看门狗喂狗时序
如下图4所示为Watchdog初始化,触发看门狗喂狗以及改变看门狗模式的的三类函数调用场景。
- Watchdog初始化:通过EcuM模块调用函数Wdg_Init来完成Watchdog的初始化配置;
- 触发看门狗喂狗:通过WdgM模块调用WdgIf模块提供的函数WdgIf_SetTriggerCondition来触发底层驱动进行喂狗动作;
- 改变看门狗模式:通过WdgM模块调用WdgIf模块提供的函数WdgIf_SetMode来实现看门狗模式的改变。
3.3、Watchdog If模块功能描述
Watchdog If模块全称为Watchdog Interface接口,该接口作为底层Watchdog Driver的抽象,是为了实现底层硬件与软件之间的解耦。
该模块的基本功能仅仅作为底层驱动的抽象层来实现底层看门狗驱动与上层看门狗管理模块的交互,底层看门狗驱动的特性,如窗口控制,时间周期等设置都不能通过Watchdog If模块来完成。
如果超过一个看门狗驱动被上层Watchdog Manager进行管理,那么DeviceIndex将需要被检查,如果出现错误,需要及时上报。
参考链接:一文轻松理解AUTOSAR之Watchdog协议栈(上)