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