看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,是MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。 出于对单片机运行状态进行实时监测的考虑,产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(watchdog)
看门狗定时器是一个独立于CPU的计数单元,如果不采用特定的指令周期地使看门狗定时器复位,看门狗单元将会使系统复位。为了避免不必要的复位,要求用户软件周期地对看门狗定时器进行复位操作。如果不明原因使CPU中断程序,比如系统软件进人了一个死循环或者CPU的程序运行到了不确定的程序空间,从而使系统不能正常工作,则看门狗电路将产生一个复位信号使CPU复位,程序从系统软件的开始执行。通过这种方式,看门狗就可以监测软件和硬件的运行状态,提高了系统的可靠性。
F28l2/F281O DSP上的看门狗与240x器件上的基本相同,当8位的看门狗计数器计数到值时,看门狗模块产生一个输出脉冲(512个振荡器时钟宽度)。如果不希望产生脉冲信号,则需要屏蔽计数器,或用软件周期地向看门狗复位控制寄存器写0x55+OxAA,该寄存器能够使看门狗计数器清零。图1为看门狗的功能框图。
WDINT信号使能看门狗作为IDLE/STANDBY模式唤醒的定时器。在STANDBY模式下,所有外设都将被关闭,只有看门狗起作用。WATCHDOG模块将脱离PLL时钟运行。WDINT信号反馈到LPM +H块,可以将器件从STANDBY模式唤醒。在IDI'E模式下,WDINT信号能够向CPU产生中断(该中断为WAKEINT)使CPU脱离IDLE工作模式。在HALT模式下,Pl-I-和OSC单元被关闭,因此不能实现上述功能。
图1 看门狗功能框图
在看门狗计数器(WDCNTR)溢出之前,如果采用正确的时序向WDKEY写人数据就可以使WDCNTR复位。当向WDKEY写0x55时,WDCNTR复位到使能位置;只有在向WDKEY写0xAA后才会使WDCNTR真正地复位。0x55和0xAA以外的任何数据写到WDKEY都会引起系统复位。只要向WDKEY写0x55和0xAA,无论写的顺序如何都不会导致系统复位,而只有先写Ox55再写OxAA才会使WDCNTR复位。表1列出了看门狗操作的几种情况。
表1 看门狗操作实例
看门狗的预定标寄存器可以用来提高看门狗的计数溢出周期。逻辑校验位(WDCHK)是看门狗的另一个安全机制,所有访问看门狗控制寄存器(WDCR)的写操作中,相应的校验位(位5~3)必须是“101”,否则将会拒绝访问并会立即触发复位。看门狗的内部原理如图1所示。
图1 看门狗内部原理图
看门狗复位电路主要是利用ARM正常工作时,定时复位计数器,使得计数器的值不超过某一值;当ARM不能正常工作时,由于计数器不能被复位,因此其计数会超过某一值,从而产生复位脉冲,使得ARM恢复正常工作状态。
看门狗复位电路的可靠性主要取决于软件设计,即将定时向复位电路发出脉冲的程序放在何处,在一般设计中,将此段程序放在定时器中断服务子程序中。然而,有时这种设计仍然会引起程序工作不正常,原因主要是,当程序异常发生在定时器初始化及开中断之后时,这种情况就有可能不能由Watch dog复位电路校正回来。
因为定时器中断一直在产生,即使程序工作不正常,Watch dog也能被正常复位。为此可以使用定时器加预设的设计方法,即在初始化时压入堆栈一个地址,在此地址内执行的是一条关中断和一条死循环语句。在所有不被程序代码占用的地址尽可能地用子程序返回指令代替,这样,当程序异常后,其进入陷阱的可能性将大大增加。而一旦进入陷阱,定时器就会停止工作并且关闭中断,从而使Watch dog复位电路产生一个复位脉冲将ARM复位。
看门狗应用程序如下所示。
由看门狗WDT引发系统复位的电路结构等效图如图所示。从该图中可以看出,只有当状态信号SLEEP=1,即单片机处于非睡眠状态时,看门狗超时溢出才会引发单片机的复位操作。而在单片机处于睡眠状态,即状态信号SLEEP=0时,看门狗超时溢出会唤醒单片机。
图 看门狗复位电路结构等效电路
看门狗就是一个用独立时钟源提供的脉冲进行累加计数的计数器,无需任何外部元件。独立的RC时钟信号源是指RC振荡器与OSC1(ULKIIN)引脚的外接RC振荡器,OSC1和OSC2外接晶体振荡器/陶瓷谐振器构成的单片机系统时钟是分离的。这就意味着,即使单片机进入系统时钟停振的睡眠状态,监视定时器WDT仍然能够运行。
在单片机执行程序期间,一次看门狗WDT超时溢出,将使单片机产生复位操作(称为WDT复位)。如果单片机处于睡眠状态,一次看门狗WDT超时溢出将使单片机被唤醒,恢复正常运行状态,并且继续执行在进入睡眠之前被搁置的程序(称为WDT唤醒)。
每次看门狗超时溢出,都会使得状态寄存器STATUS中的了T0位被清0,以记录曾经发生的这次看门狗溢出事件,供作程序查询判断用。
即当WDTE=0时,看门狗WDT将被禁止;当WDTE=1时,看门狗WDT将被启用。就是说,只要WDTE被定义成1,以后在用户程序中将再也无法禁止看门狗的运行。
若想不让看门狗WDT发生超时溢出,在用户程序中只能不停地、周期性地将看门狗计时器清0,使它不会因计数到超过值而溢出。
看门狗计时器的计时周期取决于独立RC振荡源的频率和计时器的宽度,同时在一定程度上受到工作电压、环蟑温度、制作工艺等因素的影响。
另外,看门狗的超时周期还可以借助于分频器以及分频器的分频比,在一定范围内改变和延长。分频器是否配置给看门狗使用,可以通过用户程序定义选项寄存器OPTION KEG的PSA位进行设置。
目前,在许多情况下,设计人员会用软件实现以往由硬件才能完成的电路功能,其中部分原因是低成本的微处理器(μP)为大家提供了广泛的选择。软件常常是解决问题成本、灵活性的方案,但它也迫使设计人员进行一些额外的测试以确保系统的可靠性。当然,如果程序没有代码错误也就不存在上述问题,细心的测试能够在1000条指令中减少1至10条错误。而设计人员则希望在10,000条指令中出错率不要超过十处。
在台式机系统中出现导致系统瘫痪的软件错误并不可怕,因为用户只需重新启动系统即可,它只会造成少量数据的丢失。然而,对于运行在工控系统的软件,系统则必须能够在没有人为干预的条件下恢复故障。这一特性在两种情况下非常关键:一种是高有效性系统,如服务器、电话系统以及生产线等;另一种是高可靠性系统,因为这种系统一旦出现错误将造成伤害,如汽车、医疗设备、工业控制、机器人、自动门等。即使不考虑这些要求严格的应用,系统在无需用户干预的条件下自动(按下复位键或重新上电)从故障状态下恢复也是很有益处的,这种设备的好处是显而易见的,因为用户不希望设备内部出现问题。改善这类系统可靠性的一种简单、有效的措施是采用看门狗电路。
1看门狗
看门狗实际上是一个计数器,它需要在一定的看门狗延时周期内被清零,如果没有清零动作,看门狗电路将产生一个复位信号以使系统重新启动或建立一个非屏蔽中断(NMI)并执行故障恢复子程序。大多数看门狗电路是沿触发,这样,无论是上升沿还是下降沿触发看门狗的输入端(WDI)通常都能够清计数器。WDI引脚一般连接在处理器的一个I/0口,这条口线可由软件触发。图1所示是微处理器通过在WDl脚发送脉冲清除看门狗定时器以防止复位的连接方式,实际上,清看门狗计数器的命令必须在主程序内。如果看门狗没有被清零,复位后软件将从地址为0000(启动程序)的子程序处开始运行。计算主程序的运行时间往往很困难,因为在此期间可能需要多次调用子程序,这与系统输入有关。因此,设计人员常常选择看门狗延时周期远远高于测试到的或计算出的循环时间。图2所示是正常工作情况下(看门狗在延时周期内被请零)的看门狗信号和复位信号。图3所示为看门狗计数器溢出时引发一次复位的时序示意图。工业标准的看门狗电路延时周期一般在l00ms~2s范围内,当然,也有些可调节或定制的看门狗电路能够覆盖更宽的延时范围(30ms至几分钟)。如果主程序的执行时间对于看门狗电路而言过长,设计人员可以在主程序的不同部位多次执行看门狗触发命令,也可以选用看门狗延时周期更长的器件。
一种防止系统滞留在死循环的技术是在主程序的初始化部分将相应的I/O引脚置为高电平,而在主程序的另一部分将其置为低电子。如果软件在主程序的起始部分进入了死循环,由于WDI始终保持高电平,看门狗将产生延时输出而使系统复位。如果采用一个低-高-低的脉冲,看门狗将被清零,但系统仍处于阻塞状态。为解决这个问题,一种比较成熟的方法是对程序中的多项任务进行监视,并对每项任务设置一个标志,只有当全部标志置位后,看门狗电路才被触发。执行全部任务的时间要比看门狗超出周期短。在更复杂的系统中,还存在一些潜在问题,如存储器泄漏、堆栈溢出等,此时系统同样需要对这些情况进行监视,尽管对这些问题的讨论超出了本文的范围,但通过合理的程序设计、认真审核代码或采用特殊的软件工具也可以解决上述问题。
2 内部看门狗与外部看门狗
许多μP都集成了可编程看门狗功能,软件控制可禁止其工作。通常内置看门狗易受代码错误的影响,它无法提供外部独立看门狗电路所具有的保护能力,因此在对安全性能要求较高的应用中(如自动门、医疗设备、机器人等),内置看门狗是无法接受的,从而使管理层采用独立的外部看门狗电路。现利用外部看门狗电路降低高可靠性系统的风险是一个极好的尝试。
2.1简单的看门狗+复位
通常看门狗延时将重新复位系统,大多数看门狗电路与 μP复位集成在一起,它同时可以监视处理器的供电电压。在出现看门狗延时或电源电压跌落的情况下均可产生复位动作,MAX823~MAX825系列产品就包含了这两种功能,它们可提供标准的复位电压门限、标准的看门狗延时周期和复位延迟,仅消耗6μA电流。而且这些器件具有超小型SC70封装。
2.2工厂预置看门狗系列
MAX6316~MAX6322系列可提供26种工厂预置的复位电压门限、4种看门狗延时周期、4种复位延迟以及4种输出配置。
2.3用电容调节的看门狗
如果应用中需要灵活的看门狗延时周期,设计人员可以选用可调节电路,MAX6746~MAX6753系列产品不但提供了工厂预置的复位电压门限,也提供了分压编程的复位电压门限,另外,还可以利用外部电容来调节看门狗的延时周期和复位延迟。图4所示是其典型工作电路,其中:
复位电压由分压器R1/R2决定;
复位延迟时间由电容CSRT设置;
看门狗延时周期由电容Csw放置。
图5是CSWT在100pF~100nF时所对应的看门狗延时周期范围,设计人员利用如此宽范围的看门狗延时周期可以为任何应用提供解决方案。需要说明的是:MAX6301-MAX6304系列基本与MAX6746-MAX6753系列相同,它们均可提供SO或DIP封装。
2.4较长启动/延时周期和引脚可选的看门狗
对于启动过程较长的应用,可提供两个不同的延时周期设计:即一个较长的初始化延时周期和一个较短的正常工作延时周期。MAX6369-MAX6374系列便具有引脚可编程的启动延迟,其可选范围为200ms~60s。一些版本还提供有看门狗的首次边沿激活功能,以满足启动过程更长的应用。在这些芯片中,看门狗电路在启动过程中被禁止,而只允许来自μP相关I/O引脚的个边沿才可以激活看门狗电路。
2.5多电压监控看门狗
对于双电源供电系统,MAX6358-MAX6360系列可以监视两路标准电压,并提供长启动周期和标准延时周期的看门狗;对于三组电源供电或需要高有效和低有效复位输出的系统,设计人员可以选用MAX6721-MAX6729系列产品,这些器件能提供长启动周期和标准延时周期的双模式看门狗功能。并可监视两路标准的电源电压(MAX6721-MAX6722)或两路标准电压加上一路可调电压(MAX6723-MAX6724)。同时,这些器件还带有手动复位输入,电源失效比较器、双复位输出和RESET、RESET输出等。
2.6超高可靠窗式看门狗
为获得超高的可靠性,设计人员可以利用MAX6323/MAX6324窗式看门狗电路,使用这些器件时必须在规定的窗口定时周期内为看门狗提供清零脉冲,有效脉冲可以在上次触发脉冲1.5ms后送达,也可以在上次触发脉冲之后的10ms时到达,利用MAX6323/MAX6324系统可以脱离离散循环,如果清零看门狗指令在循环内执行,它将发出一串高速脉冲,这些脉冲可以将常规的看门狗清零,而且不产生复位。利用窗式看门狗电路可避免上述问题的原因是这种器件在两次看门狗触发脉冲之间要求有一定的时间间隔。这些器件的典型应用包括防抱死(ABS)系统或其它汽车电路、工业控制、医疗产品等要求安全性能较高的应用系统或对系统有效性要求苛刻的应用场合。
3 结论
各种软件程序都会出现代码错误,而且噪声和EMI也会影响系统中的数据,并导致不可预测的系统动作,因此,设计人员要保证系统不出现死锁。看门狗电路是提高系统可靠性的一种简单、廉价方案。利用外部看门狗电路可以防止系统死锁,如果WDI信号在规定的看门狗延时周期内没有被触发,那么电路将对系统进行复位。在目前种类繁多的看门狗器件中,设计人员一定能够找到一款与其需求相吻合的器件。
维库电子通,电子知识,一查百通!
已收录词条48243个