說到提高系統(tǒng)的可靠性,剛?cè)腴T的工程師都知道,增加一個看門狗是重要的手段。看門狗又分軟件看門狗和硬件看門狗,但是很多人可能沒有深入了解其中的區(qū)別,工作中可能都遇到這樣的PK:
??軟件和硬件看門狗有什么區(qū)別?學(xué)完這篇文章就可以迎刃而解了。
1、硬件看門狗的原理
硬件看門狗是利用一個定時器電路,其定時輸出連接到電路的復(fù)位端,程序在一定時間范圍內(nèi)對定時器清零(俗稱“喂狗”),因此程序正常工作時,定時器總不能溢出,也就不能產(chǎn)生復(fù)位信號。如果程序出現(xiàn)故障,不在定時周期內(nèi)復(fù)位看門狗,就使得看門狗定時器溢出產(chǎn)生復(fù)位信號并重啟系統(tǒng)。
我們以ADI公司的ADM6316看門狗芯片為例。
??該看門狗芯片的主要功能有:
??1.可以監(jiān)控主電源VCC,26種復(fù)位閾值選項(xiàng):2.5 V至5 V,以100 mV遞增;
??2.4種復(fù)位延遲選項(xiàng):1 ms、20 ms、140 ms、1120 ms(最小值);
??3.4種看門狗喂狗超時選項(xiàng):6.3 ms、102 ms、1600 ms、25.6 s(典型值);
??4.支持手動復(fù)位輸入;
??5.復(fù)位輸出級:推挽低電平有效,開漏低電平有效,推挽高電平有效。
??復(fù)位功能說明:
??該芯片內(nèi)置復(fù)位功能。設(shè)備上電時,芯片的VCC電壓一旦到達(dá)開啟閾值電壓VTH,延遲定時器啟動,經(jīng)過延遲時間tRP,復(fù)位信號RESET或者/RESET即可輸出,實(shí)現(xiàn)設(shè)備的延遲上電復(fù)位;芯片同時會監(jiān)測VCC的電壓,一旦VCC跌落到VTH以下,經(jīng)過延遲時間tRD后,復(fù)位信號輸出電平翻轉(zhuǎn),實(shí)現(xiàn)設(shè)備的復(fù)位。
??看門狗功能說明:
??該芯片內(nèi)置看門狗功能,設(shè)備上電時,芯片的VCC電壓一旦到達(dá)開啟閾值電壓VTH,延遲定時器啟動,經(jīng)過延遲時間tRP,復(fù)位信號RESET或者/RESET即可輸出,實(shí)現(xiàn)設(shè)備的延遲上電復(fù)位;當(dāng)喂狗信號WDI收到第一個脈沖電平時,就觸發(fā)芯片內(nèi)部的定時器,軟件必須在tWD時間內(nèi)輸出喂狗信號WDI,否則復(fù)位信號RESET或者/RESET將會在定時時間tWD到達(dá)時,進(jìn)行復(fù)位,設(shè)備重新復(fù)位。
2、軟件看門狗的原理
軟件看門狗原理上一樣,只是將硬件電路上的定時器用處理器的內(nèi)部定時器代替,這樣可以簡化硬件電路設(shè)計(jì),一般是將一個芯片中的定時器來作為看門狗,通過程序的初始化,寫入初值,并啟動定時器。程序按時對定時器賦初值(或復(fù)位),以免它餓了。
??這種看門狗是可以被禁用的(只要停止這個定時器即可),好比對那只要咬你的狗來個“葵花點(diǎn)穴手”,大部分CPU都內(nèi)置看門狗,硬件原理可參考各芯片數(shù)據(jù)手冊。
??優(yōu)點(diǎn):可以通過程序改變初始時間,也可以隨時禁用。
??缺點(diǎn):需要初始化,如果程序在初始化、啟動完成前跑飛或在禁用后跑飛,看門狗就無法復(fù)位系統(tǒng),這樣看門狗的作用就沒有了,系統(tǒng)恢復(fù)能力降低。
3、軟硬件看門狗的主要異同
學(xué)習(xí)了上述的軟硬件看門狗,我們總結(jié)一下兩者的異同。
??兩者相同點(diǎn)如下:
??1) 都是通過定時器實(shí)現(xiàn);定時時間到?jīng)]有喂狗就進(jìn)行復(fù)位。
??2) 都是需要在規(guī)定的時間內(nèi)喂狗。
??3) 兩者都是靠軟件進(jìn)行喂狗。
??兩者主要差異如下:
??1) 附加功能:硬件看門狗芯片一般還附帶了延遲復(fù)位和電源檢 測的功能,軟件則沒有。
??2) 屏蔽方法:軟件看門狗很容易屏蔽關(guān)閉,只需修改其中的寄存器,而硬件看門狗一旦啟動不斷電就停不下來。
??3) 啟動方式:軟件看門狗很容易啟動,只需修改其中的寄存器。硬件一般是收到第一個喂狗信號后就啟動。
??4) 初始化:硬件看門狗上電后收到第一個喂狗脈沖就完成了初始化,軟件看門狗則需要配置相關(guān)的寄存器(或者調(diào)用相關(guān)的看門狗子程序)。
4、一個軟件看門狗搞不定的案例
項(xiàng)目組研發(fā)一款戶外遠(yuǎn)程采集器,應(yīng)用場景包括偏僻的郊外,對可靠性要求很高,出現(xiàn)故障后或者遠(yuǎn)程升級后能夠自動復(fù)位重啟。為了節(jié)省成本,該產(chǎn)品采用主芯片內(nèi)置的看門狗功能。主芯片其他資源初始化完成后,再初始化看門狗功能。產(chǎn)品批量后,遠(yuǎn)程升級過程中,大概有5%的概率設(shè)備升級后變磚,需要人工斷電后再上電才能恢復(fù)正常。
??經(jīng)過研發(fā)人員分析,軟件的看門狗的流程如下圖,一小部分設(shè)備,在升級程序過程,出現(xiàn)了死機(jī)的問題,程序還沒有運(yùn)行到初始化看門狗的階段,看門狗無法生效,導(dǎo)致設(shè)備處于一直死機(jī)的狀態(tài),人工斷電重啟后恢復(fù)正常。
??經(jīng)過改良升級,研發(fā)人員使用了硬件看門狗,上電瞬間就依賴上拉電阻形成的高脈沖開啟看門狗,看門狗的延遲最遲喂狗時間為1.8S,評估升級+初始化時間最遲為1.2S,所以該看門狗芯片滿足要求,一旦1.8S內(nèi)應(yīng)用程序還無法喂狗,則復(fù)位重啟,問題得以解決。
5、總結(jié)
軟件和硬件的看門狗的最主要差異在于開啟看門狗的時機(jī),軟件看門狗必須初始化(配置)看門狗才能使用,如果軟件看門狗是廠商提供的SDK中的一個API接口,開發(fā)者又沒有能力修改底層的uboot、內(nèi)核,無法在uboot、內(nèi)核階段開啟和喂狗,開啟看門狗的時機(jī)就很晚了,程序就有可能還沒有跑到看門狗初始化就掛了,中間的各種幺蛾子都不受控,就像上述的案例。
??而硬件看門狗開啟則不受軟件的約束,設(shè)備上電就可以依賴上拉電阻提供的高脈沖開啟看門狗,只要軟件不及時喂狗,就復(fù)位,這個是無條件的。所謂一分錢一分貨,在電子產(chǎn)品也是適用的。
??當(dāng)然,如果你能說服驅(qū)動工程師,能夠在主芯片上電第一時間,就初始化和開啟軟件看門狗,理論上,軟件看門狗也可以做的和硬件看門狗一樣可靠。
審核編輯黃宇
-
看門狗
+關(guān)注
關(guān)注
10文章
560瀏覽量
70789
發(fā)布評論請先 登錄
相關(guān)推薦
評論