摘要:本文介紹了在ARM+Linux的條件下,傳統(tǒng)的看門狗應(yīng)用存在的問題及解決方案。此方案可以做為ARM+Linux條件下的一種標(biāo)準(zhǔn)解決方法。
關(guān)鍵詞:看門狗;重啟;關(guān)狗
DOI: 10.3969/j.issn.1005-5517.2013.1.016
現(xiàn)象、問題描述
筆者在設(shè)計ARM+Linux的產(chǎn)品中,使用了看門狗ADM706。這款I(lǐng)C的定時間隔為1.6s。由于使用ARM9的內(nèi)核,操作系統(tǒng)為Linux。整個系統(tǒng)完全啟動時間較長,超出了看門狗的喂狗時間門限。因此在CPU能完全啟動開始喂狗前,看門狗又給出了復(fù)位信號,導(dǎo)致CPU重啟。由于成本的原因,此款看門狗IC的定時復(fù)位間隔時間已經(jīng)定死,不能由CPU設(shè)置。我們無法通過更改看門狗的喂狗間隔時間來滿足CPU的啟動要求。
關(guān)鍵過程及根本原因分析
使用的看門狗電路如圖1所示。
RESET信號為看門狗輸出的復(fù)位信號,WDI為CPU輸出的喂狗信號。在1.6s的時間內(nèi),WDI信號有從高到低或者從低到高的變化,則看門狗內(nèi)部的定時器清零,重新計數(shù),無復(fù)位信號輸出。
由于采用Linux內(nèi)核的操作系統(tǒng),Bootloader采用U-Boot。在從U-Boot跳轉(zhuǎn)到Linux內(nèi)核的過程中,必須關(guān)閉定時器中斷。CPU不能定時喂狗,且跳轉(zhuǎn)執(zhí)行的間隔時間都大于 1.6s。因此需要關(guān)閉看門狗的復(fù)位輸出信號,以使CPU能完全啟動。
改進(jìn)電路

仔細(xì)閱讀此看門狗I C的Datasheet??撮T狗IC的框圖如圖2。此看門狗IC內(nèi)部包括三部分功能:
(1)看門狗的定時器,當(dāng)MR為低電平或WDI有電平變化時清零。當(dāng)定時器溢出,WDO輸出低電平。一旦定時器清零,WDO輸出高電平。
(2)當(dāng)VCC失敗或MR上有低電平,一旦上述條件消失,RESET輸出一個200ms寬度的低電平信號。因此,當(dāng)WDO直接連到MR管腳上后,RESET輸出一個周期為1.6s,低電平寬度為200ms的復(fù)位信號。
(3)PFI的輸入電平低于1.25V時,PFO輸出一個低電平。
電路圖更新為如圖3所示。
采用此電路后,C P U啟動后,在U-Boot程序中設(shè)置CLOSE_ WATCHDOG信號為高電平,可以關(guān)閉看門狗的WDO信號輸出,CPU可以正常啟動完成。在裝載完驅(qū)動程序后,定時每100ms在WDI管腳輸出喂狗信號。設(shè)置CLOSE_WATCHDOG信號為低,打開看門狗的復(fù)位信號輸出。當(dāng)1.6s后,沒有喂狗信號,看門狗輸出復(fù)位信號復(fù)位CPU,CPU重啟。
總結(jié)
采用圖三所示電路,使看門狗IC實(shí)現(xiàn)看門狗電路和上電復(fù)位電路兩種功能。滿足帶操作系統(tǒng)的CPU啟動時間長,需通過電壓跌落試驗(yàn)等要求。也可以滿足需要實(shí)現(xiàn)休眠功能要求的場景。此電路可以作為帶操作系統(tǒng)CPU或需實(shí)現(xiàn)休眠功能的CPU標(biāo)準(zhǔn)復(fù)位電路。