就像一只住在名媛手提包中叫不停的小狗,看门狗定时器(watchdog timer)也时常被认为是不必要的多此一举。然而,若将两者一视同仁,是对看门狗的极大侮辱。不同于「手提包小狗」,看门狗具有关键的监控功能,能够帮助您监控系统里外的故障情形,并在故障发生时采取行动。
简单来说,看门狗定时器是一种若在特定时间范围内未从处理器接收到周期性脉冲讯号,就会发出重设输出讯号的装置。其中一种应用这种装置的方法,是透过来自处理器的数字讯号输出(GPIO)回馈给外部看门狗定时器的看门狗输入(WDI),如图1所示。TPS3851便是具有整合看门狗定时器的监控器,能够监控微控制器的电源轨,并透过外部方式监控从微控制器(MCU)发出的数字脉冲。
图1 TPS3851所提供的看门狗监控。
处理器周期性地向看门狗定时器发送一个脉冲,以表示系统软件的正常运作。若看门狗定时器在规定的时间范围(称为看门狗超时)内未接收到此脉冲,看门狗定时器将发出重设输出讯号。该重设输出讯号可以用于通知系统处理器出现了停机或冻结的情况,或重设处理器本身。图2所示为在看门狗超时期间内接收的脉冲,以及在超过看门狗超时之后所接收的脉冲。
图2 标准看门狗定时器的运作。
看门狗定时器提供一种警报系统的机制,或重设一个软件历经冻结或停机的处理器。尽管没有人会刻意设计会冻结的软件,但优秀的系统设计人员还是会为故障做准备——因为未雨绸缪总是好的。若缺少这种监控,处理器可能会无限期地冻结,并导致更多的系统故障。像是TPS3851具有可调整超时间间隔的外部看门狗定时器,能够在几毫秒内辨识这些软件冻结,并适当地重设系统或处理器。因为要手动重设这些系统是不实际、甚至几乎是不可能的,因此这项功能在嵌入式或远程系统中更有其必要性。
有两种主要的方式能够来实作看门狗定时器:
˙使用具有整合看门狗功能的处理器。许多微控制器如MSP430F5529系列具有整合看门狗的功能。它的价值在于非常容易实作,且不需要使用其他IC。然而,有一个重要的告诫:由于程序代码问题而导致的MCU故障可能无意中使看门狗定时器丧失功用,因此整合看门狗可能不会总是按预期的方式运作。同样地,虽然软件以内部看门狗能够侦测所有冻结或停机的方式编写,但是,采取额外的步骤以冗余方式监控看门狗输入可以帮助解决程序代码中不可预见的错误。
˙使用具有看门狗定时器的电压监控器。像是TPS3851或TPS3110具有看门狗定时器功能的监控器能够以外部冗余方式监控电源电压和看门狗讯号。若处理器的内部看门狗未能侦测到错误或缺失的脉冲,外部看门狗定时器将能发挥其他方式无法达到的侦测层级。
原则上,看门狗定时器的功能不会过于复杂;然而,其在维持系统可靠性的重要性也不容小觑,尤其是在系统发生错误、但是人为的系统重设是困难甚至是不能实现的情况下。
接下来,本文将说明为什么应该在应用中使用看门狗定时器、窗口式看门狗定时器如何运作,以及看门狗定时器的一些特性,如何让它们成为许多不同应用的绝佳附加功能。
看门狗定时器在许多应用中都占有一席之地,如无人机、电网计量、马达控制…等。对于这些不同的应用,看门狗定时器提供相同的基本功能:透过对处理器的监控侦测出错误运作并发出相应的讯号。
然而,监控的使用可能依据应用类型而有所不同。例如,期望有人能够在距离地表几百英呎的无人机中手动重设其处理器是不切实际的。在智慧仪表中,同样的问题可能导致装置无法读取或记录信息,位于远程位置的仪表和传感器也会遇到软件故障的状况,导致系统无法读取和记录信息,并且也没有人能够手动重设的情形。控制马达和其他机械零组件的系统中的程序代码故障尤其令人紧张,因为这些系统的故障可能对正在操作和在附近的人员造成身体上的伤害。好在使用看门狗定时器可以增加冗余来拦截这些错误,有助于防止这些问题的发生。
图3所示的窗口式看门狗定时器是一种特殊的看门狗定时器,其不仅监控在看门狗超时结束(即看门狗上部边界)前处理器所发送的讯号是否失败,它还能监控处理器是否在看门狗超时窗口开始前发送看门狗输入端(WDI)讯号(即看门狗下部边界)。此功能如图4所示。
图3 监控微控制器的窗口式看门狗定时器。
图4 窗口式看门狗功能。
不同于只检查脉冲是否在超时结束前抵达的标准看门狗定时器。监控早期WDI讯号能够侦测并制止不理想的超频,是相当有用的功能。
窗口式看门狗定时器只是看门狗定时器众多功能中的一种附加功能。几个其他附加功能能够确保系统的稳健性和功能性:
˙可调整式看门狗超时:不同的系统和应用对于其WDI讯号需要不同的超时周期。外部电容和SET接脚可以用在看门狗超时中几毫秒到1分钟不等的调整。
˙看门狗定时器的关闭功能:有些看门狗定时器能够透过接脚在装置上的使用而被关闭。这在系统初始化和除错的过程中,不想重设处理器时非常实用。
(原文发表于EDN姐妹刊EETTaiwan,由德州仪器(TI)供稿)