本文章所参考的 AUTOSAR 标准为 4.4.0 版本

Watchdog 基本功能

Watchdog,即看门狗,其主要功能是在设备无人值守时,自动复位系统,确保系统持续稳定运行。这一功能对于关键安全系统至关重要,同时对于非关键安全系统也具有重要意义。

在实际应用中,由于硬件老化、外部电磁干扰等因素,软件在运行过程中可能出现不可预测的行为。若无看门狗机制,这些问题可能导致设备故障,特别是在恶劣环境如沙漠地带,将显著增加不必要的维护成本。

对于汽车而言,ECU 中的软件同样可能受到电磁干扰、高温等环境因素的影响,从而引发程序异常。然而,正是看门狗机制的存在,在关键时刻能够触发系统复位,及时将设备恢复到正常工作状态,有效防止潜在风险。

看门狗的实现方式主要有硬件看门狗和软件看门狗两种。硬件看门狗依赖硬件机制,通过定时器原理实现,软件仅负责启动定时器;而软件看门狗则完全由软件控制定时器的启动和更新。

硬件看门狗

如上所述,硬件看门狗主要依赖自身的定时器来实现其功能,因此被俗称为“硬狗”。常见的硬件看门狗形式包括 MCU 内部自带的看门狗、PMIC 中内嵌的看门狗,以及外部的独立看门狗等。

在选择适合的硬件看门狗时,需根据系统的具体需求来决定,无法一概而论。不过,在使用硬件看门狗时,需特别注意以下两点:

  • 首先,要确保所选硬件看门狗的最大超时时间能满足系统的设计需求。如果超时时间设置过短,可能会导致系统的不稳定性,从而误触发看门狗机制。

  • 其次,对于关键安全系统而言,通常要求看门狗一旦启动就不允许被关闭。此外,还需考虑系统上电后看门狗的默认状态。如果是默认启动看门狗,那么软件就需要在芯片上电后立即进行喂狗操作或重置看门狗。同时,还需要设计一种在刷件或调试软件前的物理关闭看门狗的动作。

关于喂狗方式,硬件看门狗可以采用 GPIOIICSPI 等通讯方式。由于不同的通讯方式对芯片的硬件资源有不同的要求,因此应选择相对简单可靠的通讯方式进行喂狗。

软件看门狗

软件看门狗,亦称为“软狗”,主要通过软件定时器实现其功能。虽然名为软件,但其时间基准仍依赖于硬件外设上的硬件定时器。

ostick 为例,我们利用它来计时。通过运行软狗监控的定时器任务,不断递减主程序计数器。其他任务则负责重置该定时器。若软件检测到主程序的定时器归零,这意味着其他任务未能正常执行,此时可以触发主动复位,实现看门狗功能。

在配置软件看门狗时,通常建议将运行软狗的主任务优先级设置得比被监控的任务高。当与硬件看门狗结合使用时,通常会将软狗的主任务与硬件看门狗的喂狗任务置于同一任务中,以确保两者之间的协调与同步。

a

在实际项目中,硬件看门狗(硬狗)和软件看门狗(软狗)通常结合使用,以提供更全面的系统监控和保护。如上图所示的实践案例中,Task A、B、C 的优先级均低于 Task D。如果仅在 Task D 中执行喂硬狗的操作,可能会出现其他任务挂死而系统仍正常运行的情况,因为硬狗无法检测到这些低优先级任务的故障。

为了避免这种情况,我们引入了软件看门狗机制。每个 Task(A、B、C)都维护一个计数器,用于监控其运行状态。这些计数器的重置值需要根据各自 Task 的最大运行时间及周期来合理设定。Task D 则负责监控这些计数器的递减动作。

在运行过程中,如果所有 Task 的计数器在设定的重置时间内都不为零,意味着这些低优先级任务运行正常。此时,Task D 可以通过 GPIOIICSPI 等接口正常执行喂硬狗操作,保持硬狗处于激活状态。然而,如果任意计数器的值为零,说明有 Task 挂死或出现异常。在这种情况下,系统需要停止喂硬狗或主动触发复位行为,以确保系统的安全性和稳定性。

通过这种方式,软件看门狗和硬件看门狗协同工作,共同监控系统的运行状态。软狗负责监控低优先级任务,而硬狗则提供额外的安全保障。这种双重监控机制能够更全面地保护系统,减少因任务故障而导致的系统崩溃风险。

AUTOSAR-CP-Wdg 协议栈

考虑到软狗与硬狗结合的应用场景,AUTOSAR 架构已将其标准化并整合于整个 Watchdog 协议栈中

image-20240226150620949

如图 3 所示,在 AUTOSAR 架构下,Watchdog 协议栈主要包含三个软件模块:

  • Watchdog Driver:该模块负责实现对硬件看门狗的寄存器操作与控制。这包括 MCU 内部看门狗(Internal Watchdog)和外部看门狗(External Watchdog)。对于外部看门狗,可以通过 GPIOIICSPI 等接口进行喂狗操作。
  • Watchdog Interface:作为 Watchdog Stack 的关键组成部分,Watchdog Interface 的主要职责是连接上层的 Watchdog Manager 与底层的 Watchdog Driver。值得一提的是,它可以与多个底层 Watchdog Driver 进行连接,这在多核设计中尤为常见。
  • Watchdog Manager:作为服务层的核心,Watchdog Manager 的主要功能是确保整个程序执行的正确性,并触发相应的硬件看门狗喂狗动作。它在整个监控体系中扮演了至关重要的角色。

通过上述三个模块的协同工作,AUTOSAR 架构下的 Watchdog 协议栈得以实现其功能。为确保大家对每个模块有深入的理解,以下提供了 Watchdog 协议栈各部分的讲解链接,供您深入学习:

点击相应链接,深入了解每个模块的工作原理、应用场景及最佳实践。这将帮助您更好地将 Watchdog 协议栈应用于实际项目中,提升系统的稳定性与可靠性。

参考