【CP AUTOSAR】Watchdog Driver分析和使用


前言

本文介绍CP AUTOSAR 架构下的Wdg组件,基于S32K144芯片、NXP提供的MCAL包,使用EB Tresos工具进行配置的经验,不具体介绍芯片看门狗外设的功能。
Wdg组件实现MCU的内部看门狗驱动,提供给上层组件WdgIf,给予看门狗的开启、关闭、喂狗、喂狗时间设置功能。
Wdg组件位于Microcontroller Drivers层里。
在这里插入图片描述


一、原理解析

Wdg为了给上层组件WdgM实现功能安全功能,与常规的看门狗功能不同,使用了Gpt组件进行配合,喂狗行为发生在Gpt定时器中断里,用来自定义超时时间。
Wdg分为三种模式,OFF、SLOW、FAST,OFF下看门狗和定时器通道是关闭的,SLOW和FAST区别主要根据用户进行的配置,如时间配置、是否为窗口模式。
Wdg实际看门狗触发时间体现在SLOW和FAST模式下的配置参数里,在调用Wdg_Init和Wdg_SetMode时进行更新,平常不可修改,喂狗时间由定时器进行触发,如在FAST模式里实际的触发时间设置了100MS,调用Wdg_SetTriggerCondition接口后设置超时时间,如设置了110MS,那么Wdg组件将喂狗定时器时间设置为50MS(为实际触发时间的一半),在50MS触发后判断超时时间为110MS,大于喂狗时间,那么进行一次喂狗,并将超时时间变为60MS,下一次喂狗时间到发现还是大于50MS,再进行一次喂狗,将超时时间变为10MS,下一次再进时,发现大于超时时间便停止喂狗,直到看门狗触发进行了复位动作。
Wdg_Init和Wdg_SetTriggerCondition函数能更新超时时间,因此若想看门狗不触发,需一直调用Wdg_SetTriggerCondition来更新超时时间。

二、代码架构

在这里插入图片描述Wdg_Wdog.c实现内部寄存器的操作,Wdg_Channel.c实现WDG的基本功能,Wdg.c封装Wdg_Channel.c供给外部用户使用。
在这里插入图片描述Gpt组件里生成Wdg_Cbk_GptNotification0回调,用来给Wdg喂狗。
在这里插入图片描述Wdg_au32GptPeriod是定时器的喂狗时间,Wdg_au32Timeout是用户设置的Wdg超时时间,每次Gpt中断触发后,如果Wdg_au32Timeout大于Wdg_au32GptPeriod就进行喂狗操作然后Wdg_au32Timeout时间减少,除非用户调用Wdg_SetTriggerCondition更新Wdg_au32Timeout,如果Wdg_au32Timeout小于Wdg_au32GptPeriod就停止定时器然后狗溢出。

三、主要变量和类型描述

Wdg_Channel.c里的Wdg_au32GptPeriod用来记录定时器的时间,Wdg_au32Timeout用来记录当前超时时间,当Wdg_au32Timeout小于Wdg_au32GptPeriod时定时器停止和不喂狗,大于Wdg_au32GptPeriod时进行喂狗,并减去Wdg_au32GptPeriod时间,下一次再进行判断。

四、主要代码描述

供外部使用的接口为:
(一)、FUNC(void, WDG_CODE) Wdg_Init(P2CONST(Wdg_ConfigType, AUTOMATIC, WDG_APPL_CONST) pConfigPtr)
实现MCU内部看门狗的驱动初始化,根据入参pConfigPtr进行看门狗寄存器的配置,如模式设置、时间设置等,还有设置初始模式,初始超时时间。
(二)、FUNC(Std_ReturnType, WDG_CODE) Wdg_SetMode(WdgIf_ModeType Mode)
使看门狗进入OFF、SLOW、FAST模式。SLOW和FAST模式下看门狗才进行工作
(三)、FUNC(void, WDG_CODE) Wdg_SetTriggerCondition(uint16 u16Timeout)
更新看门狗超时时间,不是实际的触发时间,超时时间应该要比触发时间要大。

五、EBTresos配置

主要配置如下:
在这里插入图片描述
Wdg Initial Timeout为设置WDGDRV初始超时时间,一般要大于Wdg Timeout Period,在调用Wdg_Init后起作用。
Wdg MaxTimeout为设置最大超时时间限值,平时设的超时时间不能大于这个时间,不然上报错误。

在这里插入图片描述
Wdg Default Mode为设置初始模式,在调用Wdg_Init后起作用。

在这里插入图片描述
Wdg Clock Selection为时钟源,一般为MCU的内部低频时钟LPO128KHZ。
Wdg Timeout Period为看门狗的触发时间。
在这里插入图片描述Wdg_Cbk_GptNotification0需要在Gpt组件里添加。

六、使用范例

在调用Wdg_Init()后,需要不断调用Wdg_SetTriggerCondition()进行更新超时时间。

七、参考资料

https://www.autosar.org/fileadmin/standards/R22-11/CP/AUTOSAR_SRS_WatchdogDriver.pdf
https://www.autosar.org/fileadmin/standards/R22-11/CP/AUTOSAR_SWS_WatchdogDriver.pdf
https://www.autosar.org/fileadmin/standards/R23-11/CP/AUTOSAR_CP_EXP_LayeredSoftwareArchitecture.pdf


总结

占用定时器资源,只适合在AUTOSAR架构里使用。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
AUTOSAR汽车开放系统架构)是汽车电子领域中,一个面向服务的开放系统架构标准。其中的Watchdog是指看门狗,其功能是能够在一定时间内检测系统是否正常工作,如果在规定时间内系统没有有效的定时喂给看门狗,那么看门狗会强制系统进入复位状态,防止系统因为无限循环等问题而导致死机。 AUTOSAR Watchdog的实现原理主要分为以下几个步骤: 1.配置看门狗硬件:系统需要利用I/O端口与看门狗硬件进行连接,并进行各项参数配置。例如,在配置看门狗之前,需要设置看门狗的超时时间和复位触发状态等参数。 2.启动看门狗:当系统完成参数配置后,就可以启动看门狗。启动看门狗的目的是为了开始计时,检测系统是否正常运行。系统需要在规定时间内定期喂狗,喂狗就是向看门狗硬件发送一个特定的信号,告诉看门狗系统是正常的。如果系统不能及时喂狗,看门狗会判断系统出现异常,触发复位信号。 3.实现自动喂狗功能:AUTOSAR要求系统必须能够自动喂狗,这就需要使用定时器进行周期性的定时喂狗。在实现自动喂狗功能时,需要注意定时器的频率与看门狗的超时时间相匹配,确保在规定的时间内完成喂狗任务。 4.在系统异常时触发复位:当系统发生异常时,例如程序出现死循环、程序崩溃等问题,自动喂狗功能会失去作用,看门狗会在规定时间内检测到系统无法喂狗,这时看门狗会向处理器发送复位信号,使系统进入复位状态。这能够避免由于系统异常而导致的信息丢失和其他问题。 总之,AUTOSAR Watchdog的实现原理就是利用硬件看门狗与软件定时器协同工作,监控系统运行状态,一旦检测到异常情况,就会迅速执行复位操作,确保系统的稳定性和可靠性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值