看门狗计时器(Watchdog Timer,WDOG)

基本概念:

看门狗计时器(Watchdog Timer,WDT),是一种在嵌入式系统中广泛使用的硬件计时设备,其主要作用是用于系统恢复和稳定性保障。看门狗定时器的设计原理是一种简单的但有效的系统恢复机制,其核心目的在于防止微控制器单元(MCU)进入无限循环或“跑飞”(即程序失控)的状态。

嵌入式系统和其他计算机控制的设备通常会使用Watchdog通常是由于人们无法轻易接触该设备,或者无法及时对故障做出反应。例如,如空间探测器之类的远程嵌入式系统,人类无法其进行直接的物理操作。车辆中的嵌入式系统,驾驶员也难以进行直接的物理操作。如果它们无法从故障中自动恢复,他们便会一直处于失效状态。在这种情况下看门狗定时器便可以发挥作用。

I.MX6ull Watchdog Timer (WDOG)

The Watchdog Timer (WDOG) protects against system failures by providing a method by   which to escape from unexpected events or programming errors.
看门狗定时器(WDOG)通过提供一种从意外事件或编程错误中逃脱的方法来防止系统故障。
Once the WDOG is activated, it must be serviced by the software on a periodic basis. If  servicing does not take place, the timer times out. Upon timeout, the WDOG asserts the internal system reset signal, WDOG_RESET_B_DEB to the System Reset Controller (SRC).

一旦WDOG被激活,软件必须定期对其进行服务("喂狗")。如果未进行服务,定时器将超时。超时时,WDOG会向系统复位控制器(SRC)断言内部系统复位信号WDOG_RESET_B_DEB。

There are two WDOG modules, WDOG1 and WDOG2 (TZ) in the chip. The modules are disabled by default (after reset). WDOG1 will be configured during boot while WDOG2 is dedicated for secure world purposes and will be activated by TZ software if required.

芯片中有两个WDOG模块,分别是WDOG1和WDOG2(TZ)。模块默认情况下是禁用的(复位后)。WDOG1将在启动期间被配置,而WDOG2专用于安全世界目的,如果需要,将由TZ软件激活。

tips:安全世界模式(TrustZone, TZ)是一种硬件安全技术,它通过在处理器中创建一个隔离的安全环境来保护敏感数据和代码。TrustZone技术的核心在于其硬件级别的隔离,确保了即使在非安全世界受到攻击或出现故障的情况下,安全世界的数据和操作仍然得到保护

I.MX6ull WDOG Diagram

低功耗控制(Low Power Control):接收来自不同低功耗模式的信号,如等待模式(LOW POWER WAIT Mode)、停止/休眠模式(LOW POWER STOP/DOZE Mode)和调试模式(DEBUG Mode),这些信号用于控制看门狗定时器在低功耗状态下的行为。

低频参考时钟(Low Frequency Reference Clock):提供一个低频时钟信号,用于驱动看门狗定时器的计时功能。

控制模块(Control):作为中央控制单元,接收来自外围总线(Peripheral Bus)的信号,用于配置和控制看门狗定时器的行为。

超时计数器(Time-Out Counter):由低频参考时钟驱动,用于计时。当计数器达到预设的超时值时,会触发WDOG-1复位生成逻辑。

预超时中断逻辑(Pre Time-Out Interrupt Logic):在计数器超时之前,可以生成一个可编程的中断。这个中断可以用于提醒系统在超时之前采取行动。

WDOG-1复位生成逻辑(WDOG-1 Reset Generation Logic):当超时计数器超时时,该逻辑会生成一个复位信号(wdog_rst)。这个信号可以用于重置系统,以从潜在的故障状态中恢复。

WDOG-1生成逻辑(WDOG-1 Generation Logic):与超时计数器和预超时中断逻辑相连,用于生成WDOG-1信号。当超时计数器超时时,WDOG-1信号被激活。

掉电计数器(Power Down Counter):由低频参考时钟驱动,具有固定的16秒超时周期。当计数器超时时,会断言WDOG信号。

外围总线(Peripheral Bus):用于与外部设备或处理器通信,允许外部控制看门狗定时器。

中断(Interrupt):当预超时中断逻辑触发时,会生成一个中断信号,通知处理器采取行动。

I.MX6ull WDOG Clocks 

The WDOG uses the low frequency reference clock for its counter and control operations.

看门狗定时器(WDOG)使用低频参考时钟来进行计数和控制操作。

The peripheral bus clock is used for register read/write operations.

外围总线时钟用于寄存器的读写操作

ipg_clk IP全局功能时钟,作为主要的功能时钟

ipg_clk_s IP从总线时钟,专门用于寄存器操作

ipg_clk_32k 低频(32.768 kHz)时钟,在低功耗模式下提供时钟信号

Timeout event(超时事件)

The WDOG provides timeout periods from 0.5 to 128 seconds with a time resolution of 0.5 seconds

WDOG提供从0.5秒到128秒的超时周期,时间分辨率为0.5秒

The user can determine the timeout period by writing to the WDOG timeout field
(WT[7:0]) in the Watchdog Control Register (WDOG_WCR). The WDOG must be
enabled by setting the WDE bit of Watchdog Control Register (WDOG_WCR) for the
timeout counter to start running. After the WDOG is enabled, the counter is activated,
loads the timeout value and begins to count down from this programmed value. The timer will time out when the counter reaches zero and the WDOG outputs a system reset signal, WDOG_RESET_B_DEB and asserts WDOG_B (WDT bit should be set in Watchdog Control Register (WDOG_WCR))

用户可以通过向看门狗控制寄存器(WDOG_WCR)中的WDOG超时字段(WT[15:8])写入值来确定超时周期。要启动超时计数器,必须通过设置看门狗控制寄存器(WDOG_WCR)的WDE位来启用WDOG。一旦WDOG被启用,计数器被激活,加载超时值,并从该编程值开始倒计时。当计数器达到零时,计时器将超时,WDOG将输出系统复位信号WDOG_RESET_B_DEB,并断言WDOG_B(应在看门狗控制寄存器(WDOG_WCR)中设置WDT位)

the timeout condition can be prevented by reloading the counter with the new
timeout value (WT[7:0] of WDOG_WCR) if a service routine (see Servicing WDOG to
reload the counter) is performed before the counter reaches zero. If any system errors occur which prevent the software from servicing the Watchdog Service Register (WDOG_WSR), the timeout condition occurs. By performing the service routine, the WDOG reloads its counter to the timeout value indicated by bits WT[7:0] of the Watchdog Control Register (WDOG_WCR) and it restarts the countdown.
如果在计数器达到零之前执行了服务程序(参见服务WDOG以重新加载计数器),则可以通过向看门狗控制寄存器(WDOG_WCR)的WT[15:8]重新加载新的超时值来防止超时条件。如果发生任何系统错误,阻止软件服务看门狗服务寄存器(WDOG_WSR),则会触发超时条件。通过执行服务程序,WDOG将其计数器重新加载到看门狗控制寄存器(WDOG_WCR)的WT[7:0]位所指示的超时值,并重新开始倒计时。

 Watchdog Control Register (WDOGx_WCR) WDOG控制寄存器

看门狗超时字段

该字段的值为8位,表示在执行服务例程或启动看门狗程序后加载到看门狗计数器的超时时间。重置后,WT[7:0]在使能看门狗之前必须被写入一个值,否则count值为0,即0.5秒被加载到计数器中

看门狗使能位

  

Watchdog Service Register (WDOGx_WSR) WDOG服务寄存器

WSR ,16位字段,用于包含看门狗的服务序列。在超时之前,必须按照列出的顺序执行两次写入操作,但在这两次写入之间可以执行任意数量的指令。服务序列必须按照以下步骤执行:

  1. 向看门狗服务寄存器(WDOG_WSR)写入0x5555
  2. 向看门狗服务寄存器(WDOG_WSR)写入0xAAAA

Interrupt event (中断事件)

Prior to timeout, the WDOG can generate an interrupt which can be considered a warning that timeout will occur shortly.
The duration between interrupt event and timeout event can be controlled by writing to the WICT field of Watchdog Interrupt Control Register (WDOG_WICR). It can vary
between 0 and 127.5 seconds. If the WDOG is serviced (Servicing WDOG to reload the counter)before the interrupt generation, the counter will be reloaded with the timeout value WT[7:0] of Watchdog Control Register (WDOG_WCR) and the interrupt will not be triggered.
在超时之前,WDOG可以生成一个中断,这可以被视为即将发生超时的警告。
中断事件与超时事件之间的持续时间可以通过向看门狗中断控制寄存器(WDOG_WICR)的WICT字段写入值来控制。这个时间可以变化,范围在0到127.5秒之间。如果在中断生成之前对WDOG进行了服务(服务WDOG以重新加载计数器),计数器将使用看门狗控制寄存器(WDOG_WCR)中的超时值WT[15:8]重新加载,并且中断将不会触发。

Watchdog Interrupt Control Register (WDOGx_WICR) WDOG中断控制寄存器

WICT(看门狗中断计数超时字段)

WICT字段决定了在计数器超时之前多久必须发生中断。复位值是0x04,意味着中断将在超时之前2秒发生。可以编程到WICT字段的最大值是127.5秒,分辨率为0.5秒。

注意:此字段只能写入一次,一旦软件对此字段进行了写入访问,它将被锁定,并且在下一次系统复位断言之前不能重新编程。

Interrupt Generation Flow Diagram 

复位否定?(Reset Negated?):检查系统是否已经结束了复位状态。

启用中断和WDOG定时器(Enable interrupt & WDOG timer):系统复位结束后,启用WDOG的中断和定时器功能。

递减计数器(Decrement counter):WDOG定时器开始倒计时。

中断计数=0?(Interrupt count=0?):检查中断计数器是否已经达到零

触发中断(Assert interrupt):如果中断计数器达到零,中断被触发。

WDOG已服务?(Is WDOG serviced?):检查WDOG是否已经被服务(即是否已经执行了服务序列)

重新加载计数器(Reload counter):如果WDOG已经被服务,计数器将重新加载,并重新开始倒计时。

中断计数=0?(Interrupt Count=0?):在重新加载计数器后,再次检查中断计数器是否为零

Power-down counter event (掉电计数器事件)

The power-down counter inside WDOG will be enabled out of reset. This counter has a fixed timeout value of 16 seconds, after which it will drive the WDOG_B signal low.
To prevent this, the software must disable this counter by clearing the PDE bit of
Watchdog Miscellaneous Control Register (WDOG_WMCR) within 16 seconds of reset deassertion. Once disabled, this counter can't be enabled again until the next system reset occurs. This feature is intended to prevent the hanging up of cores after reset, as WDOG is not enabled out of reset.

WDOG内部的掉电计数器在复位后将被启用。该计数器具有固定的16秒超时值,超时后它将使WDOG_B信号变为低电平。

为了防止这种情况,软件必须在复位断言后的16秒内通过清除看门狗杂项控制寄存器(WDOG_WMCR)中的PDE位来禁用此计数器。一旦禁用,直到下一次系统复位发生之前,该计数器无法再次被启用。此功能旨在防止在复位后WDOG未被启用时核心挂起的情况。

Watchdog Miscellaneous Control Register (WDOGx_WMCR) WDOG杂控制寄存器

PDE(掉电使能位)

该位的复位值为1,意味着在复位后WDOG内部的掉电计数器是启用的。软件必须在复位断言后的16秒内向该位写入0以禁用计数器。一旦禁用,该计数器将无法再次启用。有关该计数器的操作,请参见掉电计数器事件。

注意:这是一个写一次有效的位。一旦软件设置该位,直到下一次系统复位之前,它不能被重置。

 Watchdog reset generation (WDOG复位产生)

The WDOG generated reset signal WDOG_RESET_B_DEB is asserted by the following operations: • A software write to the Software Reset Signal (SRS) bit of the Watchdog Control Register (WDOG_WCR). • WDOG timeout. See Timeout event.

WDOG生成的复位信号WDOG_RESET_B_DEB通过以下操作被断言:

  • 向看门狗控制寄存器(WDOG_WCR)中的软件复位信号(SRS)位进行软件写入。
  • WDOG超时。参见超时事件。

无论是由于超时条件还是软件写入事件,wdog_rst都将在低频参考时钟的一个时钟周期内被断言。即使在其间断言了系统复位,它也将保持在一个低频参考时钟周期内断言状态。

Watchdog Control Register (WDOGx_WCR) WDOG控制寄存器

软件复位信号(SRS)位

SRS位允许软件控制WDOG复位信号的断言。当SRS位被写入0时,它会触发WDOG_RESET_B_DEB复位信号,导致系统复位。写入0后,SRS位会自动恢复到1,这是它的默认状态,此时对系统没有影响。

 WDOG timeout condition/WDT bit is not set

结语: 

无论你是初学者还是有经验的开发者,我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用,不妨点击收藏,或者留下你的评论分享你的见解和经验,也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持,也是对我持续分享和创作的动力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值