AUTOSAR MCAL WDG(WatchdogDriver)模块学习 📅 2026/7/17 21:26:55 目录1. 模块定位与作用2. WDG模块的一些标准规范2.1 错误类型2.2 API规范2.3 模块的核心优点2.4 时序图2.5 配置参数1. 模块定位与作用WDG属于微控制器驱动与GPT、MCU等模块并列。向上对接WdgIf 看门狗接口层供 WdgM看门狗管理模块功能安全调用直接操作芯片内置硬件看门狗外设WDOG。核心功能监控软件运行状态防止程序死循环、跑飞、中断卡死支持硬件喂狗定时自动喂狗超时未喂触发 MCU 系统复位支持窗口看门狗在窗口外喂狗也算喂狗失败提供fast/slow/off三种模式切换配合 GPT 定时器实现软件层超时动态配置适配功能安全 WdgM 需求。2. WDG模块的一些标准规范2.1 错误类型WDG模块标准需求提供了以下几种错误类型分为DETDevelopment Errors和DEMExtended Production Errors错误错误类型错误代码说明错误值Hex开发错误Development ErrorsWDG_E_DRIVER_STATE在错误的上下文中使用了API服务例如模块没有初始化0×10WDG_E_PARAM_MODE使用错误/不一致的参数调用API服务0×11WDG_E_PARAM_CONFIG使用错误/不一致的参数调用API服务0×12WDG_E_PARAM_TIMEOUT传递的超时值高于最大超时值0×13WDG_E_PARAM_POINTER使用错误的指针值调用API例如空指针0×14WDG_E_INIT_FAILED配置集选择无效0×15扩展生产错误Extended Production ErrorsWDG_E_MODE_FAILED设置看门狗模式失败NAWDG_E_DISABLE_REJECTED禁用看门狗模式失败NA2.2 API规范void Wdg_Init ( const Wdg_ConfigType* ConfigPtr ) //初始化模块。 Std_ReturnType Wdg_SetMode ( WdgIf_ModeType Mode ) //切换模式。 void Wdg_SetTriggerCondition ( uint16 timeout ) //设置触发条件此接口用来更新软件超时值。 void Wdg_GetVersionInfo ( Std_VersionInfoType* versioninfo ) //获取版本信息。2.3 模块的核心参考nxp的代码个人认为最重要的接口是Wdg_SetTriggerCondition接口。nxp的wdg模块其实是做了软件和硬件两套定时逻辑。硬件通过GPT中断实现喂狗。硬件的超时值由寄存器决定每次喂狗后重置。软件超时值是在每次喂狗后会减去一个GPT周期然后更新软件超时值。//Wdg_ChannelTrigger 硬件喂狗的核心 /* 判断剩余超时时间是否够下一次喂狗 */ if( Wdg_au32Timeout[Wdg_Instance] Wdg_au32GptPeriod[Wdg_Instance]) { SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_00(); /* 剩余时间不够喂狗则关闭GPT定时器 */ Gpt_StopTimer(Wdg_apConfigPtr[Wdg_Instance]-Wdg_TimerChannel); } else { /* 剩余时间够下一次喂狗减去一个GPT周期更新软件超时值 */ u32TempTimeout Wdg_au32Timeout[Wdg_Instance] - Wdg_au32GptPeriod[Wdg_Instance]; Wdg_au32Timeout[Wdg_Instance] u32TempTimeout; SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_00(); Wdg_Ipw_Service(Wdg_Instance); }//Wdg_SetTriggerCondition接口的核心代码 /* 这里也会判断剩余超时时间是否够喂狗还有传入超时值是否为0 */ if (((Gpt_ValueType)(uElapsedTime) Wdg_au32Timeout[Wdg_Instance]) || ((uint16)0 u16Timeout)) { /* 剩余超时时间不够喂狗则将软件超时值设置为0关闭GPT定时器 */ Wdg_au32Timeout[Wdg_Instance] (uint32)0; SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_05(); Gpt_StopTimer(Wdg_apConfigPtr[Wdg_Instance]-Wdg_TimerChannel); } else { /* 剩余超时时间够喂狗则依据传入超时值更新软件超时值 */ Wdg_au32Timeout[Wdg_Instance] (uint32)(u16Timeout * Wdg_apConfigPtr[Wdg_Instance]-Wdg_u32TriggerSourceClock) uElapsedTime; SchM_Exit_Wdg_WDG_EXCLUSIVE_AREA_05(); }使用的话需要在超时范围内周期性的调用Wdg_SetTriggerCondition接口来不断更新软件超时值保证硬件可以一直喂狗。优点个人认为这样设计的优点是在不同的任务可以设置不同的超时时间比如有些任务非常重要那么就可以设置短的超时时间来保证正常运行有些任务相对来说不是很重要那么就可以给个相对宽松的超时时间。2.4 时序图接口调用时序图喂狗的时序图2.5 配置参数WDG一共包括以下的标准参数针对不同芯片可能有所不同WdgSettingsConfig不同看门狗设置的配置项包括外部看门狗硬件的配置项。注意所有构建后的参数都是通过这个容器处理的。WdgDefaultModeWDG驱动初始化的默认模式。实现类型:WdgIf_ModeTypeWdgExternalConfiguration外部看门狗硬件配置项WdgExternalContainerRef引用任何一个如果硬件看门狗通过DlO引脚连接则使用DioChannelGroup容器SpiSequenceConfiguration容器如果通过SPI访问看门狗硬件WdgSettingsOff看门狗驱动程序的“关闭”模式的硬件相关设置。WdgSettingsSlow看门狗驱动程序的“慢”模式的硬件相关设置。WdgSettingsFast看门狗驱动程序的“快速”模式的硬件相关设置。WdgGeneral这里收集了看门狗驱动程序的所有通用参数。WdgDevErrorDetect打开或关闭开发错误检测和通知。True开启检测和通知功能。False关闭检测和通知功能。WdgDisableAllowed编译开关允许/禁止在运行时禁用看门狗驱动程序。True允许在运行时禁用看门狗驱动。False不允许在运行时禁用看门狗驱动。WdgIndex指定此模块实例的Instanceld。如果只有一个实例存在那么它的值应为0。WdgInitialTimeout在Init函数期间初始化触发条件的初始超时秒。它不能大于WdgMaxTimeout。WdgMaxTimeout看门狗触发条件Multiplicity可初始化的最大超时秒。WdgRunArea表示看门狗驱动程序的执行区域要么来自ROM(Flash)要么来自特定微控制器所需的RAM。WdgVersionInfoApi编译开关以启用/禁用版本信息apiWdgEcucPartitionRef将Wdg驱动程序映射到零个或一个ECUC分区以使该分区中的模块api可用。WdgDemEventParameterRefs用于引用DemEventParameter元素。在发生相应的错误时应使用APlDem_SetEventStatus调用。Eventld取自引用的DemEventParameter的DemEventld符号值。标准化错误在此容器中提供并且可以通过特定于供应商的错误引用进行扩展WDG_E_DISABLE_REJECTED引用DemEventParameter当错误“初始化或模式切换失败因为它会禁用看门狗”发生时该参数将被发出。WDG_E_MODE_FAILED引用DemEventParameter当发生错误“设置看门狗模式失败在初始化或模式切换期间”时将发出该参数。WdgPublishedInformation包含所有Wdg特定发布信息参数的容器WdgTriggerMode看门狗触发模式toggle/window/both