一个看门狗的工作是使嵌入式处理器或微控制器能在对无效的软件状态进行响应后可以复位。在网络应用中,系统工作是不能中断的,看门狗就在确保系统不冻结或跳出死循环的工作中扮演了一个重要角色。
图1 Maxim的MAX6746等看门狗扮演了重要角色
高级别网络功能带来的问题就是系统需要很多时钟。一个简单的看门狗也许是不够的。当不切实际地使用大量基于硬件的定时器时,一批网络定时器就等同于使用了时钟中断信号,而所有的时钟都保持在软件中。不过,在很多应用中,硬件时钟仍然能提供可信任的解决方案。
通常,嵌入式软件有一个能调用不同子程序的主循环,看门狗一旦处在主循环的顶端就会被复位。如果主循环不能正确执行,看门狗就会启动,进而使器件复位。许多网络应用因为看门狗的加入而变得可靠。但是一个看门狗不能直接探测到错误,准确地说,看门狗必须在它复位处理器之前达到预置时间间隔的顶点。
看门狗可以放置在微控制器中间,比如像MAXQ2000,外置在标准的单个IC中或嵌入系统作为支持ASIC的一部分。内置看门狗能省钱,但易被失控的代码所影响。外部的看门狗有一个单独的时钟脉冲源,这使其可靠性大为增加。如果配置正确,它们就不会被失控代码绕过或无效化。
一个通常有效的看门狗功能是“窗户”或“最小/最大值”,当看门狗被操控得太慢或太快,这个功能就能通过发复位信号而增强对正确操作的认证。如果当清空计数寄存器的指令到达而计数寄存器的数量未达阈值时,器件就会触发系统复位。这样不仅防止了软件错误,还能在晶振以错误频率工作的时候复位MPU。另一个功能就是通过外部的逻辑输入或内部的寄存器位来禁止看门狗。
内置于MCU的看门狗
举例来说,我们来看MAXQ2000内部的看门狗。如果不被操控,这个看门狗会触发一个中断,在计数完512个额外的系统时钟周期后重新复位。
这个中断为存储调试信息提供了最后的机会,它是电路开发和故障诊断中一个非常有用的功能。取代了存储调试信息,这个中断能被用来从故障中回复错误和清空看门狗。
像其他内置的看门狗一样,MAXQ2000也能通过软件来终止。不过此功能是把双刃剑,因为失控代码会禁止看门狗,并继续乱闹。
一些微控制器将它们的看门狗连接到独立于系统时钟的晶振上。尽管MAXQ2000的看门狗来自于系统时钟,但电路仍会切换到备用的RF振荡器上以防止主晶振的失控。
外置于MCU的看门狗
很多厂商能提供具备多种功能的专门看门狗IC。比如MAX6752,具有窗口功能,可让用户调整看门狗的超时区域,并用外置电容来调整复位脉冲。
看门狗MAX6369上的逻辑输入管脚能禁止时钟,阻止复位。尽管用逻辑管脚来连接微控制器是很吸引人的,但会给系统带来风险,因为失控代码能随机地禁止看门狗。通常,当微控制器启动的时候,看门狗要在启动阶段被禁止。MAX6369能在复位完毕的时候提供一个额外的长看门狗周期。当看门狗被第一次启动的时候,正常的持续超时就会回归。一些定时器还能提供一个去抖动和ESD保护复位开关输入。