AUTOSAR WatchdogDriver模块详解
AUTOSAR MCAL层看门狗驱动模块详细解析
目录
- [1. 模块概述](#1. 模块概述)
- [2. 架构位置](#2. 架构位置)
- [2.1. 组件架构](#2.1. 组件架构)
- [3. 主要功能](#3. 主要功能)
- [4. API接口](#4. API接口)
- [5. 配置参数](#5. 配置参数)
- [5.1. 配置模型](#5.1. 配置模型)
- [6. 错误代码](#6. 错误代码)
- [7. 状态管理](#7. 状态管理)
- [7.1. 状态机](#7.1. 状态机)
- [8. 处理流程](#8. 处理流程)
- [8.1. 活动流程](#8.1. 活动流程)
- [9. 操作序列](#9. 操作序列)
- [9.1. 典型操作序列](#9.1. 典型操作序列)
- [10. 硬件抽象](#10. 硬件抽象)
- [11. 安全考虑](#11. 安全考虑)
- [12. 与其他模块的关系](#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 (诊断事件管理器):
- 报告诊断事件
- 用于运行时监控和诊断