EMU-ZONE 电子DIY

 
首页制作硬件资料开发资料购买
 
原创稿件 - 《无线电》 - 计算机硬件看门狗
计算机硬件看门狗

注:请勿转载,如有需求请与刊登的杂志社联系.

  如果你熟悉单片机,对看门狗(监视定时器)应该不会陌生,单片机为了提高抗干扰能力一般都具有看门狗的功能,看门狗可以在单片机程序死机或者程序跑飞的情况下自动对单片机进行复位操作,这样就可以使单片机重新开始工作,从而保证程序正常运行。现在我们也可以把看门狗应用在计算机上,来保证计算机系统的正常运行。实际上,看门狗在计算机上的应用已经比较普遍了,在一些对系统稳定性有严格要求的场合都能见到看门狗的影子,比如在工业控制领域的计算机上和在一些做为服务器使用的电脑主板上都具有看门狗的功能。


一、看门狗的原理
  看门狗的简称是WDT(Watch Dog Timer),硬件上主要是由一个定时器组成,在打开看门狗时,定时器开始工作,在定时时间到时,触发系统复位,这样在软件上的合适地方需要在看门狗的定时时间到之前对看门狗定时器的计数器进行清零,这样只要软件正常运行,就不会出现复位。当软件死机或运行出错时,没有对看门狗定时器的计数器清零,看门狗定时时间到后对系统进行复位,使系统重新开始工作,从而保证系统的正常运行。
  其中看门狗的定时时间可以由用户设定,这样可以根据需要在指定的时间内复位系统。软件上对看门狗的控制很简单,只有三种操作:打开看门狗、关闭看门狗和看门狗定时器清零。


二、计算机硬件看门狗的硬件分析

            
                      //图1 看门狗电路原理图

  这个电路是做成一个板卡插在计算机的ISA插槽中,引出一个控制信号控制计算机的复位键。当系统死机时,看门狗电路会触发复位功能,使计算机重新启动,恢复正常运行。

  U1的型号为74HCT73,是一个双JK触发器,这里只用到了一路。这个芯片具有单独的J、K、清零和时钟输入端。当第1脚(CLK)时钟输入端为高电平时,允许输入端输入数据。这时,J、K输入端的逻辑电平可以变化,并且只要符合最低建立时间,就执行符合真值表的双稳态工作状态,在时钟脉冲的负边沿上输入数据被传输到输出端。

            
                      //图2 74HCT73真值表

  U2的型号为74HCT4060,这是一个带振荡器14级二进制串行计数器。该计数器由14个主-从触发器和一个振荡器组成。该振荡器的频率可有石英晶振控制,也可由外接RC电路构成。每个触发器的输出端馈至下一级,每个输出端的频率为前一级的一半。计数器的状态根据振荡器输入端的负边沿而改变。复位端是低电平有效。

            
                      //图3 74HCT4060真值表

  U3的型号为74HCT02,这是一个4路2输入或非门电路。

                
                      //图4 74HCT02真值表

  U4的型号为74HCT688。这是一个8位数值比较器,它可以完成两个8位二进制或BCD字之间的比较。P0-P7为一组数据的8位,Q0-Q7为另一组数据的8位。若参加比较的两个数相等,则74HCT688的第19脚(P=Q)反会输出低电平,否则为高电平。

            
                      //图5 74HCT688真值表
                
  整个电路的工作过程如下:

1.定时器部分
  定时器部分由74HCT4060、10档旋转开关和Q1组成。74HCT4060的振荡周期由外接RC电路决定,也可根据需要自行调整。它的10个输出端对应了不同的定时时间。10位DIP开关用来选择定时时间,这样Q1可在不同的时间间隔导通,因为Q1的C极接到了复位按键,所以Q1的导通将导致计算机复位。

  SW10用来设置看门狗的定时时间,每位打开代表不同的定时时间:

  SW10     定时时间
   1       10秒
   2       20秒
   3       40秒
   4       80秒
   5       160秒
   6       320秒
   7       640秒
   8       2560秒
   9       5120秒
   10      10240秒

  注:定时时间为近似值。

2.看门狗地址的设定电路
  地址设置部分由一个74HCT688比较器完成。Q3-Q7的电平是固定的,通过3位拨码开关,则可改变Q0-Q2的电平。它们对应的是地址线的A2-A9,所以我们可以通过拨码开关将地址在十六进制的地址300H-31CH之间任意设置,这样可以避免与计算机上其它设备的冲突。


  S1用来设置看门狗定时器在计算机中的映射地址。软件通过这个地址访问看门狗,来实现对看门狗的控制。下表是SW1的设置:

   S1-3   S1-2   S1-1     地址

   0     0     0     300h
   0     0     1     304h
   0     1     0     308h
   0     1     1     30Ch
   .     .     .     .
   .     .     .     .
   1     1     1     31Ch

3.看门狗部分

  计算机正常工作时,看门狗程序要定时对看门狗电路进行清零操作。这个清零操作实际上就是定时访问看门狗电路的地址,对该地址进行一些读写操作,以表示计算机程序仍在正常运行。而看门狗电路一旦检测到这些操作就对定时器部分清零操作,这样在该定时周期,计算机就不会重新启动。
      
  计算机上电后,会向ISA槽的B2脚(RESET)送一个复位信号,该复位信号为高电平有效。当RESET为高电平,会对C3进行充电,最后导致Q2导通。Q2导通后,C2开始放电,C2放电完毕后,U1的第2脚变为低电平。U1复位,第13脚Q反输出高电平。当复位结束后,复位信号变低,导致U1第2脚变高,但因为没有时钟信号,所以Q反保持高,则U2没有开始计数。

  当我们要打开看门狗电路,需要对看门狗电路进行读操作,首先在ISA总线上会发送地址,当总线上的地址与看门狗电路预先设置的地址相同时,即P=Q时,74HCT688的第19脚会输出低电平。不过第19脚是否允许输出是要受74HCT688的第1脚控制的。74HCT688第1脚的状态则由74HCT02决定。

  ISA槽的A11(AEN地址允许)平时总是处于低电平。程序进行读写时,除了发送地址,还会发送读写控制信号,而读写信号不会同时出现,也即读写时U3的第2脚和第6脚总处于相反的状态。因此U3的第8脚和第9脚的电平也相反,第10脚将输出低电平。也就是74HCT688的第1脚为低电平,允许74HCT688的第19脚输出。注:因为看门狗需要使用的是计算机中的I/O地址,而计算机的总线上地址线是复用的,所以同样的地址可能是看门狗的,也可能是其它设备的(如内存),所以还要确认是对I/O的读写操作(检测ISA槽中B13,B14引脚的电平信号),才能确认是对看门狗的操作。

  对于74HCT73来说,有了时钟信号,读操作时:J为低(读信号),K为高(无写信号),Q反为高;紧接着的写操作时:J为高(无读信号),K为低(写信号),Q反为低。74HCT4060第12脚(RESET)也为低,开始记数。

  在计算机正常运行期间,看门狗程序会定期的执行一定的操作来使看门狗的定时器清零,其时间间隔要小于定时时间。清零操作实际执行的是一个读操作和一个写操作。对于74HCT73来说,读信号将导致Q反为高,即74HCT4060停止计数。接着的一个写操作导致U1的Q反为低,即74HCT4060开始计数。这样看门狗就开始正常运行了。

  如果要关闭看门狗,则只送一个读信号就可以了。

  如果计算机死机,则看门狗电路就接收不到定期的清零操作了。当74HCT4060达到定时时间,Q1就会导通,计算机就会复位。


三、软件设计及应用

  看门狗的控制操作很简单,只有三种操作,软件上可以使用任何语言来控制看门狗,下面使用C语言来说明如何控制看门狗:

  1.打开看门狗操作或看门狗定时器清零操作
   打开看门狗或看门狗定时器清零操作需要完成两个步骤:
   1.从看门狗的控制地址读
   2.输出任何数据到看门狗的控制地址

   相应的C语言代码如下:

   void WatchDogStart(int port)
   {
    inport(port);
    outport(port, 0);
   }

   注:port为看门狗的控制地址。

  2.关闭看门狗操作
   关闭看门狗操作只需要完成从看门狗的控制地址读即可。相应的C语言代码如下:

   void WatchDogStop(int port)
   {
    inport(port);
   }

   注:port为看门狗的控制地址。

  我们只要在应用系统的软件中使用上面的方法来控制看门狗就可以使看门狗开始工作,这样当这个系统出错或死机时没有对看门狗定时器清零,就会引发系统复位。我们也可以设计一个通用的软件,在开机时自动运行这个软件打开看门狗,然后在后台定时对看门狗定时器清零,这样当系统死机时,同样可以完成系统自动复位。



 
 
【模拟器硬件DIY】版权所有 Copyright(C) 2000-2006 本站资料未经许可,请勿转载,如有需求,请联系