物联网 (IoT) 设计非常重视安全性,却往往忽视了另一方面的重要性,即开发足够稳健的系统,无需人工干预系统也能从故障自动恢复。 为确保这种稳健性,设计人员应该仔细研究普通的看门狗定时器 (WDT),目前这种设备各种各样,从简易型,到集成智能型,不一而足。
本文首先回顾内外部 WDT 的基本原理,然后介绍部分最新款的 WDT 设备,以及如何使用它们以确保系统稳健性。
为何看门狗定时器对 IoT 至关重要
在系统现场部署了数十亿个 IoT 设备的情况下,如果发生故障,技术人员不可能及时进行维修。 因此,IoT 系统必须能够自动检测故障并从中恢复,而无需任何人工干预。
看门狗具备多种不同的形状和尺寸,但通常可分为简易定时器、窗口式定时器和智能电子狗三种类型。 看门狗可作为硬件和软件用于微控制器内部,也可作为硬件用于微控制器外部,甚至还能够与硬件和软件元器件集成,用作独立的微控制器。 总而言之,不论是采用哪一种看门狗解决方案,唯一的目的都是监视和恢复系统。 为此,设计人员需要考虑各种看门狗的独特性能和设计挑战,以确保稳健的 IoT 系统设计。
内部看门狗基本原理
内部看门狗定时器属于硬件外设,几乎是所有单片微控制器的一个组成部分,可与板载外设和系统时钟进行交互(图 1)。 默认情况下,内部看门狗定时器设置为禁用。启用看门狗之前,开发人员需要设置预定义周期。 如果软件锁定,或出现影响软件运行的硬件故障,看门狗定时器将超时,并强制微控制器复位。 在此过程中,看门狗定时器将清除错误,并允许微控制器重新初始化系统。
图 1: 看门狗定时器包含在大多数微控制器中,例如 Texas Instrument 的 MSP430G2210,并且可在软件锁定时复位处理器。 (图片: Texas Instruments)
内部看门狗定时器虽然原理简单,但如果要正确执行,却需要花费很多心思。 例如,专为看门狗开发的软件不能简单地将看门狗定时器盲目清零。 该软件应该在清零看门狗之前,对系统执行检查,以确保所有任务和硬件都正常工作。
在开发内部看门狗解决方案时,开发人员应该尝试采纳下列几项建议:
- 切勿出于任何原因禁用看门狗。 事实上,在选择微控制器时,应确保看门狗一旦启用之后,就无法再被禁用。
- 切勿在周期性中断期间,在未进行软件功能检查的情况下对看门狗清零。
- 确保看门狗定时器为独立的看门狗。 独立的看门狗具有单独的时钟,能够检测系统时钟是否已停止。
- 使用具有窗口式看门狗特性的看门狗。 这类看门狗需要等待一段最短时间后才能被清零。 如果在窗口启动前尝试清零,看门狗将进行系统复位。 这样可防止失控软件超驰看门狗计时器。
内部看门狗朝着建立稳健的嵌入式系统迈开了重要的一步,但其本身并未提供一个非常稳固的解决方案。 要真正提高稳健性,开发人员需要考虑外部看门狗。
使用外部看门狗增强稳健性
无论开发人员在内部看门狗实施过程中如何谨慎细致,内部看门狗都无法始终万无一失。 许多实施都存在缺陷,共享系统时钟和设有禁用选项就是其中两个例子。
当系统需要在现场自行工作时,使用外部看门狗可带来诸多优势,例如:
- 执行硬件系统复位,以确保重新启动微控制器电源,进而重新启动内部外设电源。
- 将看门狗与微控制器振荡器电路分离。
- 为监视系统提供一个完全独立的进程。
所有这些优势都有助于实现系统的稳健性,但使用外部 WDT 仍然存在少许不足。 其中包括因增设 IC 引起的硬件成本增加,以及系统复杂性提高。 然而,正如我们所见,综合所有考虑因素时,这些缺陷都显得微不足道。 现在,我们来检验如何设计一个简单稳健的外部看门狗电路(图 2)。
图 2: 示例外部看门狗电路监视微控制器的特性和状态,而微控制器具有自己的内部看门狗定时器。 (使用 Digi-Key Scheme-it® 绘制的示意图)
该电路由一个微控制器和一个外部看门狗电路构成,其中微控制器运行自己的内部看门狗定时器。 在此示例中,看门狗电路是一个具备看门狗功能的 Texas Instruments TPL5010 毫微功耗系统定时器。 外部看门狗具有一个输出复位引脚,直接与微控制器复位引脚连接。 当切换 WAKE 引脚时,TPL5010 会在 DONE 引脚上发出 heartbeat 等待微控制器响应。 如果微控制器无响应,复位线将拉低,以复位微控制器。 看门狗周期通过调节 R2 进行设置。
在设计中增设下列这种简单的低成本电路,是提高系统稳健性的绝佳途径。 开发人员甚至无需等待开发板旋转即可开始检测。 TPL5010 开发套件可轻松与其它开发套件进行搭配来测试看门狗的功能,而不必长时间等待可用的硬件。(图 3)。
图 3: Texas Instruments TPL5010 开发板的成本低于 30 美元,提供的针座不仅能够连接微控制器进行测试,还可用于配置 TPL5010 及测量其电流消耗。 (图片: Texas Instruments)
在选择外部看门狗时,开发人员需要考虑若干因素,例如:
- 最小和最大超时周期
- 支持窗口式看门狗
- 电流消耗
- 最大程度减少引脚数
- 潜在故障模式(如有)
设计智能看门狗解决方案
适用于 IoT 设备的最佳看门狗是智能看门狗。 智能看门狗是一种监控型微控制器,除了能够执行基本的 heartbeat 监测,还可监视系统通信(图 4)。 有时,微控制器停止响应互联网,但仍然能够成功清零外部看门狗。 在这种情况下,互联网会发送微控制器的复位指令。 智能看门狗可监视通信线路,例如 UART 发送和接收线路,以发现要求其重启系统的特殊指令。
在此示例中,通信模块同时连接微控制器和智能看门狗。 请注意,智能看门狗也配有外部 TPL5010。 原因在于,智能看门狗是运行软件的微控制器,为了确保稳健性,必须具备自己的外部看门狗。
图 4: 智能看门狗系统架构示例。 (使用 Digi-Key Scheme-it 绘制的示意图)
在设计智能看门狗,开发人员需要考虑几个重要因素,例如:
- Heartbeat 特性
- 输入/输出利用率
- 成本
- 可用闪存
- 能量消耗
- 故障模式
- 最大程度降低物理基底面
目前市场上已推出几款可作为优异智能看门狗使用的微控制器。 第一款是 Texas Instruments MSP430G2xx,具有 2 kB 闪存和 4 条 I/O 线路。 这款微控制器具备恰到好处的足够编码空间和引脚数,可开发为极其简单的智能看门狗。
对于需要通信监视功能的应用来说,增加 I/O 线路和提供额外存储器的方法非常实用。 在这些情况下,MSP430G2231IPW14R 或 MSP430G2553IPW20R 将会是理想选择。
虽然如此,但真正实现看门狗“智能性”的是智能看门狗软件,这对开发人员来说,既是需要关注的重点,也是编写一行行代码的切入点。 需要注意的是,代码不需要很复杂,事实上,越简单越好。 成熟简单的小型软件最适合看门狗。 以下所示为 MSP430 的简单代码示例(代码列表),源自 TPL5010 评估模块文档:
static volatile bool Reset = true;
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
P1OUT |= BIT0; // Set P1.0 to high
P1DIR |= BIT0; // Set P1.0 to output direction
P1DIR &= ~BIT1; // Set P1.1 to input direction
P2IES &= ~BIT0; // P2.0 Lo/Hi edge
P2IFG &= ~BIT0; // P2.0 IFG Cleared
P2IE |= BIT0; // P2.0 Interrupt Enabled
while(1)
{
__delay_cycles(500000); // Set Delay
// If true then the heartbeat was not received
if(Reset == true)
{
// The heartbeat was not received. Reset the processor
P1OUT &=~ BIT0;
__delay_cycles(100); // Set Delay
P1OUT |= BIT0;
Reset = false;
}
else
{
Reset = true;
}
}
}
// Port 2 interrupt service routine
#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void)
{
P2IFG &= ~BIT0; // P2.0 IFG Cleared
P2IE |= BIT0; // P2.0 Interrupt Enabled
Reset = false;
}
代码列表: 监视微控制器 heartbeat 的 MSP430 软件示例。 如果未在预期时间内接收到 heartbeat,微控制器将复位。 (来源: 源自 Texas Instruments 的 SNAU173 应用说明)。
示例代码显示智能看门狗首先进行初始化,然后等待一段特定的时间,最后进行检查以确定是否应该重启微控制器。 智能看门狗假设微控制器已出现故障,将复位变量设置为 true。 微控制器负责发送 heartbeat 脉冲来触发中断,从而将复位变量重新设置为 false。 示例代码中还可以加入许多功能,例如:
- 窗口式看门狗
- 进入低功耗状态
- 清零正在监视智能看门狗的 TPL5010
- 监视通信线路
- 跟踪复位次数
这些可能性所受的限制,仅仅在于确保稳健性设计真正需要的因素。
结论
IoT 的安全性固然重要,但开发人员也不应该忽视系统的稳健性。 为做到这一点,看门狗将在 IoT 中发挥至关重要的作用,不仅因为设备的部署现场让人类鞭长莫及,而且因为人们期望设备能够几乎全天候无故障地工作。 内部看门狗几乎没有为开发者提供恢复机会,而外部看门狗以及配备一些额外软件的智能看门狗,则可为现场提供稳健的可恢复设计。