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


15

我仍在寻找该问题的答案:

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

我发现此页面说:

意法半导体(ST Microelectronics)拥有一系列Cortex-M3器件。M3在低端嵌入式设备中已变得非常流行,ST的STM32F代表了这些部分(尽管WDT是ST的附加组件,并不一定反映其他厂商的实现)。STM32F具有两种不同的保护机制。“独立看门狗”是一种漂亮的香草设计,除了易于使用之外,几乎没有其他用途。但是他们的Window Watchdog提供了更强大的保护。当倒数计时器到期时,将产生复位,可以通过重新装入计时器来阻止复位。没什么特别的。但是,如果重新加载太快,系统也会重置。在这种情况下,“太快”由一个值编程到控制寄存器中。

另一个很酷的功能:它可以在重置之前生成中断。编写一些代码来捕获中断,您可以采取一些措施,例如,将系统置于安全状态或快照数据以进行调试。ST建议使用ISR重新加载看门狗-即,踢狗以免复位。不要接受他们的建议。如果程序崩溃,中断处理程序可能会继续正常运行。使用ISR重新加载WDT会使窗口监视程序的全部原因无效。

这个

意法半导体的新系列STM32F4 Cortex™-M4 CPU具有两个独立的看门狗。一个由其自身的内部RC振荡器运行。这意味着各种事情都可能在CPU中崩溃,并且WDT仍然会触发。还有一个“窗口监视程序”(WWDT),它需要代码频繁但不频繁地对其进行挠痒痒。这是确保随机写入保护机制的崩溃代码不会引起WDT异常的一种非常有效的方法,并且WWDT可以在断言复位之前不久产生一个中断。

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

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

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

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

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

并有什么理由告诉我们为什么他们用这个名字叫第二只手表->“ Window watchdog”?

Answers:


23

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

窗口看门狗定时器具有一个必须重设的时间窗口。如果重置得太早或太晚(从上次重置开始),将导致处理器重置。

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

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

如果可以,请同时使用两者

就像页面上所说的那样,用ISR复位WDT通常是不好的做法(但是,如果ISR在复位计时器之前验证固件的复位功能正常,则可以接受)。


确实系统时钟可能发生故障吗?如果发生了,那么我们可以理解。因此,WDT没有用,对吗?那为什么会担心呢?
Roh 2014年

1
如果独立的WDT时钟迫使MCU进入复位状态(并且该状态是安全的),则可以避免灾难。早期,MCU晶体短路导致严重事故(BART,IIRC)。
Spehro Pefhany 2014年

1
@Roh:我实际上已经看到在这个处理器上进入睡眠模式后,系统时钟无法恢复(嗯,是STM32 F0,它是M0)。事实证明,当您在某些时间执行某些操作时,PLL时钟可能无法启动,并且整个操作以1/6的速度运行。
Nathon 2015年

@Nathon谢谢。有趣。我完全讨厌M0系列。听起来每个STM系列都有问题。
Roh 2015年

7

您粘贴到问题中的文本将提供您所需的答案。

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

之所以称为“窗口看门狗”,是因为仅在指定时间段(机会窗口)内重置看门狗会阻止看门狗重置处理器,原因很简单。

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


请阅读我对Spehro Pefhany的评论。
Roh

1
WWDG使用的计时器是可编程的-您可以通过软件更改其速率。如果您的软件失控并更改了APB1速率,则时间窗口将不正确,看门狗将不断重置处理器-您的看门狗踢脚将永远不会(或仅出于巧合)在正确的时间踢看门狗。您的程序可能还可以完全禁用APB1时钟或WWDG计时器,在这种情况下,它将永远不会重置处理器。
JRE

5

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

您无法使用IWDG进行此操作。顾名思义,这与处理器无关。它不会引发中断,而只是声明和取消声明/ RESET-并没有为您提供有关为什么咆哮的任何线索。我强烈建议您在正常的操作参数范围内设置WWDG,并在更长的时间内加上IWDG,最大为2 * WWDG。创建一个踢狗功能,将两者踢。这样,IWDG仅在WWDG也锁定时才发出吠叫,作为最终备份。


1

我对此:

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

独立看门狗(IWDG)定时器需要不断前时间复位输出。实际上,您可以仅在具有有效程序状态的任何位置添加重置代码,或者在主循环中添加一次重置代码,前提是该主循环应该频繁执行而没有任何重大延迟。这样,如果您没有及时重置计时器(有时称为“ petting”,“ tickling或简单地” reset”“看门狗”)调用,则意味着您的代码A) 意外卡住了您未预见到的地方-某种无法预见的无限循环类型状态,或B) 故意卡在您通过assert()带有嵌入式无限循环的函数调用,当某些重要条件时,您希望代码进入该循环)。真正。因此,既然断言条件为假,您的代码将有意陷入无限循环,并且看门狗将微控制器重置为使其返回有效状态。另请注意,“独立看门狗(IWDG)由其自己的专用低速时钟(LSI)提供时钟,因此即使主时钟出现故障,它也保持活动状态”(请参阅ST RM0008参考手册p493

但是,在我看来,Window Watchdog(WWDG)计时器旨在不针对上述情况(您的代码无意或有意(通过断言)“卡在”某处),而是更具体地针对以下情况:A)您的代码未执行执行的操作。换句话说,它存在一个故障,导致其主循环或其他代码部分执行得太快(或被完全跳过),因此您过早地在其窗口之外重置了看门狗,并且重置了mcu。要么, B)它可以发现的另一种情况是计时器设置失败。也许您以固定间隔重置它,但是用于创建此间隔的计时器要么意外更改了它不应该配置的配置,要么首先配置错误,然后关闭了时间间隔,这是固定的时间间隔重置将重置WWDG在其窗口之外(太早或太晚),并且MCU会重置以通知您和/或解决问题。

这是我的看法。欢迎有任何想法或反馈。


0

“窗口式”看门狗只是一个常规的看门狗,它可以保护某些程序甚至更差的编程实践。就像其他人说的那样,您有一个“时间范围”,通常在应提供“饲料”的地方可以调整。

如果您的代码可以进入自动持续循环,则它们都不是防弹的。例如。如果您打算基于与计时器相关的IRQ“馈送”,这可能是非常糟糕的做法,因为您的代码可能会在邮件线程中执行某些操作,而中断仍会按正确的顺序馈送您的WWDT。

实际上,如果可以像在MIPS(Microchip)上一样在常规执行代码下降低IRQ优先级,则可以使用中断来馈送WWDT

如果您的代码是生命支持,关键代码等,则只需删除所有代码并使用外部WDT(最好是基于Q&A)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.