看门狗功能在MCU中的设计应用

描述

由于多线程、实时和多任务嵌入式系统的情况纷繁复杂,使我们越来越难以预料微处理器会在什么时候出现问题。 在某种程度上独立运行的服务程序是如此之多,其中一些很有可能会生存下来,而其它的则被锁定、废弃或者执行无用代码。

因此,嵌入式系统设计人员要在一些低级别服务程序或者内核出现偏差时保护整个系统并防止出现故障,现在已是难上加难。

本文介绍看门狗功能的发展需要,且技术工程师们能通过这些功能确保 MCU 可靠工作。 本文将详细考察需要在硬件中从外部、在软件中从内部克服的不足之处,并介绍一些看门狗零件样件。 

简单保护

从 4 位到至高级的 32 位及以上的机器都需要有看门狗功能。 在潜在危险情况下工作的简单处理器不在少数。 例如,一个节流阀控制回路仅需一个简单的 8 位混合信号微控制器,以本地方式实现稳定的闭环控制。 该控制器能够在车辆 CAN 总线上接受指令,从远程车载电脑卸载全部处理任务。 然而,如果这个简单的处理器出现故障,那么整个节流阀将起不到任何作用。

可以肯定地说,几乎每一个现代微控制器都具有一些简单的看门狗功能——专门的看门狗硬件块或者能够用来执行软件控制型看门狗功能的定时器。 这些设备均与处理器中的系统时钟实现了同步。

随着处理器越来越复杂,处理器内部的时钟结构和时钟分布也更加复杂。 振荡器特别容易遭受 ESD 冲击,例如,如果时钟性能下降,同步看门狗将毫无用处。

R/C 振荡器和时间常数虽然保守,但能提供独立时钟机制和复位机制,作为应急或后备之用。 同样,冗余型内部和外部振荡器源能实现某种形式的心跳效果,以确保在严重故障期间监视电路。 此外,可选择的时钟集成性与结构树中的时钟位置同样重要(图 1)。

mcu

图 1:系统时钟和后备 R/C 振荡器组合在一起可节省功耗,并能在系统时钟崩溃时提供一个可靠独立的后备时钟,确保看门狗功能正常。 请注意此处两个 R/C 振荡器的使用方式。

对于低压检测电路来说,也是如此。 虽然采用内部电压基准、比较器和检测器能够实现基本精度,但通过外部电路可实现更高的分辨率和更精确的电压电平选择性。 例如,如果您的部分电压故障模式软件包括写入 EEPROM 功能,您可能希望低压检测器阈值提早跳变,以使容性电荷存储器有足够的时间在按顺序关断之前执行 EEPROM 写入功能。 现代电压检测器能够达到低至 0.05 V 的电压分辨率,以便精确使用所有能量。 通常,这个分辨率要远胜于您利用微控制器从内部实现的分辨率。

还需要了解的一点是单独的最大超时并非始终有效。 大多数看门狗解决方案基本上在执行一个可再触发式单稳态多谐振荡器(可再触发式单触发)的功能。 如果软件或者硬件周期时钟不能在最大允许时间帧内使定时器复位,看门狗跳变并会使处理器复位(或者启动故障恢复服务程序)。

最小时间要求也应考虑。 例如,如果一个服务程序与 60 Hz 电源线的过零点同步,那么脉冲间隔应是 8.33 ms。 如果这些脉冲过早达到,则必须克服通常会影响安全的噪声或者故障条件。

多处理器和多核设计的情况特殊。 应对单独的看门狗进行设置,以利用当时在每个理器中运行的唯一代码条件来监视这些处理器或内核。 也就是说,针对多核环境中某个内核的部分软件开发应带有能指示特定代码块故障的看门狗条件。

此外,看门狗报告应采用层级结构。 每个内核应向更高层级的看门狗报告,该看门狗把由所有子核和流程报告的全部故障模式联系在一起。 作为一个高层级系统功能,看门狗执行程序与为特定内核分配代码块的主任务执行程序同步工作。 另外,也与外部看门狗系统密切合作。

线或类型多看门狗模功能块能很容易地进行扩展,以使用特定于某个内核的 I/O 进行报告(图 2)。 该功能块可以是 FPGA 或者 CPLD 中的独立逻辑块,且易于扩展,能应对多个处理器和功能块。 寄存器能够累加所有报告功能块的独立状态,以试图单独恢复那个内核。 如您所想,这个层级的恢复程序会变得更复杂,就像在保持系统其余部分运行的同时重新启动内核那样。

mcu

图 2:看门狗层级结构的顶层能使用可扩展线或功能,以使所有微处理器或内核能按照各自的速率进行报告。 每个“单触发”都应允许受其监视的进程按持续间隔进行编程。 每个代码块均携带看门狗参数。

具有特殊看门狗功能的零件

在涉及到如何实现看门狗功能时,有多种微处理器具有唯一或不同的功能。 以 16 位 Maxim MaxQ 系列微控制器为例,为提升有用性,该系列将类型丰富而灵活地定时器和设计巧妙的电路组合在一起。 象 Maxim MAXQ2000-RBX+ 这样的零件具有次级报警。 如果没有报警且 MAXQ2000 的看门狗 (WTD) 发生溢出,那么,再次经过另外 512 个系统时钟周期计数后该微控制器会触发一个中断。 然后,如果未被禁用或覆盖,它会使全部定时器复位。

这种中断为保存调试信息提供了“最后的机会”——一个得到了大多数设计人员的一致认可、在电路开发、故障清除期间非常有用的机会。 而且,该中断可用于将看门狗从错误中恢复并将其清空,而不是保存调试信息。 然而,后一种方法在系统发生故障时会削弱系统可靠性。

与其它内部 WDT 类似,MAXQ2000 的看门狗可通过软件禁用。 不过应当注意,这种功能就像一把双刃剑:失控代码禁用看门狗后仍处于失控状态。

一些微处理器的 WDT 会与独立于系统时钟的内部振荡器连接。 还有一些微处理器使用内部或外部 R/C 振荡器,有的同时使用这些振荡器。 Maxim MAXQ2000 的 WDT 上有一个令人感兴趣的功能:虽然从系统时钟驱动看门狗定时功能,但能在主振荡器故障时切换至备用振荡器。

另一种让人关注并具有独特看门狗功能的 MCU 便是采用两个看门狗定时器的 STM32F100 系列(由 STMicroelectronics 提供)。 象 STM32F100CBT6B 这样的零件均针对要求高可靠性的智能电网和智能健康应用。 同大多数微处理器一样,该器件也采用了多个定时器(此处为六个),且另外有两个 16 位定时器专用于看门狗功能。

每个看门狗都具有一个为看门狗定时器提供时钟的可选择预分频器 (1 - 64 K),同时还能触发 DMA 请求并捕获比较通道。 另一种独立的看门狗基于一个 112 位下变频器和 8 位预分频器,并采用独立的 40 kHz 内部 R/C 振荡器提供时钟。 注意这两种零件如何依赖 R/C 元件,将其作为超可靠的后备技术。

STMicroelectronics 零件吸引人的一个特性就是模拟看门狗功能。 对经过 A/D 转换的一个或两个电压电平进行精确监视,能在模拟电平超过预设阈值时使复位跳变。 对于那些通过传感器与人体局域网连接且用于健康监视或主动给药的医疗应用,该功能会非常有用(图 3)。 为方便设计,STMicroelectronics 向工程师们提供有关健康和医疗保健设计的产品培训模块。

mcu

图 3:随着医疗设备越来越积极地与我们的人体局域网集成在一起,一些设备(心脏起搏器、除颤器、胰岛素泵等)在维持人的生命中可能会发挥至关重要的作用。 需要在这些系统中集成可靠的看门狗。

由外向内看

许多好的构造块外部解决方案包括简单的 R/C 阈值发生器、偏置晶体管、低功耗定时器,以及专用上电复位和看门狗协处理器。 此外,现在已有可用的开发环境,鼓励人们进行实验和简化测试。Texas Instruments 利用其 TPL5000 毫微功耗可编程定时器提供了一种令人感兴趣的解决方案,该方案在 1.8 - 5 VCC 宽电压范围内的电流消耗仅 30 nA。 TPL5000EVM 评估套件能让您在一个小而精致的自足式模块中测试、优化该功能。

目前,已有多种分立式看门狗可与其它有用的功能组合在一起,如实时时钟 和 监视功能。 Lattice Semiconductor 提供了一个值得关注的组合品,带有其 ISPPAC-POWR607-01SN32I 电源监控器、看门狗和复位发生器(图 4)。 请注意 1% 的模拟跳变点步长值以及用于状态机和组合式定制的在系统编程宏单元。

mcu

图 4:利用在系统用户可编程参数,可通过使用组合式和基于状态机的用户可配置逻辑,实现看门狗功能的动态确定。

总结

谨记有时候做何事情都无助于系统恢复。 有些故障是不可恢复的。 例如,如果系统存储器崩溃,那么就再没有什么可值得信任了。

另一种情况是如果存在很高级别的噪音。 即使看门狗使处理器复位,这种噪声仍能影响处理器的看门狗级初始化。 如果看门狗功能未被初始化,看门狗就如形同虚设。

任何人都不能指望任何 MCU 在任何时候都能百分之百无故障运行。 微处理器也可能出错。 然而,是仅出现轻微故障,还是灾难性财产损坏或者甚至死亡,关键在于能否合理使用内外资源。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分