软硬件看门狗技术研究
2012-07-12广州正力通用电气有限公司赵洪军
广州正力通用电气有限公司 赵洪军
1.引言
随着单片机技术不断发展和制造工艺的日益成熟,单片机以其强大的处理能力及低廉的价格使其被广泛的应用于工业、商业等领域。但由于单片机自身的抗干扰能力不强,尤其是在一些条件比较恶劣、电磁干扰较强的场合,常会出现单片机因受外界干扰而导致死机或程序跑飞的现象,造成系统不能正常工作。业界使用看门狗技术来解决这一问题,通过看门狗的使用防止单片机死机,将死机的系统重新复位并使其正常工作。看门狗技术是提高单片机系统抗干扰能力的一种重要途径,看门狗技术分为软件看门狗及硬件看门狗,本文分析了几种常用的软硬件看门狗技术,并提出了一种高可靠的硬件断电复位看门狗措施,供大家参考。
2.软件看门狗
软件看门狗因其只使用了单片机内部的定时器/计数器单元实现看门狗功能,不必外加元器件,因而被普遍的应用于单片机系统中,常与硬件看门狗一起使用。
软件看门狗一般采用高级中断的方式执行,通过在中断程序中设置系统复位寄存器或对程序计数器PC赋予初始值的方式进行系统复位。可根据系统的需要自行确定看门狗动作的时间,该时间通过设置定时器的计数值来确定。在系统正常的主循环中适当地插入“喂狗”指令来重置定时器值,当程序跑飞或进入死循环时,定时器因计时到而中断,从而执行中断复位程序,将系统复位。下面以新唐公司的ARM Cortex-M0核的NUC120芯片为例介绍一下具体实现方法。晶振频率为12 MHz,采用TIMER0为软件看门狗定时器。
1)首先在初始化程序中设置好定时器/计数器的工作方式、定时时间和中断优先级别,并开中断。
2)根据定时器的定时时间,在主程序循环中按一定的间隔插入软件看门狗喂狗指令,即插入“喂狗”指令,两条“喂狗”指令间的时间间隔应小于定时时间,否则看门狗将发生误动作。
3)在定时器的中断服务程序中判断比较是否到达软件看门狗的动作时间,如果条件成立则通过设置系统寄存器的方式实现系统复位。
软件如下:
3.硬件看门狗
图1 DS1232与AT89C52联接电路图
硬件看门狗通常指集成在单片机内部的看门狗定时器或外置的专用看门狗芯片或电路。
3.1 集成在单片机内部的看门狗定时器
现在生产的新型号的单片机基本都含有内部硬件看门狗。这种内部硬件看门狗的使能有两种方式:一种是通过在程序烧录时配置相应的熔丝位来使能内部看门狗,这种看门狗一旦开启将不能通过软件关闭,相对来说更加可靠,例如:Atmel公司AVR系列的ATmega128芯片。另一种是更加广泛的通过软件来控制内部硬件看门狗的开启及关闭的方式。这种硬件看门狗需要在主程序开始时初始化并开启看门狗功能,然后在主循环中适时地执行喂狗操作,一旦程序跑飞或死机,内部硬件看门狗定时器溢出,则执行内部复位操作使系统复位。下面仍以新唐公司的NUC120芯片为例介绍一下软件设置方法。
主程序见上文软件看门狗部分的“int32_t main()”程序。主程序中调用了“InitWDT()初始化内部硬件WDT”程序,该程序初始化并开启看门狗功能;并在主循环中调用了“Clr_WDT()内部硬件看门狗喂狗程序”已执行正常的喂狗功能。软件如下:
图2 硬件断电复位看门狗电路图
3.2 外置的专用看门狗芯片或电路
外置的专用看门狗芯片或电路实际上是一个特殊的定时器,当定时时间到时,发出溢出脉冲,该脉冲输入到单片机的外部复位引脚上,从而实现系统复位。软件在主程序循环中适时地执行喂狗操作(通过控制引脚变化来清除外部看门狗),保证系统正常运行时看门狗不溢出;而当系统运行异常时,看门狗超时发出溢出脉冲,通过单片机的RESET引脚使单片机复位。这种方式相比内部硬件看门狗及软件看门狗更加可靠,不存在因为上电复位失败而导致内部看门狗及软件看门狗失效的可能,缺点是需要外配芯片或电路。
目前常用的集成看门狗电路很多,如DS1232、MAX705~708、MAX791等。图1是DS1232芯片与AT89C52芯片的电路图,单片机通过P3.3脚控制DS1232的喂狗信号,该喂狗信号在主程序的适当时机给出,保证DS1232芯片不溢出,RST脚则保持为低电平;当单片机死机时,P3.3脚不再给出喂狗脉冲,则DS1232定时到时后RST脚输出高电平脉冲将单片机复位。
4.硬件断电复位看门狗
将以上的软件看门狗、内部硬件看门狗及外部专用看门狗芯片都应用到实际的产品中将使系统的抗干扰性能得到极大的提升,并且可以满足普通的商业需要。但是在存在较强外部干扰的工业环境下是否万无一失呢?答案是否定的,作者在工作中就遇到了以上三种方式均不能解决的问题。问题如下,作者采用上文图一的看门狗电路制作了一款产品,完成后进行测试,再反复施加极强的电磁干扰后,出现了死机现象,并且一直不能复位。经过测量,发现AT89C52单片机的所有引脚都为低电平,并且芯片发热严重;DS1232的工作状态仍然正常,仍能定期的输出复位脉冲到单片机,但是无论复位脉冲如何施加,单片机就是不能复位。这就是单片机出现了“死锁”现象,针对这一现象以上的看门狗措施都将无计可施了,那么如何解决呢?作者提出一种高可靠的硬件断电复位看门狗措施来解决该问题,简单地说就是在单片机出现死锁的现象时通过:断电、延时、再重新上电的方式来解决该问题。实际应用电路如图2所示。
单片机主程序的循环中适时地通过控制看门狗引脚(WatchDog)输出连续多个脉冲以使U1的第1脚输出一个高电平脉冲来复位U2芯片,使U2计数器清0,从而保证Q1始终不导通,而Q2则导通,以便为单片机提供电源VCC。当单片机死机时,单片机的看门狗引脚不再输出脉冲来复位U2芯片,U2芯片收到U3产生的第3个脉冲时,U2的第7脚将输出高电平,此时Q1导通,则Q2截止,停止位单片机提供电源VCC。当U3的下一个脉冲来临时,U2的第7脚输出低电平,从而让Q2导通,重新为单片机供电。系统则实现了死机—断电—延时—重新上电的高可靠复位方式,而从解决了单片机死锁的问题。
5.结束语
看门狗技术已经广泛的应用于单片机系统中,并且成为嵌入式系统不可缺少的一部分。深入的对看门狗技术进行研究并应用到实践中可以切实的提高产品的抗干扰能力,而从使系统更加稳定、可靠。在具体实施方面,设计者应综合考虑系统资源、经济性、可靠性等多方面因素,合理制定看门狗的控制方案,提高系统的性能价格比。
[1]王幸之等编著.单片机应用系统电磁干扰与抗干扰技术[M].北京航天航空大学出版社,2006年2月
[2]李宁编著.ARM开发工具RealView MDK使用入门[M].北京航天航空大学出版社,2008年3月