Answers:
有些产品必须满足制造商确定的安全要求,或者满足国际安全标准,例如IEC 60730-1,或者仍在美国使用的较旧的UL1998。任何给定的微控制器中的内部看门狗功能可能或可能不足以使用。在某些情况下,可以将外部WDT与内部WDT结合使用。
诸如TI的Hercules系列之类的某些微控制器非常重视安全性至关重要的系统应用,并且更有可能满足严格的要求,但是它们可能不适用于对成本敏感的应用。
通常,WDT是减少故障可能性而导致财产损失或生命损失的多种方法之一。通常将其他功能(例如,用于检测对MCU内存的意外访问的内存保护或从未使用的内存中提取程序)与WDT结合使用。
执行安全关键功能的廉价产品的例子有汽车子系统,车库门控制器和用于熔炉,干燥机和热水器的气体(天然气或丙烷)点火控制器。当然,许多医疗和航空航天产品对安全性也很重要,但是可能有足够的空间用于冗余和其他方法。在某些情况下,例如在飞机上可能没有容易达到的安全状态。
理想情况下,看门狗定时器非常简单,与MCU无关(例如,它应该有自己的时钟源,也许还有时钟监视器),不能(通过软件)设置为更长的时间,而不会由于任何软件错误而造成损坏,如果超时或以窗口方式未按时“请求”,将使系统进入安全状态,因此可以检测到过于频繁的重置。例如,热控制应用中的WDT可能会设置为几秒钟,因为如果微控制器在该时间段内锁定,则不会造成任何损坏。
WDT作为系统级可靠性和安全性方法的一部分,最有用。
很难争论的是,内部看门狗的内部时钟实际上独立于所有其他时钟,并且始终按应有的方式运行。
因此,为了进行认证,通常更容易在板上放置一个外部看门狗,然后说:看有我们的看门狗,它必须由MCU在该间隔内触发,该间隔比我们的故障时间短,因此我们的设备是安全的正如我们定义的那样。
解决一些意见:
“并且总是像应该的那样运行”-好点。与仅使用看门狗芯片并参考其数据表相比,很难证明您的软件在所有情况下都能正确初始化内部看门狗。
通常可以通过故障插入测试来证明这一点,您可以将其提交给认证机构。因此,您向他们展示了初始化发生在哪里以及看门狗触发发生在哪里的代码。他们通常会要求您以某种方式修改代码,以便在经过一定时间后停止看门狗的触发,并检查控制器是否已正确重置。
或证明您的代码不包含会意外禁用内部看门狗的错误。
至少在某些控制器上,看门狗被称为独立的,并具有自己的时钟源,并且不能通过软件手段禁用,只有复位控制器才能禁用看门狗。至少从理论上讲,很容易证明您无法通过软件来停止时钟,但是很难证明时钟是真正独立的并且不会在EMI下停止。
或者为了证明您的代码不会运行异常,请尽可能快地连续重置外部看门狗。问题解决了。;-)
在这种情况下,您需要使用窗口看门狗,该窗口看门狗必须在一定的间隔内触发,如果这样做失败(触发次数过多或过少),则会重置电路。我正在使用的STM32有一个内部窗口看门狗,但是它运行于从主时钟派生的PCLK1上,因此我认为它不像具有自己的时钟源的外部看门狗那样有用。
或某些天才没有将看门狗服务例程放入计时器ISR中,因此主代码可能会崩溃,但中断会继续触发和维护看门狗...
的确是这样,但是希望能有一个天才回到他的椅子上-但是,当我刚开始的时候,那也是我的第一个想法:D。在我参与的认证过程中,他们始终关注软件的看门狗部分。
微控制器内置的看门狗具有特殊的属性,这意味着它们本身可能会以其他外部看门狗可能不会发生的方式发生故障。
例如,一种常见的设计是使用从低功耗RC振荡器运行的看门狗定时器。该振荡器可能会失败。在许多情况下,基于电容器放电而非振荡器的外部看门狗仍可以使微控制器复位。
另一个原因是外部看门狗可以更强大。微控制器可能只能在一定的电压范围内可靠地运行,并且作为复杂的设备可能会以使其自身内部看门狗无效的方式被闩锁。外部看门狗可能具有更宽泛的可接受电源范围,并且在遭受电噪声时不太可能出现问题。
外部看门狗通常也提供更大范围的超时值。我经常使用的微控制器XMEGA的最大超时时间约为7秒。对于一个产品,我添加了一个额外的外部看门狗,超时时间为2小时。这使我每小时可以唤醒微控制器一次,而不是每隔几秒钟一次,从而减少了电池供电设备的功耗。
外部看门狗有时具有多种功能,例如计时器和电压监控器/复位控制。同样,它们也可以比微控制器的内置系统低功耗。
外部看门狗的另一个有趣的优点是,它可以用于复位微控制器以外的设备。例如,它可以控制稳压器的使能引脚,从而使整个电路断电,以立即重置多个设备。使用一些简单的逻辑,可以组合来自多个源的看门狗复位信号,从而允许看门狗需要多个设备对其进行连续复位。
在这方面,看门狗与您在MCU中找到的任何其他内置外设实际上并没有什么不同。MCU带有定时器,RTC,ADC,EEPROM和复位控制器,但所有这些功能也作为独立的IC存在。如果可用的内置块不满足您的要求,则必须使用外部块。或者,您可以尝试找到具有所有正确功能块的MCU,这些功能块可能不存在,或者过于昂贵或难以移植代码。