嵌入式系統的軟件看門狗和硬件看門狗

原文鏈接:http://forum.eepw.com.cn/thread/303364/1

本文從原理、異同、舉例來說明硬件軟件看門狗怎麼選擇:

一、 硬件看門狗的原理

硬件看門狗是利用一個定時器電路,其定時輸出連接到電路的復位端,程序在一定時間範圍內對定時器清零(俗稱“喂狗”),因此程序正常工作時,定時器總不能溢出,也就不能產生復位信號。

如果程序出現故障,不在定時週期內復位看門狗,就使得看門狗定時器溢出產生復位信號並重啓系統。

我們以ADI公司的ADM6316看門狗芯片爲例。

0.png

圖1 :看門狗芯片功能框圖

該看門狗芯片的主要功能有:

1. 可以監控主電源VCC,26種復位閾值選項:2.5 V至5 V,以100 mV遞增;

2. 4種復位延遲選項:1 ms、20 ms、140 ms、1120 ms(最小值);

3. 4種看門狗喂狗超時選項:6.3 ms、102 ms、1600 ms、25.6 s(典型值);

4. 支持手動復位輸入;

5. 復位輸出級:推輓低電平有效,開漏低電平有效,推輓高電平有效;

復位功能說明:

該芯片內置復位功能。設備上電時,芯片的VCC電壓一旦到達開啓閾值電壓Vth,延遲定時器啓動,經過延遲時間Trp,復位信號RESET或者/RESET即可輸出,實現設備的延遲上電覆位;芯片同時會監測VCC的電壓,一旦VCC跌落到Vth以下,經過延遲時間Rrd後,復位信號輸出電平翻轉,實現設備的復位。

圖片2.png

圖2 :復位功能時序圖

看門狗功能說明:

該芯片內置看門狗功能,設備上電時,芯片的VCC電壓一旦到達開啓閾值電壓Vth,延遲定時器啓動,經過延遲時間Trp,復位信號RESET或者/RESET即可輸出,實現設備的延遲上電覆位;當喂狗信號WDI收到第一個脈衝電平時,就出發芯片內部的定時器,軟件必須在Twd時間內輸出喂狗信號WDI,否則復位信號/RESET將會在定時時間TWd到達時,進行復位,設備重新復位。

圖片3.png

圖3:看門狗功能時序圖

二、 軟件看門狗的原理

軟件看門狗原理上一樣,只是將硬件電路上的定時器用處理器的內部定時器代替,這樣可以簡化硬件電路設計,一般是將一個芯片中的定時器來作爲看門狗,通過程序的初始化,寫入初值,並啓動定時器。程序按時對定時器賦初值(或復位),以免它餓了。

這種看門狗是可以被禁用的(只要停止這個定時器即可),好比對那隻要咬你的狗來個“葵花點穴手”, 大部分CPU都內置看門狗,硬件原理可參考各芯片數據手冊。

優點:可以通過程序改變初始時間,也可以隨時禁用。

缺點:需要初始化,如果程序在初始化、啓動完成前跑飛或在禁用後跑飛,看門狗就無法復位系統,這樣看門狗的作用就沒有了,系統恢復能力降低。

圖片4.png

圖4:軟件看門狗功能示意圖

三、 軟、硬件看門狗的主要異同

學習了上述的軟硬件看門狗,我們總結一下兩者的異同。

兩者相同點如下:

1) 都是通過定時器實現;定時時間到沒有喂狗就進行復位。

2) 都是需要在規定的時間內喂狗。

3) 兩者都是靠軟件進行喂狗。

兩者的主要差異如下:

1) 附加功能:硬件看門狗芯片一般還附帶了延遲復位和電源檢 測的功能,軟件則沒有。

2) 屏蔽方法:軟件看門狗很容易屏蔽關閉,只需修改其中的寄存器,而硬件看門狗一旦啓動不斷電就停不下來。

3) 啓動方式:軟件看門狗很容易啓動,只需修改其中的寄存器。硬件一般是收到第一個喂狗信號後就啓動。

4) 初始化:硬件看門狗上電後收到第一個喂狗脈衝就完成了初始化,軟件看門狗則需要配置相關的寄存器(或者調用相關的看門狗子程序)。

四、 一個軟件看門狗搞不定的案例

項目組研發一款戶外遠程採集器,應用場景包括偏僻的郊外,對可靠性要求很高,出現故障後或者遠程升級後能夠自動復位重啓。爲了節省成本,該產品採用主芯片內置的看門狗功能。主芯片其他資源初始化完成後,再初始化看門狗功能。產品批量後,遠程升級過程中,大概有5%的概率設備升級後變磚,需要人工斷電後再上電才能恢復正常。

經過研發人員分析,軟件的看門狗的流程如下圖,一小部分設備,在升級程序過程,出現了死機的問題,程序還沒有運行到初始化看門狗的階段,看門狗無法生效,導致設備處於一直死機的狀態,人工斷電重啓後恢復正常。

圖片5.png

圖5:軟件看門狗流程圖

經過改良升級,研發人員使用了硬件看門狗,上電瞬間就依賴上拉電阻形成的高脈衝開啓看門狗,看門狗的延遲最遲喂狗時間爲1.8S,評估升級+初始化時間最遲爲1.2S,所以該看門狗芯片滿足要求,一旦1.8S內應用程序還無法喂狗,則復位重啓,問題得以解決。

圖片6.png

圖6:硬件看門狗流程圖

五、 總結

軟件和硬件的看門狗的最主要差異在於開啓看門狗的時機,軟件看門狗必須初始化(配置)看門狗才能使用,如果軟件看門狗是廠商提供的SDK中的一個API接口,開發者又沒有能力修改底層的uboot、內核,無法在uboot、內核階段開啓和喂狗,開啓看門狗的時機就很晚了,程序就有可能還沒有跑到看門狗初始化就掛了,中間的各種幺蛾子都不受控,就像上述的案例。

而硬件看門狗開啓則不受軟件的約束,設備上電就可以依賴上拉電阻提供的高脈衝開啓看門狗,只要軟件不及時喂狗,就復位,這個是無條件的。所謂一分錢一分貨,在電子產品也是適用的。

當然,如果你能說服驅動工程師,能夠在主芯片上電第一時間,就初始化和開啓軟件看門狗,理論上,軟件看門狗也可以做的和硬件看門狗一樣可靠。

文章來源:http://forum.eepw.com.cn/thread/303364/1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章