AUTOSAR_SWS_WatchdogDriver
Specification of Watchdog Driver
简介和功能概述
本文档指定了 AUTOSAR 基础软件模块看门狗驱动程序 (Wdg) 的功能、API 和配置。
此模块提供的服务有:初始化、切换运行模式和设置触发(超时)条件。
内部看门狗(片上)驱动程序和外部看门狗(片外)驱动程序的功能需求和功能范围为相同的。因此,API 在语义上是相同的。
内部看门狗(片上)驱动程序属于微控制器抽象层 (MCAL),而外部看门狗(片外)驱动程序属于板载设备抽象层。外部看门狗(片外)驱动程序需要其他驱动程序(MCAL)以访问微控制器硬件。
首字母缩略词和缩写
输入的文档及相关标准和规范
[1] Glossary
- AUTOSAR_TR_Glossary
[2] General Specification of Basic Software Modules
- AUTOSAR_SWS_BSWGeneral
[3] Layered Software Architecture
- AUTOSAR_EXP_LayeredSoftwareArchitecture
[4] Requirements on Watchdog Driver
- AUTOSAR_SRS_WatchdogDriver
[5] General Requirements on Basic Software Modules
- AUTOSAR_SRS_BSWGeneral
[6] General Requirements on SPAL
- AUTOSAR_SRS_SPALGeneral
相关规范
AUTOSAR 提供了关于基础软件模块的通用规范 [2],该规范也适用于看门狗驱动程序。
因此,该规范应被视为看门狗驱动程序的附加及必需规范。
对其他模块的依赖
内部看门狗(片上)驱动程序对微控制器硬件进行直接地访问,位于微控制器抽象层。
外部看门狗(片外)驱动程序使用其他模块(例如,SPI)对外部看门狗(片外)设备进行间接地访问,位于板载设备抽象层(参见 [3])。
[SWS_Wdg_00055]
[ ]
- 外部看门狗(片外)驱动程序应具有独立于微控制器平台的源代码。
文件结构
代码文件结构
[SWS_Wdg_00079]
[SRS_BSW_00346]
[SRS_BSW_00314]
[SRS_SPAL_12263]
- 本规范不应对代码文件结构进行完整地定义。此处应指出,代码文件结构应包含以下文件(根据需要,对名称的扩展请参见 [SWS_Wdg_00169]):
- Wdg_Lcfg.c(链接阶段的可配置参数)
- Wdg_PBcfg.c(后构建阶段的可配置参数)
- 如果内部看门狗(片上)服务被实现为中断服务例程(ISR),则代码文件结构应包含 Wdg_Irq.c(保存中断帧)。
- 这些文件应包含所有链接阶段和后构建阶段的可配置参数。
注意:
[SRS_BSW_00314] 和 [SRS_BSW_00346] 需要这些名称。
[SWS_Wdg_00169]
[SRS_BSW_00347]
- 如果在 ECU 上存在多个看门狗(片上和片外)驱动程序的实例,则实现应对名称进行扩展以提供唯一的代码文件名(根据 [SRS_BSW_00347])。
头文件结构
[SWS_Wdg_00170]
[SRS_BSW_00347]
- 如果在 ECU 上存在多个看门狗(片上和片外)驱动程序的实例,则实现应对名称进行扩展以提供唯一的头文件名(根据 [SRS_BSW_00347])。
注意:
如果存在多个看门狗驱动程序的实例,则在本规范中被定义的产品错误的事件 ID(参见 [SWS_Wdg_00010] 和 [ECUC_Wdg_00148])可能会在 DEM 的配置中被扩展,以使其唯一。
版本检查
详细信息请参阅 SWS_BSWGeneral 中的第 5.1.8 章“版本检查”。
系统时钟
如果内部看门狗(片上)的硬件依赖于系统时钟,则系统时钟的变化(例如,PLL 开启/关闭)可能会影响看门狗的硬件的时钟设置。
板载通信处理程序
外部看门狗(片外)驱动程序的实现取决于所使用的板载通信处理程序的 API 和功能或驱动程序(例如,SPI)的 API 和功能。
需求可追溯性
通用设计规则
[SWS_Wdg_00086]
[SRS_BSW_00167]
[SRS_BSW_00004]
- 看门狗驱动程序应静态地检查配置参数(最迟应在编译阶段)的正确性。
[SWS_Wdg_00031]
[SRS_BSW_00336]
[SRS_SPAL_12163]
- 看门狗驱动程序不应实现被用于逆初始化/关闭(shutdown)的函数接口。如果看门狗支持逆初始化/关闭(shutdown),且运行时环境允许对此功能进行使用,则应通过对 Wdg_SetMode 进行调用(参数为 OFF 模式)实现逆初始化/关闭(shutdown)。
理由:
一些看门狗驱动程序不支持逆初始化/关闭(shutdown)功能,并且在某些运行时环境中不得对此功能(例如,在安全关键系统中)进行使用。
[SWS_Wdg_00040]
[SRS_BSW_00426]
[SRS_BSW_00429]
- 如果必须通过禁用中断确保数据的一致性或该模块的功能的正确性(例如,在对看门狗的模式进行切换或看门狗的中断服务函数被调用期间),则应尽可能地通过使用相应的 BSW 调度程序的功能(这意味着需要定义一个临界区)完成此操作。内部看门狗(片上)驱动程序(因为其属于 MCAL)也可以直接地禁用中断(参见 [SRS_BSW_00429])。
[SWS_Wdg_00168]
[ ]
- 根据静态配置(参见 [ECUC_Wdg_00147]),看门狗驱动程序的代码可被保存在 ROM 或 RAM 中。
动机:
对于某些用例,例如,在引导加载程序(bootloader)模式中对闪存(flash)进行编程,看门狗驱动程序必须是在 RAM 中被执行的文件的一部分。
提示:
这主要是对构建环境的需求,而非对看门狗驱动程序本身的需求。然而,由于这可能会对代码的实现造成影响,因此在此进行说明,并给出相应的配置参数。
外部看门狗
[SWS_Wdg_00076]
[SRS_SPAL_12092]
- 为了访问外部看门狗(片外)硬件,相应的看门狗驱动程序的实例应使用相应的处理程序或驱动程序的功能和 API,例如 SPI 或 DIO 驱动程序。
注意:
可以通过对独立于其他外设的内部硬件的定时器进行使用或对 GPT 驱动程序进行使用实现服务于外部看门狗(片外)的例程。
提示:
外部看门狗(片外)驱动程序是板载设备抽象层的一部分(参见 [3]),它排除了对硬件进行直接地访问。
此架构差异将在即将被发布的版本中被解决。
[SWS_Wdg_00077]
[SRS_Wdg_12165]
- 外部看门狗(片外)驱动程序应满足与内部看门狗(片上)驱动程序相同的功能需求,并提供相同的功能范围。因此,它们各自的 API 在语义上是相同的。
[SWS_Wdg_00078]
[SRS_Wdg_12166]
- 看门狗驱动程序应将对外部看门狗(片外)硬件进行访问所需的所有参数(例如,所使用的 SPI 通道或 DIO 端口)添加到模块的发布参数和配置参数中。
内部看门狗
[SWS_Wdg_00161]
[ ]
- 为了访问内部看门狗(片上)硬件,相应的看门狗驱动程序的实例应对看门狗硬件进行直接地访问。
提示:
内部看门狗(片上)驱动程序是微控制器抽象层的一部分(参见 [3]),对硬件进行直接地访问。
注意:
可以通过对独立于其他外设的内部硬件的定时器进行使用或对 GPT 驱动程序进行使用实现服务于内部看门狗(片外)的例程。
如果看门狗服务例程被实现为中断服务例程(即作为 cat1 或 cat2 中断服务例程,且不对 GPT 进行使用),则应在基础软件模块描述中对其进行描述,并且对其的实现应符合 [5] 和 [6] 中([SRS_BSW_00427]、[SRS_BSW_00325]、[SRS_BSW_00439]、[SRS_BSW_00314]、[SRS_BSW_00429]、[SRS_SPAL_12129])的中断处理的需求。
支持窗口看门狗的触发概念
在本规范的早期版本中,看门狗服务例程由上层软件调用(难以保证时序,特别对于窗口看门狗而言)。这一概念已被修改,从而产生在本章中被解释的需求。
这个概念的基本思想是将对看门狗硬件的处理的时间与逻辑控制的时间分离。
触发看门狗所需的时基可由硬件提供。这可确保最小的时间抖动。直接在定时器的中断服务函数(ISR)中对看门狗硬件进行处理可确保最小的延迟。
有两个条件:
- 最小时间抖动和延迟
- 满足窗口看门狗的时间窗口
看门狗驱动程序期望对看门狗的逻辑控制(无论是否触发看门狗)由运行时环境(例如,WdgM)负责,以便保持 WdgM(活动监控)的基本概念。
[SWS_Wdg_00144]
[SRS_Wdg_12019]
- WdgM(或其他软件实体)应通过改变触发条件控制看门狗驱动程序:当触发条件有效时,看门狗驱动程序将会对看门狗硬件进行处理。当触发条件无效时,看门狗驱动程序将会停止对看门狗硬件进行处理,并且看门狗硬件将会发生超时。
- 触发条件的语义可被解释为“允许在接下来的 n 毫秒内对看门狗硬件进行处理”。在此时间范围内,软件实体必须对触发条件进行更新,否则看门狗硬件将会发生超时。
- 对看门狗的逻辑控制的传递只需共享对触发条件的访问(例如,在启动/关闭期间)。
[SWS_Wdg_00134]
[SRS_Wdg_12019]
- 如果触发计数器的值大于 0,看门狗服务例程应使计数器的值递减并对看门狗硬件进行处理。
[SWS_Wdg_00135]
[SRS_Wdg_12019]
- 如果触发计数器的值等于 0,看门狗服务例程不应进行任何操作(即看门狗硬件将会发生超时)。
[SWS_Wdg_00093]
[SRS_Wdg_12019]
- 如果看门狗硬件需要一个激活码(可被配置或更改),则看门狗驱动程序应在其内部对该激活码进行处理。在这种情况下,看门狗驱动程序应将正确的激活码传递给看门狗硬件,而看门狗硬件则应更新看门狗驱动程序内部的变量(存储下一次访问所需的激活码)。
[SWS_Wdg_00094]
[SRS_Wdg_12019]
- 如果看门狗硬件需要一个激活码(可被配置或更改),则看门狗驱动程序的触发周期应被定义,以确保看门狗硬件可以对激活码进行更新(见图 2)。
[SWS_Wdg_00095]
[SRS_Wdg_12019]
- 如果看门狗硬件需要一个激活码(可被配置或更改),且可对初始的激活码进行配置,则应在看门狗驱动程序的配置集中对初始的激活码进行配置。如果看门狗硬件的激活码是固定的,则可以忽略上述需求。
[SWS_Wdg_00035]
[SRS_BSW_00337]
- 如果开发错误检测被启用,看门狗服务例程应检查看门狗驱动程序的状态是否为 WDG_IDLE(即看门狗驱动程序和看门狗硬件已被初始化,且看门狗驱动程序当前未被触发或看门狗驱动程序的模式当前未被切换)。如果不为 WDG_IDLE,则看门狗服务例程不应对看门狗硬件进行处理,并应上报开发错误 WDG_E_DRIVER_ STATE。
[SWS_Wdg_00052]
[SRS_BSW_00337]
- 如果开发错误检测被启用,看门狗服务例程应在其执行期间将看门狗驱动程序的状态设置为 WDG_BUSY(即看门狗驱动程序当前正忙),并在函数返回前的最后一个操作中将看门狗驱动程序的状态重置为 WDG_IDLE(即看门狗驱动程序已被初始化且处于空闲状态)。
注意:
本规范仅规定了符号 WDG_IDLE 和 WDG_BUSY(前提是它们在外部为可见的,例如,调试(参见 [SRS_BSW_00335]))。状态变量的数据类型由具体实现决定。
提示:
看门狗驱动程序的运行时环境应确保在对看门狗服务例程进行调用之前已对看门狗驱动程序进行了初始化。
错误分类
开发错误
扩展产品错误
[SWS_Wdg_00178]
[ ]
[SWS_Wdg_00180]
[SRS_BSW_00327]
[SRS_BSW_00331]
[SRS_BSW_00466]
[SRS_BSW_00385]
- 当对看门狗驱动程序的模式的设置失败时,应上报扩展产品错误 WDG_E_MODE_FAILED (FAILED)。
[SWS_Wdg_00181]
[SRS_BSW_00327]
[SRS_BSW_00331]
[SRS_BSW_00466]
[SRS_BSW_00385]
- 当对看门狗驱动程序的模式的设置成功时,应上报扩展产品错误 WDG_E_MODE_FAILED (PASSED)。
[SWS_Wdg_00179]
[ ]
[SWS_Wdg_00182]
[SRS_BSW_00327]
[SRS_BSW_00331]
[SRS_BSW_00466]
[SRS_BSW_00385]
- 当对看门狗驱动程序的模式的禁用失败时,应上报扩展产品错误 WDG_E_DISABLE_REJECTED (FAILED)。
[SWS_Wdg_00183]
[SRS_BSW_00327]
[SRS_BSW_00331]
[SRS_BSW_00466]
[SRS_BSW_00385]
- 当对看门狗驱动程序的模式的禁用成功时,应上报扩展产品错误 WDG_E_DISABLE_REJECTED (PASSED)。
API 规范
[SWS_Wdg_00172]
[SRS_BSW_00347]
- 如果在 ECU 上存在多个看门狗(片上和片外)驱动程序的实例,则实现应对 API 名称及特定于实例的类型名称进行扩展以确保其唯一性(根据 [SRS_BSW_00347])。
导入的类型
本章列出了以下模块包含的所有类型:
[SWS_Wdg_00105]
[ ]
类型定义
Wdg_ConfigType
函数定义
Wdg_Init
[SWS_Wdg_00001]
[SRS_BSW_00400]
[SRS_BSW_00101]
[SRS_Wdg_12105]
- Wdg_Init 应对看门狗驱动程序和看门狗硬件进行初始化,应根据配置集设置看门狗驱动程序的默认的模式和默认的超时时间。
注意:
通过后构建配置,用户将在限定数量的静态配置集中选择将被 Wdg_Init 使用的配置集(另请参阅 [SRS_BSW_00314])。
[SWS_Wdg_00100]
[SRS_SPAL_12057]
[SRS_SPAL_12125]
[SRS_SPAL_12461]
[SRS_Wdg_12105]
- Wdg_Init 应对看门狗驱动程序的所有全局变量进行初始化,并设置看门狗驱动程序的默认的模式和默认的超时时间。
[SWS_Wdg_00101]
[SRS_SPAL_12057]
[SRS_SPAL_12125]
[SRS_SPAL_12461]
[SRS_Wdg_12105]
- Wdg_Init 应对控制看门狗硬件的控制寄存器进行初始化,并且这些寄存器不应影响/依赖于其他(硬件)模块。
- 将影响/依赖于其他(硬件)模块的寄存器应由系统模块初始化。
[SWS_Wdg_00025]
[SRS_BSW_00323]
[SRS_SPAL_12163]
[SRS_Wdg_12106]
- 如果看门狗驱动程序不允许被禁用(配置参数 WdgDisableAllowed 为 OFF)且配置集中的看门狗驱动程序的默认的模式为禁用模式,则 Wdg_Init 函数不应进行初始化,并上报扩展产品错误 WDG_E_DISABLE_ REJECTED。
[SWS_Wdg_00173]
[ ]
- 如果无法将看门狗驱动程序和看门狗硬件的模式设置为默认模式,例如,由于模式设置不一致或未满足某些时间要求,则 Wdg_Init 应上报扩展产品错误 WDG_E_MODE_FAILED。
[SWS_Wdg_00090]
[SRS_BSW_00323]
[SRS_SPAL_12448]
- 如果开发错误检测被启用,Wdg_Init 函数应检查给定的配置集(特定于硬件的)中的配置是否在被允许的取值范围内。如果检测到错误,则 Wdg_Init 函数不应进行初始化,并上报扩展产品错误 WDG_E_PARAM_CONFIG。
[SWS_Wdg_00019]
[SRS_BSW_00406]
[SRS_BSW_00335]
- 如果开发错误检测被启用,当成功地进行了初始化时,Wdg_Init 函数应将看门狗驱动程序的状态从 WDG_ UNINIT(表示未被初始化,默认状态)切换为 WDG_IDLE。
注意:
本规范仅规定了符号 WDG_IDLE 和 WDG_UNINIT(前提是它们在外部为可见的,例如,调试(参见 [SRS_BSW_00335]))。状态变量的数据类型由具体实现决定。
Wdg_SetMode
[SWS_Wdg_00107]
[ ]
[SWS_Wdg_00160]
[SRS_Wdg_12015]
[SRS_Wdg_12018]
- Wdg_SetMode 应将看门狗驱动程序的模式从当前的模式切换为参数 Mode 指定的模式。这意味着:通过在限定数量的静态配置集中选择一种配置(例如,翻转看门狗或窗口看门狗、超时时间),看门狗驱动程序和看门狗硬件的模式将被切换为以下三种模式之一:
- WDGIF_OFF_MODE
- WDGIF_SLOW_MODE
- WDGIF_FAST_MODE
[SWS_Wdg_00051]
[SRS_Wdg_12015]
- 对看门狗驱动程序进行初始化所使用的配置集应包含在不同模式中被使用的看门狗驱动程序和看门狗硬件的特定的参数。
[SWS_Wdg_00145]
[ ]
- Wdg_SetMode 应根据看门狗驱动程序的新的模式重置看门狗驱动程序的超时计数器,应根据超时计数器在模式切换前的值及模式切换后的触发周期计算超时计数器在模式切换后的值。
[SWS_Wdg_00103]
[ ]
- 如果模式切换已被成功地执行(完全地),即看门狗硬件/驱动程序的所有参数已被设置为新的值,则 Wdg_SetMode 应返回 E_OK。
[SWS_Wdg_00016]
[SRS_SPAL_12064]
- 如果无法将看门狗硬件/驱动程序的模式切换为被请求的模式,例如,由于模式设置不一致或未满足某些时间要求,则 Wdg_SetMode 应返回 E_NOT_OK 并上报扩展产品错误 WDG_E_MODE_FAILED。
[SWS_Wdg_00026]
[SRS_BSW_00323]
[SRS_SPAL_12163]
[SRS_Wdg_12106]
- 如果看门狗驱动程序不允许被禁用(例如,在安全相关的系统中,参见 [ECUC_Wdg_00115]),则 Wdg_SetMode 应检查被请求的模式的设置是否会对看门狗驱动程序进行禁用。在这种情况下,Wdg_SetMode 不应对模式进行切换,应返回 E_NOT_OK 并上报扩展产品错误 WDG_E_DISABLE_REJECTED。
[SWS_Wdg_00091]
[SRS_BSW_00323]
[SRS_SPAL_12448]
- 如果开发错误检测被启用,Wdg_SetMode 应检查参数 Mode 是否在被允许的取值范围内。如果检测到错误,则 Wdg_SetMode 函数不应对模式进行切换,并上报扩展产品错误 WDG_E_PARAM_MODE。
[SWS_Wdg_00092]
[SRS_BSW_00323]
[SRS_SPAL_12448]
- 如果开发错误检测被启用,Wdg_SetMode 应检查被请求的模式的(特定于硬件的)设置是否在被允许的取值范围内。如果检测到错误,则 Wdg_SetMode 函数不应对模式进行切换,并上报扩展产品错误 WDG_E_PARAM_MODE。
[SWS_Wdg_00017]
[SRS_BSW_00335]
[SRS_SPAL_12064]
[SRS_SPAL_12448]
- 如果开发错误检测被启用,Wdg_SetMode 应检查看门狗驱动程序的状态是否为 WDG_IDLE(即看门狗驱动程序和看门狗硬件已被初始化,且看门狗驱动程序当前未被触发或看门狗驱动程序的模式当前未被切换)。如果检测到错误,则 Wdg_SetMode 函数不应对模式进行切换,并上报扩展产品错误 WDG_E_DRIVER_ STATE。
[SWS_Wdg_00018]
[SRS_BSW_00335]
- 如果开发错误检测被启用,Wdg_SetMode 应在其执行期间将看门狗驱动程序的状态设置为 WDG_BUSY(即看门狗驱动程序当前正忙),并在函数返回前的最后一个操作中将看门狗驱动程序的状态重置为 WDG_IDLE。
注意:
本规范仅规定了符号 WDG_IDLE 和 WDG_BUSY(前提是它们在外部为可见的,例如,调试(参见 [SRS_BSW_00335]))。状态变量的数据类型由具体实现决定。
Wdg_SetTriggerCondition
[SWS_Wdg_00136]
[ ]
- Wdg_SetTriggerCondition 应将看门狗驱动程序的超时计数器重置为参数 timeout 的值。
[SWS_Wdg_00138]
[ ]
- 参数 timeout 的值应被解释为“毫秒”。从毫秒到相应的计数器的值的转换应在看门狗驱动程序内部被完成。
[SWS_Wdg_00139]
[ ]
- 在从毫秒到相应的计数器的值的转换的过程中,应对当前看门狗驱动程序的模式进行考虑。
[SWS_Wdg_00140]
[ ]
- Wdg_SetTriggerCondition 允许参数 timeout 的值为 0,这将导致对看门狗驱动程序的触发(几乎)被立即地停止,并且 ECU(几乎)被立即地复位(由看门狗导致)。如果在对 Wdg_SetTriggerCondition 进行调用前看门狗驱动程序的超时计数器的值为 0,则 Wdg_SetTriggerCondition 不应进行任何操作,这意味着参数 timeout 的值将被忽略。
[SWS_Wdg_00146]
[ ]
- 如果开发错误检测被启用,Wdg_SetTriggerCondition 应检查参数 timeout 的值是否小于或等于最大超时值 (WdgMaxTimeout)。如果检测到错误,则 Wdg_SetTriggerCondition 函数不应将看门狗驱动程序的超时计数器重置为参数 timeout 的值,并上报开发错误 WDG_E_PARAM_TIMEOUT。
Wdg_GetVersionInfo
[SWS_Wdg_00174]
[ ]
- 如果开发错误检测被启用,当参数 versioninfo 的值为 NULL 时,Wdg_GetVersionInfo 应上报开发错误 WDG_E_PARAM_POINTER 并直接返回(不进行任何操作)。
预期接口
本章列出了看门狗驱动程序所需的由其他模块提供的所有函数。
可选接口
看门狗驱动程序需要以下接口以实现其可选功能。
除以上接口外,可能还需要其他模块(例如 SPI 或 DIO)以访问外部看门狗(片外)硬件。
序列图
看门狗驱动程序的初始化,设置触发条件及模式
请注意,这只是一个示例。需要特别注意的是,除了看门狗管理器(WdgM)模块之外,其他模块也可以对触发条件进行设置。
该图显示了当看门狗服务例程被实现为中断服务函数时对看门狗硬件的处理的序列。请注意,这只是一个示例。对于外部看门狗(片外)硬件,无法直接地对其进行访问,只能通过其他模块(例如 SPI 或 DIO)对其进行访问。
配置规范
Wdg
WdgSettingsFast
For details refer to the chapter 10.3 "Published Information" in SWS_BSWGeneral.
WdgPublishedInformation
WdgTriggerMode is only published for information purposes; this parameter is not used to configure the Watchdog Driver or the modules using the Watchdog Driver.
评论
发表评论