ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

AUTOSAR WDG

AUTOSAR WDG 喂狗在嵌入式程序中看门狗是用来监测一旦发生错误就向芯片发出重启信号的电路防止程序跑飞也可以防止程序在线运行时出现死循环。AutoSar的看门狗功能中喂狗即Trigger Watchdog当触发看门狗后计时counter会被刷新重新开始计算通过判断喂狗的时机或间隔来判断程序是否在正常运行。内狗/外狗Wdg通常有两种一种是芯片内部自带的片内看门狗另一种是在芯片外部通过SPI这种接口连接的片外看门狗。内狗MCAL只负责常用的有MCU内部看门狗片内看门狗的特点是Wdg模块是直接访问相关硬件寄存器。外狗片外看门狗属于板级设备抽象层负责通常需要使用MCAL提供的其他模块比如SPIDIO,PWM等来访问/控制外扩看门狗芯片。这种不能直接访问硬件寄存器。由于其特殊性该模块的代码除了可以在ROM里面运行外也可能会在RAM里面运行。比如在Bootloader刷写Flash时Wdg模块可能作为二进制文件里面的一部分在RAM上运行。1.3 超时狗/窗口狗按喂狗时机又能将看门狗分为超时狗Timeout Wdg和窗口狗(Window Wdg)。1.3.1 超时狗超时狗喂狗很简单即采用Timeout模式计时在Timeout时间内都可以喂狗当检测到超过设定的Timeout时间仍未喂狗则会触发进一步安全保护措施。1.3.2 窗口狗窗口狗需要在某个特定的窗口周期在open window内才能喂狗在窗口期外喂狗都无效例如下图中在(0.72-1.2)*twD范围内喂狗有效。.Wdg架构在AutoSar架构中作为功能安全中至关重要的一个功能看门狗系统架构相对简单如下图服务层有WdogMWdog Manager模块主要为软件状态机通过软件策略来实现一些监测功能对上可汇报当前错误状态对下可调用抽象层接口进行一系列不同类型的复位操作。ECU抽象层则有WdogIf模块主要将各种看门狗模块进行抽象化管理。MCAL层则就是各种类型看门狗的WdgDriver了。4.相关模块5.WdgM功能简介WdgM 是 AUTOSAR 基础软件架构中的一个标准的软件模块属于服务层service layer。它主要用于监控应用程序执行的可靠性包括监控程序运行的周期和程序运行逻辑的正确性。WdgM可配置一定数量的SE。当它检测到违反了对程序执行的配置时间和/或逻辑约束时它将采取许多可配置的操作来从此故障中恢复。WdgM 主要提供以下功能1. 监控位于 MCU 内的多个独立的应用程序它们可以拥有独立的时序要求2. 对功能安全相关的任务和周期性功能main function进行逻辑流监控3. 每个 SE 可以具备单独的错误反应机制4. 根据 ECU 的状态和硬件的能力支持看门狗的 Off\Slow\Fast 模式。5.1 WdgM喂狗机制在将WdgM喂狗机制之前先从上到下层说一下这里面涉及到的几个时间参数Condition Value由WdgM刷新的Timeout在该时间内wdg不应被reset,也可以称为用户超时时间WdgM_MainFunction的调度周期在WdgM状态机正常的情况下会周期性地刷新Condition ValueWdg ResetTime 看门狗硬件复位的时间也就是硬件寄存器从startvalue到溢出的时间Refresh Time 即 GPT定时中断中喂狗的时间wdg中配置WdgM 负责刷新喂狗条件在WdgM_MainFunction中会刷新Condition Value配置值并通过WdgIf_SetTriggerCondition让WdgDriver重置硬件寄存器喂狗并会计算出中断喂狗的counter Condition Value / Wdg ResetTime 之后如果WdgM_MainFunction不再刷新Condition Value则会在中断中进行counter喂狗并且counter-1。 因此如果 WdgM监测的SE出现问题则无法刷新Condition Value则Condition Value会自减至 0进而引起看门狗复位。Condition Value的存在使得 WdgM 可以更灵活的控制看门狗的复位时间从决定复位到真正复位可以留给用户更充分的准备时间。WdogM提供三种监测机制分别是Alive Supervision Deadline SupervisionLogical Supervision。5.1.1 Alive SupervisionAlive Supervision 主要用来监控某个 SE 运行的周期是否正确。其基本原理是在待监控的 SE 中设置 CP在固定时间内监测该 CP 到达的次数。基本实现方式就是一开始需要用户配置一个上限值和下限值在一个统计周期内WdogM会计算出这个SE的运行次数如果运行次数超出这个区间则Alive 检测失败否则 Alive 检测成功。Alive Supervision 中的CP都有自己的参数期望区间和监测周期且SE可以有多个CP,但是不推荐当然每个Mode下的Alive Supervision可以是不同的取决于配置使用 Alive Supervision 有如下限制1. 同一 CP 不能隶属于多个 Alive Supervision2. Alive Supervision 监控到错误后其 SE 的本地状态将首先切换至 FAILED 并且 错 误 计 数 增 加 如 果 Alive 错 误 计 数 超 过WdgMFailedAliveSupervisionRefCycleTol则状态切换为 EXPIRED3. Alive Supervision 监控正确其 SE 的本地状态如果为 FAILED 错误计数减小当错误计数减小到 0 后其 SE 的本地状态将切换至 OK。5.1.2 Deadline Supervision某些场景下应用程序需要关注某段程序运行的时间非周期性的过长或过短都说明程序执行异常。在 WdgM 中称之为 DeadlineSupervision抽象为监控两个 CP 之间运行的时间。DeadlineSupervision 具体算法如下用户将在 WdgM 中配置DeadlineSupervision 的起始 CP、结束 CP、最小时间门限和最大时间门限。在运行到起始 CP 时启动 DeadlineSupervision在运行到结束 CP 时计算运行时间是否配置合理范围内。DeadlineSupervision中不仅仅可以监测最简单的两个CP之间运行的时间也可以配置成多个链式的。如下图使用 DeadlineSupervision 的注意事项如下1. DeadlineSupervision 的两个 CP 必须属于相同的 SE2. DeadlineSupervision 的两个 CP 不能相同3. 同一 CP 可以属于不同的 Deadline Supervision4. DeadlineSupervision 监控到错误后其 SE 的本地状态将直接切换至 EXPIRED进而引起全局状态的切换5. Deadline 监控的时间一般是 us 级别的而 WdgM 的调度周期是 ms 级别的因此WdgM 需要调用 AUTOSAR OS 提供的标准接口StatusType GetElapsedValue(CounterType CounterID, TickRefType Value,TickRefType ElapsedValue)来读取时间才能使用 DeadlineSupervision使用 Deadline Supervision有如下限制1. Deadline Supervision不支持嵌套式i.e . start 1, start 2, end 2, end 1;5.1.3 Logical SupervisionLogical Supervision主要用于监控应用程序的运行顺序是否正确包括各个 SE 本地的运行路径的检查的Internal Graph;和 SE 之间的全局路径检查External Graph。Internal Graph : 所有的CP都属于同一个SE中External Graph至少两个CP属于不同的SE中不仅如此这两种Graph还有一个区别就是External Graph由Mode决定每个Mode中的External Graph可能不一样而Internal Graph则是SE的属性不随Mode改变。使用 Logical Supervision有如下限制1. 一个CP不能属于不同的Graph包括Internal Graph和External Graph;2. Logical Supervision不能使用在不同的调度任务中注一个Graph可能有一个或者多个起始CP并且也可能有多个终止CP以任何起始CP开始和终止CP结束的Graph都是正确的。5.2 WdgM状态机WdogM模块里面有两种状态机一种是每个SE的Local Supervision Status还有就是整个WdogM模块的Global Supervision Status。5.2.1 本地状态机每个 SE都有一个专属独立的状态机其状态转换关系描述如下5.2.2 全局状态机Global Supervision Status状态切换如下图所示一般来说Global Supervision Status是根据各个 SE 的本地状态来变化的变化规则描述如下1. 所有 SE 的状态均为 OK或 DEACTIVATED 时全局状态为 OK2. 一个或多个 SE 的状态为 FAILED其他 SE 为 OK 或 DEACTIVATED 时全局状态为FAILED3. 一个或多个 SE 的状态为 EXPIRED全局状态为 EXPIRED4. 全局状态为 EXPIRED 超过 WdgMExpiredSupervisionCycleTol 个调度周期全局状态切换为 STOPPED。下述情况下也会发生全局状态切换5. 未初始化或调用反初始化全局状态切换为 DEACTIVATED6. 初始化时全局状态切换为 OK7. 调用 WdgIf_SetMode 返回 E_NOT_OK全局状态切换为 STOPPED8. 调用 WdgM_PerformReset全局状态切换为 DEACTIVATED9. 调用 WdgM_SetMode 时会引起各 SE 的本地状态变化进而引起全局状态的变化规则同上文描述。下面描述了当WdgM模块的Global Supervision Status状态发生切换时WdgM会进行相关操作1. Global Supervision Status为OK时正常调用 WdgIf_SetTriggerCondition 刷新喂狗条件2. Global Supervision Status切换至 FAILED 时正常调用 WdgIf_SetTriggerCondition 刷新喂狗条件。调用 BswM_WdgM_RequestPartitionReset可以复位部分的 APP该功能是可选的3. Global Supervision Status切换至 EXPIRED 时正常调用WdgIf_SetTriggerCondition 刷新喂狗条件4. Global Supervision Status切换至 STOP 时调用 WdgIf_SetTriggerCondition 将喂狗条件设置为 0调用 Dem 上报错误事件如果使能了 WdgMImmediateReset会立即出发 MCU复5. 所有的状态切换均会通知给上层。InternalTransition不需要切换mode总是被监测这里有个思考题如果三种检测机制的Init CP 都不到达那么会继续喂狗答不会。虽然Deadline Supervision 和Logic Supervision 不到达 Init CP不会让Gloal status变成stop, 但是在Alive Supervision中则会认为程序异常则会停止喂狗。7.WdgIf功能简介WdgIf主要能够添加看门狗设备和提供Wdgif_SetMode、WdgIf_SetTriggerCondition控制看门狗驱动层。8.Wdg Driver功能简介MCAL Wdg模块定义了三种模式具体定义见下表其实mode中的喂狗频率是指中断的快慢这个需要按需求来实现接下来可以看看具体喂狗的时间轴i.e .Condition Value为180msWdg ResetTime和Refresh Time都为100ms。如之前所提到的Gpt中断只会喂一次狗而程序是否复位则取决于第二次Wdg ResetTime溢出之前是否有Condition Value刷新。9.实现方案简介注意点外狗驱动的初始化得放在BswM_Init之前准确的说是须放在WdgM_init之前WdgM_MainFunction的周期须比SE的周期短且须保证涉及的调度周期准确。Gpt的中断周期须为连续模式如果为窗口式看门狗则GPT的周期为窗口的中间点如果为非窗口式则周期等于看门狗超时时间这里细节上的东西比较多就不一一讲解了比如由于运算导致的小数处理等。总之GPT的周期中断需保证小于Wdg硬件超时时间或者GPT中断优先级高于Wdg的中断优先级smu需要配置发生wdg寄存器之后的安全处理动作smu、wdg、WdgM初始化不能漏掉
返回列表