【Autosar】MCAL - WDG(NXP - S32K14x)

MCAL - WDG(NXP - S32K14x)

MCAL - 汇总

配置工具:EB Tresos Studio
芯片类型:S32K146

1. 概述

看门狗是为了程序能够按照预期执行,不会出现死循环、程序跑飞等异常情况发生。在设置的规定时间内用户需要对看门狗进行喂狗操作,否则发生看门狗复位。看门狗有三种工作模式:Fast、Slow、Off。

1.1 看门狗工作原理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 硬件部分

如上图所示,看门狗模块中,将Counter Register寄存器与Timeout Value Register寄存器进行比较,当计数值>超时时间时,会控制CPU Reset。通过设置Refresh Sequence Write Control寄存器进行喂狗,喂狗后Counter Register会被清0。这里的喂狗操作由GPT(定时器)配合,GPT中断回调函数配置看门狗喂狗(用户无需关心),GPT的触发时间为超时时间的一半。由于设计关系,GPT的时钟频率需要与看门狗的时钟频率保持一致

  • 软件部分

由于看门狗的寄存器为16Bit,最大值为65535,假设时钟频率为8MHz,最大超时时间 = 65535 / 8000000 ≈ 0.008s,NXP为了放大超时时间,在RAM中设置了一个超时时间变量让用户去设置,对于用户来说,这个才是看门狗。

1.2 看门狗时钟源

在这里插入图片描述
WDG的时钟源可选择的有:LPO_CLKSOSC_CLKSIRC_CLK

1.3 软件超时时间介绍

在这里插入图片描述
关注点:

  1. Gpt超时时间(硬件喂狗)
  2. 软件周期喂狗时间(软件喂狗)
  3. 软件周期设置超时时间(这个超时时间是软件看门狗的超时时间

个人总结:公式:软件超时时间 >= n * (X/2) && n * (X/2) > 周期任务)

Wdg_ChannelTrigger函数中可以找到如下代码,每一次Gpt定时中断触发进行喂狗的时候,都会对软件超时时间进行操作,当剩余超时时间 < Gpt周期触发时间的时候停止定时器(停止喂狗),否则剩余超时间减去Gpt周期触发时间

if( Wdg_au32Timeout[Wdg_Instance] < Wdg_au32GptPeriod[Wdg_Instance])
{
    MCAL_FAULT_INJECTION_POINT(T_WDG_INJ_TG_0);
    SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_00();
    Gpt_StopTimer(Wdg_apConfigPtr[Wdg_Instance]->Wdg_TimerChannel);
}
else
{
    u32TempTimeout = Wdg_au32Timeout[Wdg_Instance] - Wdg_au32GptPeriod[Wdg_Instance];
    Wdg_au32Timeout[Wdg_Instance] = u32TempTimeout;
    SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_00();          
    Wdg_IPW_Trigger(Wdg_Instance);
}

Wdg_ChannelSetTriggerCondition函数中可以找到如下代码,当用户去设置超时时间的时候,系统会判断Gpt_Elapsed>剩余超时时间,则停止定时器(停止喂狗),当下一次看门狗超时了就会发生复位。

/** @violates @ref Wdg_c_REF_7 MISRA 2004 Required Rule 10.1, The value of expression of integer type shall not be implicilty */
uElapsedTime =  Gpt_GetTimeElapsed(Wdg_apConfigPtr[Wdg_Instance]->Wdg_TimerChannel);
if (((uint16)(uElapsedTime) > Wdg_au32Timeout[Wdg_Instance]) || ((uint16)0 == u16Timeout))
{
    Wdg_au32Timeout[Wdg_Instance] = (uint32)0;
    SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_03();
    Gpt_StopTimer(Wdg_apConfigPtr[Wdg_Instance]->Wdg_TimerChannel);
}

看门狗超时后CPU发生复位,跳转至Reset_Handler:
在这里插入图片描述

2. API

函数描述
Wdg_Init看门狗初始化
Wdg_SetMode看门狗模式设置
Wdg_SetTriggerCondition看门狗超时时间设置(非寄存器值)

3. 配置介绍

3.1 General

在这里插入图片描述

Wdg Initial Timeout:初始超时时间

​在Wdg_ChannelInit函数中可以看到WDG_INITIAL_TIMEOUT_U16,在Wdg初始化的时候,超时时间的初始值为该值:

/**
* @brief  This variable will indicate the Wdg Initial Timeout parameter in miliseconds
*/
#define WDG_INITIAL_TIMEOUT_U16 ((uint16)1000)
Wdg_au32Timeout[Wdg_Instance] = (uint32)(WDG_INITIAL_TIMEOUT_U16 *(Wdg_apConfigPtr[Wdg_Instance]->Wdg_u32TriggerSourceClock));

Wdg Max Timeout:最大可设置的超时时间,用于合法性检查

从下面这段代码可以看到,设置超时时间的时候,会去与该值进行比较,若超出范围则报错:

/**
* @brief  This variable will indicate the Wdg Max Timeout parameter in miliseconds
*/
#define WDG_MAX_TIMEOUT_U16     ((uint16)65000)
LOCAL_INLINE FUNC(Std_ReturnType, WDG_CODE) Wdg_ValidateTimeout(VAR(uint16, AUTOMATIC)u16Timeout,
                                                                CONST(Wdg_IPW_InstanceType, WDG_CONST) Wdg_Instance
                                                               )
{
    VAR(Std_ReturnType, AUTOMATIC) valid = (Std_ReturnType)E_OK;

    if (u16Timeout > WDG_MAX_TIMEOUT_U16)
    {
        (void)Det_ReportError((uint16)WDG_CHANNEL_MODULE_ID, (uint8)Wdg_au8Index[Wdg_Instance],(uint8)WDG_SETTRIGGERCONDITION_ID,(uint8)WDG_E_PARAM_TIMEOUT);
        valid = (Std_ReturnType)E_NOT_OK;
    }
    return valid;
}

Wdg Reconfiguration Success Timeout:看门狗初始化超时时间

Wdg_Wdog_Init函数中可以看到WDG_RECONFIGURATION_TIMEOUT,对WDG配置后,检查是否配置成功,若配置失败则报告错误:

/** 
* @brief  This is a timeout value which is used to wait till WDG_CS[RCS] is reset to show that the WDOG is reconfigured
*/
#define WDG_RECONFIGURATION_TIMEOUT  (65535UL)
u32Timeout = (uint32)WDG_RECONFIGURATION_TIMEOUT;

/* @violates @ref Wdg_Wdog_c_REF_4 Violates MISRA 2004 Rule 11.1, Cast from unsigned long to pointer.*/
/* @violates @ref Wdg_Wdog_c_REF_6 Violates MISRA 2004 Rule 11.3, Cast from unsigned long to pointer.*/
REG_WRITE32(WDOG_CS_ADDR32(Wdg_Instance),(Wdog_pConfigPtr->Wdog_u32Config));

/* Check if reconfiguration was done in the timeout */
/* @violates @ref Wdg_Wdog_c_REF_4 Violates MISRA 2004 Rule 11.1, Cast from unsigned long to pointer.*/
/* @violates @ref Wdg_Wdog_c_REF_6 Violates MISRA 2004 Rule 11.3, Cast from unsigned long to pointer.*/
u32TempRec = REG_READ32(WDOG_CS_ADDR32(Wdg_Instance)) & WDOG_REC_SUCCESS_U32;
while ((u32Timeout > 0UL) && (u32TempRec != WDOG_REC_SUCCESS_U32))
{
    u32Timeout--;
    /* @violates @ref Wdg_Wdog_c_REF_4 Violates MISRA 2004 Rule 11.1, Cast from unsigned long to pointer.*/
    /* @violates @ref Wdg_Wdog_c_REF_6 Violates MISRA 2004 Rule 11.3, Cast from unsigned long to pointer.*/
    u32TempRec = REG_READ32(WDOG_CS_ADDR32(Wdg_Instance)) & WDOG_REC_SUCCESS_U32;
}

if (0UL == u32Timeout)
{
    #if (WDG_DISABLE_DEM_REPORT_ERROR_STATUS == STD_OFF)
    if((uint32)STD_ON == Wdg_E_Timeout_Expired.state)
    {

        Dem_ReportErrorStatus((Dem_EventIdType)Wdg_E_Timeout_Expired.id, DEM_EVENT_STATUS_FAILED);
    }
    #endif
}

3.4 WdgSettingsConfig

3.4.1 General

配置看门狗的默认模式

在这里插入图片描述

Wdg Default Mode:看门狗默认模式配置(Fast/Slow/Off)

Wdg External Trigger Counter:配置关联的Gpt(WDG控制GPT来实现启/停喂狗)

3.4.2 WdgSetting(Fast / Slow / Off)

不同模式下的Wdg配置

在这里插入图片描述

Wdg Clock Value:时钟频率值(选择完时钟参考点后,自动计算即可)

WdgClkSecRef:Wdg时钟参考点

Wdg Operation Mode:超时处理模式(Interrupt / ResetOnTimeOut)

Wdg Clock Selection:S时钟源选择

Wdg Timeout Period:定时周期(因为硬件最大计数为65536,所以0.008 * 8000000 = 64000已接近最大值)

在这里插入图片描述


参考资料:

S32K-RM.pdf - NXP

AUTOSAR_MCAL_WDG_UM[1].pdf - NXP

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AutoSARAutomotive Open System Architecture)是一种开放式的汽车电子系统架构标准,用于汽车电子控制单元(ECU)软件开发和架构。AutoSAR Update-Bits是AutoSAR架构中用于更新ECU软件的概念。 AutoSAR Update-Bits主要用于在现有的ECU中对软件进行更新和修改。它允许汽车制造商或ECU供应商通过向ECU发送更新数据包来提供新的功能、修复错误或改进现有的软件。这些更新数据包通过AutoSAR Update-Bits的通信机制传输到ECU,并被ECU上的更新管理模块接收和解析。 AutoSAR Update-Bits的更新过程包括以下步骤: 1. 更新数据包准备:汽车制造商或ECU供应商准备包含更新的数据包,并使用AutoSAR的标准规范对其进行打包和编码。 2. 更新数据包传输:更新数据包通过车辆网络,如CAN(Controller Area Network)或FlexRay,传输到目标ECU。 3. 更新管理模块接收:目标ECU上的更新管理模块接收并验证更新数据包的完整性和正确性。 4. 更新数据包解析:更新管理模块将更新数据包解析为可执行代码,并将其存储在ECU的闪存中。 5. 系统重启:ECU完成更新后,它可能需要进行系统重启以使更新生效。 通过使用AutoSAR Update-Bits,汽车制造商和ECU供应商可以在车辆的整个生命周期中对软件进行更新和改进,而无需更换整个ECU。这不仅提供了更灵活和可持续的软件开发和维护方式,还可以显著降低生产成本和减少故障修复时间。 总之,AutoSAR Update-Bits是AutoSAR架构中用于更新ECU软件的机制,它使汽车制造商和ECU供应商能够通过传输和解析更新数据包来增强车辆的功能和安全性,提高软件的可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值