AUTOSAR WatchdogDriver模块详解
目录
- 1. 模块概述
- 2. 架构位置
- 3. 主要功能
- 4. API接口
- 5. 配置参数
- 6. 错误代码
- 7. 状态管理
- 8. 处理流程
- 9. 操作序列
- 10. 硬件抽象
- 11. 安全考虑
- 12. 与其他模块的关系
1. 模块概述
WatchdogDriver (Wdg) 是AUTOSAR标准中的一个MCAL层模块,负责管理和控制微控制器的看门狗硬件。看门狗是一种安全机制,用于在软件异常时重置系统,确保系统能够从故障状态恢复。
2. 架构位置
- 层级:MCAL (微控制器抽象层)
- 上层接口:通过WdgIf (看门狗接口) 与上层模块通信
- 主要调用者:WdgM (看门狗管理器)
- 依赖模块:Det (开发错误跟踪),Dem (诊断事件管理器)
2.1. 组件架构
WatchdogDriver在AUTOSAR架构中的位置及其与其他模块的关系如下图所示:
从上图可以看出,WatchdogDriver模块位于MCAL层,通过WdgIf与上层的WdgM模块进行交互。该模块主要包含以下组件关系:
上层关系:
- 应用软件组件通过WdgM调用看门狗功能
- WdgM通过WdgIf调用WatchdogDriver的API
同层关系:
- 与Det模块交互,用于报告开发错误
- 与Dem模块交互,用于报告诊断事件
下层关系:
- 内部看门狗驱动直接访问微控制器内部的看门狗硬件
- 外部看门狗驱动通过SPI或DIO接口访问外部看门狗芯片
3. 主要功能
WatchdogDriver模块提供以下主要功能:
初始化看门狗硬件:
- 配置默认模式和超时设置
- 设置初始触发条件
模式管理:
- 支持多种运行模式:快速模式、慢速模式、关闭模式
- 根据模式切换看门狗的超时周期和刷新频率
触发条件设置:
- 设置看门狗的超时周期
- 处理看门狗的触发机制
错误处理:
- 检测和报告开发错误
- 处理看门狗相关的诊断事件
4. API接口
WatchdogDriver模块提供以下API接口:
Wdg_Init(const Wdg_ConfigType* ConfigPtr)
- 功能:初始化看门狗模块和硬件
- 参数:配置数据指针
- 返回:无
Wdg_SetMode(WdgIf_ModeType Mode)
- 功能:切换看门狗模式
- 参数:目标模式
- 返回:
E_OK
(成功) 或E_NOT_OK
(失败)
Wdg_SetTriggerCondition(uint16 Timeout)
- 功能:设置看门狗触发条件
- 参数:超时值
- 返回:无
Wdg_GetVersionInfo(Std_VersionInfoType* VersionInfo)
- 功能:获取模块版本信息
- 参数:版本信息结构体指针
- 返回:无
5. 配置参数
WatchdogDriver模块的主要配置参数包括:
通用配置:
WdgDevErrorDetect
:开启/关闭开发错误检测WdgDisableAllowed
:是否允许运行时禁用看门狗WdgIndex
:模块实例IDWdgInitialTimeout
:初始化时的超时设置WdgMaxTimeout
:最大允许的超时设置WdgVersionInfoApi
:是否启用版本信息APIWdgRunArea
:执行区域(RAM/ROM)
模式配置:
WdgDefaultMode
:默认模式设置WdgSettingsFast
:快速模式配置WdgSettingsSlow
:慢速模式配置WdgSettingsOff
:关闭模式配置
外部看门狗配置:
WdgExternalConfiguration
:外部看门狗硬件配置WdgExternalContainerRef
:外部接口引用(SPI/DIO)
5.1. 配置模型
WatchdogDriver的配置模型如下图所示:
配置模型主要包含以下几个部分:
Wdg:
- 顶层配置容器,包含所有看门狗驱动的配置参数
- 包含WdgGeneral、WdgPublishedInformation、WdgSettingsConfig和WdgDemEventParameterRefs子容器
WdgGeneral:
- 包含通用配置参数,如错误检测开关、禁用允许标志等
- 定义了看门狗的基本行为和特性
WdgSettingsConfig:
- 包含不同模式的配置参数
- 定义了快速模式、慢速模式和关闭模式的具体设置
- 可能包含外部看门狗的配置引用
WdgDemEventParameterRefs:
- 包含诊断事件的引用配置
- 定义了看门狗相关的诊断事件处理方式
6. 错误代码
WatchdogDriver模块定义了以下错误代码:
开发错误:
WDG_E_DRIVER_STATE
(0x10):驱动状态错误WDG_E_PARAM_MODE
(0x11):模式参数错误WDG_E_PARAM_CONFIG
(0x12):配置参数错误WDG_E_PARAM_TIMEOUT
(0x13):超时参数错误WDG_E_PARAM_POINTER
(0x14):指针参数错误WDG_E_INIT_FAILED
(0x15):初始化失败
诊断事件:
WDG_E_DISABLE_REJECTED
:禁用看门狗被拒绝WDG_E_MODE_FAILED
:模式切换失败
7. 状态管理
WatchdogDriver模块维护以下状态:
模块状态:
- 未初始化:模块尚未初始化
- 已初始化:模块已初始化并可操作
运行状态:
WDG_IDLE
:空闲状态,可接受新请求WDG_BUSY
:忙状态,正在处理模式切换
模式状态:
- 快速模式:较短的超时周期,较高的刷新频率
- 慢速模式:较长的超时周期,较低的刷新频率
- 关闭模式:看门狗功能禁用(仅当允许时)
7.1. 状态机
WatchdogDriver的状态转换如下图所示:
状态机主要包含以下几个部分:
初始化状态转换:
- 系统上电后,模块处于未初始化状态
- 调用
Wdg_Init()
成功后,模块进入已初始化状态 - 如果初始化失败,模块保持在未初始化状态
运行状态转换:
- 在已初始化状态下,模块默认处于
WDG_IDLE
状态 - 调用
Wdg_SetMode()
时,模块进入WDG_BUSY
状态 - 模式切换完成后,模块返回
WDG_IDLE
状态
- 在已初始化状态下,模块默认处于
模式状态转换:
- 模块可以在快速模式、慢速模式和关闭模式之间切换
- 只有当
WdgDisableAllowed
为TRUE
时,才能切换到关闭模式 - 模式切换通过
Wdg_SetMode()
函数实现
8. 处理流程
8.1. 活动流程
WatchdogDriver的主要处理流程如下图所示:
活动流程主要包含以下几个部分:
Wdg_Init
流程:- 接收配置指针并进行参数检查
- 如果开发错误检测开启且配置指针为
NULL
,报告错误并退出 - 设置默认模式,如果默认模式为
OFF
且禁用不允许,报告错误并返回E_NOT_OK
- 初始化看门狗硬件,设置模块状态为已初始化,返回
E_OK
Wdg_SetMode
流程:- 接收模式参数并进行参数检查
- 如果开发错误检测开启,检查模块状态和模式参数的有效性
- 如果模式为
OFF
且禁用不允许,报告错误并返回E_NOT_OK
- 设置模块状态为
WDG_BUSY
,根据模式参数设置看门狗硬件 - 设置模块状态为
WDG_IDLE
,返回E_OK
Wdg_SetTriggerCondition
流程:- 接收超时参数并进行参数检查
- 如果开发错误检测开启,检查模块状态和超时参数的有效性
- 计算触发条件,如果触发计数器为0,不执行任何操作
- 否则,更新激活码并触发看门狗硬件
9. 操作序列
9.1. 典型操作序列
WatchdogDriver的典型操作序列如下图所示:
操作序列主要包含以下几个部分:
看门狗初始化序列:
- WdgM调用
WdgIf_Init()
,WdgIf调用Wdg_Init()
- Wdg检查配置指针,如果为
NULL
且开发错误检测开启,报告错误 - Wdg设置默认模式,如果默认模式为
OFF
且禁用不允许,报告错误并返回E_NOT_OK
- 否则,初始化看门狗硬件并返回
E_OK
- WdgM调用
看门狗模式切换序列:
- WdgM调用
WdgIf_SetMode()
,WdgIf调用Wdg_SetMode()
- Wdg检查模式参数,如果无效且开发错误检测开启,报告错误
- 如果模式为
OFF
且禁用不允许,报告错误并返回E_NOT_OK
- 否则,设置看门狗硬件模式并返回
E_OK
- WdgM调用
触发条件设置序列:
- WdgM调用
WdgIf_SetTriggerCondition()
,WdgIf调用Wdg_SetTriggerCondition()
- Wdg检查超时参数,如果超出范围且开发错误检测开启,报告错误
- Wdg设置看门狗硬件的触发条件
- WdgM调用
10. 硬件抽象
WatchdogDriver模块支持两种类型的看门狗硬件:
内部看门狗:
- 直接访问微控制器内部的看门狗硬件
- 通常通过寄存器操作实现
外部看门狗:
- 通过SPI或DIO接口访问外部看门狗芯片
- 需要额外的驱动支持
11. 安全考虑
WatchdogDriver模块包含以下安全机制:
禁用保护:
- 通过
WdgDisableAllowed
参数控制是否允许禁用看门狗 - 安全关键应用通常不允许禁用看门狗
- 通过
错误检测:
- 开发错误检测和报告
- 诊断事件管理和报告
状态检查:
- 在API调用前检查模块状态
- 防止在不适当的状态下执行操作
12. 与其他模块的关系
WatchdogDriver模块与以下模块有交互:
WdgIf (看门狗接口):
- 提供统一的接口给上层模块
- 支持多个看门狗实例的管理
WdgM (看门狗管理器):
- 使用WdgIf调用WatchdogDriver的功能
- 实现更高级的看门狗监控策略
Det (开发错误跟踪):
- 报告开发错误
- 用于调试和开发阶段
Dem (诊断事件管理器):
- 报告诊断事件
- 用于运行时监控和诊断