深圳市安捷信電氣有限公司 馮瑞明
筆者在設(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的啟動要求。
圖1 使用的看門狗電路圖
圖2 改進看門狗電路
圖3 看門狗波形圖
圖4 ADM706內(nèi)部框圖
圖5 最終版看門狗電路
使用的看門狗電路如圖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能完全啟動。
電路圖更新為如圖2所示:
采用此電路后,CPU啟動后,在U-BOOT程序中設(shè)置CLOSE_WATCHDOG信號為高電平,可以關(guān)閉看門狗的復(fù)位信號輸出,CPU可以正常啟動完成。在裝載完驅(qū)動程序后,定時每100ms在WDI管腳輸出喂狗信號。設(shè)置CLOSE_WATCHDOG信號為低,打開看門狗的復(fù)位信號輸出。當(dāng)1.6S后,沒有喂狗信號后,看門狗輸出復(fù)位信號復(fù)位CPU,CPU重啟。
后測試發(fā)現(xiàn)如下問題:
1.在U-BOOT下,按復(fù)位鍵,CPU不能復(fù)位;
2.在系統(tǒng)啟動過程中,電源短時跌落后恢復(fù),系統(tǒng)有時不能啟動;
3.有時加載驅(qū)動完成后,打開看門狗復(fù)位信號時,系統(tǒng)會出現(xiàn)重啟現(xiàn)象。
問題分析:
問題一,在U-BOOT下,由于關(guān)閉了看門狗的輸出信號,因此沒有復(fù)位信號輸出到CPU上,CPU不能復(fù)位,表現(xiàn)為復(fù)位鍵不起作用。
問題二,在系統(tǒng)啟動過程中,由于CLOSE_WATCHDOG信號為高,關(guān)閉看門狗的復(fù)位信號輸出。當(dāng)電源短時跌落后恢復(fù),有時CLOSE_WATCHDOG信號依然保持高電平。沒有看門狗復(fù)位信號輸出到CPU上,CPU不能正常的復(fù)位,導(dǎo)致系統(tǒng)不能正常啟動。
問題三,在加載完成驅(qū)動后,先給WDI輸出一個脈沖信號喂狗。然后打開看門狗的復(fù)位信號??撮T狗的波形如圖3所示。
從圖3中,我們可以看出,假如我們喂狗,MR信號變?yōu)楦唠娖?。可是RESET信號依然會維持200ms的低電平。此時,我們打開看門狗電路,給CPU輸出一個復(fù)位信號引起CPU復(fù)位。當(dāng)MR信號維持高電平1.6S,且WDI無電平變化,看門狗輸出復(fù)位信號。因此打開看門狗電路會引起CPU復(fù)位的概率是:0.2/1.6=12.5%。
仔細(xì)閱讀此看門狗IC的DATASHEET??撮T狗IC的框圖如圖4。
此看門狗IC內(nèi)部包括三部分功能:
1.看門狗定時器輸出電路WDI、WDO管腳
看門狗的定時器,當(dāng)MR為低電平或WDI有電平變化時清零。當(dāng)定時器溢出,WDO輸出低電平。一旦定時器清零,WDO輸出高電平。
2.上電復(fù)位電路MR、VCC、RESET
當(dāng)VCC失敗或MR上有低電平,一旦上述條件消失,RESET輸出一個200ms寬度的低電平信號。因此,當(dāng)WDO直接連到MR管腳上后,RESET輸出一個周期為1.6S,低電平寬度為200ms的復(fù)位信號。
3.電源監(jiān)控電路PFI、PFO
PFI的輸入電平低于1.25V時,PFO輸出一個低電平。
根據(jù)IC的上述特點更改復(fù)位電路如圖五所示。
采用圖五所示電路,使看門狗IC實現(xiàn)看門狗電路和上電復(fù)位電路兩種功能。滿足帶操作系統(tǒng)的CPU啟動時間長,需通過電壓跌落試驗等要求。也可以滿足需要實現(xiàn)休眠功能要求的場景。此電路可以做為帶操作系統(tǒng)CPU或需實現(xiàn)休眠功能的CPU標(biāo)準(zhǔn)復(fù)位電路。由于單片機的啟動時間短,在無需休眠功能的場景下,單片機的復(fù)位電路可不使用圖五推薦電路。
[1]ADM706R.