笔者在设计ARM+Linux的产品中,使用了看门狗ADM706。这款IC的定时间隔为1.6s。由于使用ARM9的内核,操作系统为Linux。整个系统完全启动时间较长,超出了看门狗的喂狗时间门限。因此在CPU能完全启动开始喂狗前,看门狗又给出了复位信号,导致CPU重启。由于成本的原因,此款看门狗IC的定时复位间隔时间已经定死,不能由CPU设置。我们无法通过更改看门狗的喂狗间隔时间来满足CPU的启动要求。
关键过程及根本原因分析
使用的看门狗电路如图1所示。RESET信号为看门狗输出的复位信号,WDI为CPU输出的喂狗信号。在1.6s的时间内,WDI信号有从高到低或者从低到高的变化,则看门狗内部的定时器清零,重新计数,无复位信号输出。
由于采用Linux内核的操作系统,Bootloader采用U-Boot。在从U-Boot跳转到Linux内核的过程中,必须关闭定时器中断。CPU不能定时喂狗,且跳转执行的间隔时间都大于1.6s。因此需要关闭看门狗的复位输出信号,以使CPU能完全启动。