独立看门狗(IWDG)还是窗口看门狗(WWDG)?

电器工程 微控制器 stm32 看门狗
2022-01-10 10:05:08

我仍在寻找这个问题的答案:

为什么 stm32 MCU 有一个完美的看门狗(我的意思是窗口看门狗(WWDG)),但有一个简单的看门狗(独立看门狗(IWDG))?

我发现这个页面说:

ST Microelectronics 拥有一系列 Cortex-M3 设备。M3 在低端嵌入式设备中非常流行,ST 的 STM32F 就是这些部分的代表(尽管 WDT 是 ST 的附加组件,不一定反映其他供应商的实现)。STM32F 有两种不同的保护机制。“独立看门狗”是一种非常普通的设计,除了易用性之外几乎没有什么用处。但是他们的窗口看门狗提供了更强大的保护。当倒计时定时器到期时,会产生复位,这可以通过重新加载定时器来阻止。那里没什么特别的。但是如果重新加载发生得太快,系统也会重置。在这种情况下,“太快”是由编程到控制寄存器中的值决定的。

另一个很酷的功能:它可以在复位之前产生一个中断。编写一些代码来阻止中断,您可以采取一些措施,例如,将系统置于安全状态或快照数据以进行调试。ST 建议使用 ISR 重新加载看门狗——也就是说,踢狗,这样就不会发生复位。不要听从他们的建议。如果程序崩溃,中断处理程序很可能会继续正常运行。并且使用 ISR 重新加载 WDT 会使窗口看门狗的全部原因无效。

_

STMicroelectronics 的新系列 STM32F4 Cortex™-M4 CPU 具有两个独立的看门狗。一个从它自己的内部 RC 振荡器运行。这意味着各种事情都可能在 CPU 中崩溃,而 WDT 仍然会触发。还有一个“窗口看门狗”(WWDT),它要求代码经常对它进行挠痒痒,但不要太频繁。这是一种非常有效的方法,可以确保随机写入保护机制的崩溃代码不会导致 WDT 抖动,并且 WWDT 可以在复位被断言之前不久产生中断。

好的,让我们看一下参考手册

STM32F10xxx 有两个嵌入式看门狗外设,提供高安全级别、定时精度和使用灵活性的组合。两个看门狗外设(独立和窗口)用于检测和解决由于软件故障引起的故障,并在计数器达到给定超时值时触发系统复位或中断(仅限窗口看门狗)。独立看门狗 (IWDG) 由其自己的专用低速时钟 (LSI) 提供时钟,因此即使主时钟出现故障也保持活动状态。窗口看门狗 (WWDG) 时钟从 APB1 时钟预分频,并具有可配置的时间窗口,可对其进行编程以检测异常延迟或早期的应用程序行为。IWDG 最适合需要看门狗作为主应用程序之外的完全独立进程运行的应用程序,但具有较低的时序精度约束。WWDG 最适合需要看门狗在准确的时序窗口内做出反应的应用。

窗口看门狗用于检测软件故障的发生,通常由外部干扰或不可预见的逻辑条件产生,导致应用程序放弃其正常顺序。看门狗电路在编程的时间段到期时生成 MCU 复位,除非程序在 T6 位被清除之前刷新递减计数器的内容。如果在递减计数器达到窗口寄存器值之前刷新 7 位递减计数器值(在控制寄存器中),也会产生 MCU 复位。这意味着必须在有限的窗口中刷新计数器。

如您所见,他们都没有说过为什么有两个看门狗。如果我问这两个看门狗有什么区别,您将计算上面可以看到的所有功能,如果您想比较两者,显然 Window 看门狗 (WWDG) 将是赢家!那么为什么会有两个看门狗呢?

我想知道什么时候应该使用 IWDG,什么时候使用 WWDG?

有什么理由说我们为什么用这个名字来称呼第二只手表->“窗口看门狗”?

4个回答

常规看门狗定时器必须在超时前的某个时间重置。如果你有一个 100ms WDT,你可以每 99.9ms 或每 10us 重置一次,它永远不会超时。

窗口看门狗定时器有一个时间窗口,在这个窗口内它们必须被重置。如果你太早或太晚重置它(从之前的重置),它会导致处理器重置。

目的(如果不是很明显)是帮助确保重置 WDT 的代码是预期的代码,以预期的方式运行。产生高频 WDT 复位的某种不可预见的情况不会阻止系统复位。

从系统时钟运行 WDT 可能会有点问题 - 如果时钟出现故障并且没有独立的时钟监控电路,则可能会发生不好的事情。WDT 的独立时钟意味着如果事物由于某种原因开始以 1/10 速度运行,WDT 将重置(但窗口 WDT 不会)。

如果可以的话,两者都用。

正如页面所说,使用 ISR 重置 WDT 通常是不好的 juju(但如果 ISR 在重置计时器之前验证固件的重置正在运行,则可能是可以接受的)。

您粘贴到问题中的文本给出了您需要的答案。

  1. 当您需要一个简单的看门狗或需要一个完全独立的看门狗时,您可以使用 IWDG - IWDG 有自己的时钟,WWDG 从其中一个总线时钟中获取其时钟 - 如果它失败或您的软件将其关闭,那么看门狗就会死掉。
  2. 当您需要一个只能在特定时间跨度(窗口)内重置的看门狗时,您可以使用 WWDG。如果您的软件太迟重置 WWDG,那么 WWDG 将触发处理器的重置。如果您的软件过早重置 WWDG,那么它也会导致处理器重置。

它被称为“窗口看门狗”,原因很简单,只有在指定时间段(机会窗口)内重置看门狗才能阻止看门狗重置您的处理器。

两者都做类似的工作,但他们做的事情不同。您需要哪个取决于您必须满足的要求。

使用窗口看门狗还有另一个原因,可以代替独立看门狗,或者除了独立看门狗之外。WWDG 有一个可以挂钩的中断。这意味着,如果代码进入循环或赋格,您可以在 WWDG ISR 中设置断点,然后向后工作以找出当狗吠时固件在做什么。

您无法使用 IWDG 执行此操作。顾名思义,这与处理器无关。它没有引发中断,而是简单地断言和取消断言 /RESET - 这并没有为您提供很多关于它为什么吠叫的线索。我强烈建议在您的正常操作参数范围内设置一个 WWDG,再加上一个更长的 IWDG,也许最大 2* WWDG。创建一个可以同时踢的踢狗功能。这样,IWDG 仅在 WWDG 也锁定时才会吠叫,作为最终备份。

我的看法:

同时使用两者,因为它们寻找不同的失败条件:

独立看门狗 (IWDG) 定时器需要在超时前不断复位在实践中,您可以在具有有效程序状态的任何地方添加重置代码,或者如果您有一个应该频繁执行而没有任何重大延迟的主循环,则可以在主循环中添加一次。这样,如果您对重置计时器的调用(有时称为“抚摸”、“搔痒”或简单地“重置”“看门狗”)没有及时发生,则意味着您的代码要么A) 意外卡住在你没有预见到的地方——某种不可预见的无限循环类型状态,或者B) 故意卡在你通过一个强制执行的地方assert()带有嵌入式无限循环的函数调用,当某些重要条件不成立时,您希望代码转到该无限循环。因此,既然您的断言条件为假,您的代码就会故意陷入无限循环,并且看门狗会重置微控制器以使其恢复到有效状态。另请注意,“独立看门狗 (IWDG) 由其自己的专用低速时钟 (LSI) 提供时钟,因此即使主时钟出现故障也保持活动状态”(参见ST RM0008 参考手册 p493)。

然而,在我看来,Window Watchdog (WWDG) 计时器的设计不是为了寻找上述情况(您的代码无意或有意 [通过断言] 被“卡在”某处),而是更具体地针对以下情况A)您的代码没有执行它应该执行的操作。换句话说,它有一个错误导致它的主循环或其他代码小节执行得太快(或被完全跳过),所以你太早地重置了看门狗,在它的窗口之外,并且 mcu 被重置。或者,B)它可以发现的另一种情况是计时器设置失败。也许您正在以固定的时间间隔重置它,但是用于创建此时间间隔的计时器要么在不应该更改的地方意外更改了其配置,要么一开始就错误配置了它,那么时间间隔将关闭,您的固定时间间隔重置将在其窗口之外重置 WWDG(太早或太晚),并且重置 mcu 以通知您和/或修复条件。

这是我的看法。欢迎提出想法或反馈。