为什么需要外部看门狗?
知圈 | 进“底盘社群”请加微yanzhi-6,备注底盘
为了保证软件运行的鲁棒性,常常在软件设计中,启用看门狗功能。什么是看门狗呢?答:简单说,看门狗就是一个定时器(Timer)。如果没有在规定的时间内触发(Trigger)预期动作,则认为软件运行异常,进而程序进入异常处理程序,eg:执行Reset动作。一般的异常处理是软件复位,为什么要软件复位呢?答:异常的出现,可能是某些极端工况或者偶发状况导致,如果一个复位动作可以及时将程序拉回正常,可有效避免车辆故障等危险事件。
1、看门狗分类
工程上,常常听到"外狗"、"内狗"的说法。如何理解呢?
-
外狗:外部看门狗,独立于uC,外部定时器。
- 内狗:内部看门狗,在uC内部的定时器。
工程中,一般来说,外狗置于电源管理芯片(SBC:System Basic Chip)的内部,而内狗置于主芯片(uC)中,关系示意如下:
对于外狗,一般又可以细分窗口看门狗(WWD:Window Watchdog)和功能看门狗(FWD:Functional Watchdog)。WWD的喂狗动作,一般可由IO、SPI触发,而FWD的喂狗动作,多数需要使用SPI触发。WWD和FWD相互独立,可单独使能,FWD一般用于功能安全监控。
(一)Autosar中的Watchdog
在Autosar的规范中,看门狗主要有三个作用:Alive Supervision、Deadline Supervision、Logical Supervision。
- Alive Supervision:监控周期性软件
- Deadline Supervision:监控非周期性软件
- Logical Supervision:监控软件逻辑
工程中,用得最多的监控功能是Alive Supervision。如果仅使用看门狗的Alive Supervision功能,意味着喂狗动作需要在监控的周期性Task中执行。如果Task被周期性地调度,意味着操作系统(OS:Operation System)的启动。如果软件架构按照Autosar开发,OS在被启动之前和关闭之后的代码出问题怎么办呢?
2、为什么需要外部看门狗
(一)软件启动阶段的监控盲区
如下是Autosar EcuM启动阶段的软件运行行为。如果软件只是开启了内狗,eg:仅使能Alive Supervision。需要等到OS启动以后,内狗功能才发挥作用。但是,在程序的初始阶段,OS启动之前,如果程序异常跑飞,内狗则无法起到监控作用,例如:如下红框内的程序无法监控。
对于启动阶段,程序运行异常,如何监控呢?答:使能外部看门狗。即:在软件初始化之初,使能外部看门狗,由于外部看门狗独立于uC,一旦使能,uC必须进行喂狗操作。如果程序在初始化过程中,由于异常而没有给外部看门狗喂狗,就会导致外狗超时,进而触发uC的异常处理(eg:Reset),以此确保程序初始化过程中的稳定性。
提示:工程中,一般采用中断的方式喂外狗。
(二)软件Shutdown阶段的监控盲区
当Os关闭以后,如果程序中还有一些手动代码(下图红框部分),如果在此期间程序运行异常,eg:程序进入while(1),使得ECU无法正常休眠。此时的内狗已经关闭,无法监控到此异常,怎么办呢?答:使能外狗。
因此,外狗很好得补充了内狗的监控盲区,即:外狗可以监控到程序的初始化及Shutdown阶段的运行状况。
3、看门狗的喂狗原理
(一)内狗喂狗原理
当内狗使能以后,如果程序运行异常,没有有效喂狗,内狗会触发SMU(Safety Management Unit)的Alarm,进行异常处理,eg:通知复位控制单元(RCU:Reset Control Unit)进行复位。
注意:外狗一旦被外部使能,一般不会关闭
请先 登录 后再发表评论~