硬件看門狗介紹
看門狗,又叫watchdog timer,主要用來監控、管理CPU的運行狀態,並對處於異常狀態中的CPU進行復位操作,使其能重新工作。
看門狗可分為硬件看門狗和軟件看門狗兩種。
硬件看門狗的主體是壹個定時電路,並由被監控CPU提供周期性?餵狗?信號,對定時器清零(俗稱?清狗?)。CPU正常工作時,由於能定時?清狗?,看門狗內的定時器不會溢出。當CPU出現故障,則不能繼續提供?清狗?信號,使得看門狗內定時器不斷累加而溢出,從而觸發壹個復位信號對CPU進行復位,使CPU重新工作。
軟件看門狗原理上壹樣,只是將硬件電路上的定時器用處理器的內部定時器代替,這樣可以簡化硬件電路設計,但在可靠性方面不如硬件定時器,比如系統內部定時器自身發生故障就無法檢測到。當然也有通過雙定時器相互監視,這不僅加大系統開銷,也不能解決全部問題,比如中斷系統故障導致定時器中斷失效。
看門狗本身不是用來解決系統出現的問題,在調試過程中發現的故障應該要查改設計本身的錯誤。加入看門狗目的是對壹些程序潛在錯誤和惡劣環境幹擾等因素導致系統死機而在無人幹預情況下自動恢復系統正常工作狀態。看門狗也不能完全避免故障造成的損失,畢竟從發現故障到系統復位恢復正常這段時間內是不能正常工作的。同時壹些系統也需要復位前保護現場數據,重啟後恢復現場數據,這可能也需要壹筆軟硬件的開銷。
1).MR#:Manual-Reset,手動復位輸入信號,低電平有效,當此管腳的輸入電平低於0.6V時,會觸發Reset#管腳輸出壹個復位信號,此管腳內部有 70uA 上拉電流。如要不使用此管腳,需要將此管腳接到VCC或者懸空,不可接地;
2).VCC:芯片工作電壓,接5V或3.3V;
3).GND:芯片參考地,直接與單板GND相連;
4).PFI:Power-Fail Comparator Input,電壓監控輸入管腳,當此管腳的輸入電壓低於1.25V時,FPO#及Reset#會輸出低電平信號;
5).PFO#:Power-Fail Output,電壓監控輸出管腳,當PFI的輸入電平低於1.25V時,輸出低電平,不使用此管腳時可將其懸空;
6).WDI:Watchdog Input,清狗信號輸入,WDI遇到壹個上升沿/下降沿,內部看門狗定時器都將清0。WDI的輸入信號超過1.6S不發生跳變時,看門狗內部定時器將會溢出並觸發WDO#輸出低電平;
7).WDO#:Watchdog Output,看門狗輸出,WDI超過1.6S不發生跳變時,WDO#將輸出低電平,另外,VCC低於1.25V時也會觸發WDO#輸出低電平;
8).RESET#:復位信號輸出,低電平有效,低電平寬度為200ms,Reset#信號只會被VCC或MR#觸發,WDO#有效時不會觸發Reset#,除非將WDO#接到RESET#上。
雖然MAX706與ADM706芯片在封裝上相互兼容,但兩者還是存在壹些差異,具體如下:
1).MAX706R是商業級器件,工作溫度範圍為:0-70 oC,而ADM706R是工業級器件,工作溫度範圍為:-40-85 oC,所以大家在選型的時候,壹定要產品的工作環境是否對溫度有要求;
2).MAX706R的最小復位脈沖寬度為140ms,ADM706R的最小脈沖寬度為160ms;
3).ADM706R的WDI管腳若懸空處於高阻狀態時會禁止芯片工作,所以設計時,需要將WDI管腳通過4.7K電阻上拉到VCC。而MAX706不能被禁止,壹上電就開始工作,所以WDI不需要上拉;
4).ADM706R的PFO#信號不但會被PFI信號觸發,同時也會被MR#信號觸發,當MR#出現負電平時,會觸發PFO#輸出10KHz方波並保持,但MAX706的PFO#僅僅和輸入PFI有關,不會受MR#管腳電平的影響;
5).當MR#出現低電平時,對於MAX706芯片,WDO#將先於RESET#跳變,而ADM706卻相反,WDO#後於RESET#跳變。
為了使硬件看門狗更可靠,使用起來更靈活,當今主流的設計方式都是看門狗芯片配合邏輯器件(CPLD)來使用。
此時,看門狗有三種清狗方式:
1).正常工作時,CPU輸出WDI信號清狗;
2).CPU關閉看門狗(不輸出WDI信號),由CPLD輸出WDI清狗信號,此方法不推薦使用,容易出問題,有的設計規範中是嚴禁CPU關閉看門狗的;
3).CPU掛死後,CPLD主動輸出WDI清狗信號壹段時間,如果CPU仍未恢復正常,則不再繼續清狗,等待看門狗芯片內部定時器溢出後輸出復位信號對CPU進行復位。
在CPU上電啟動期間內,是不能輸出WDI信號去清狗的,而外部硬件看門狗是壹上電就開始工作的,CPU的啟動時間壹般在壹兩分鐘,而看門狗的定時器只有1.6s,超過這個時間不清狗就會輸出復位信號對CPU進行復位,如果這樣的話,CPU就會每隔1.6s重啟壹次,不能正常工作,如何規避這種問題的?
在實際設計中是這樣做的,如下圖所示,在CPU上電啟動的這段時間內,利用系統時鐘信號CLK清狗,等CPU啟動完成後,SWITCH自動將清狗信號切換成WDI。定時器和切換開關(SWITCH)是用邏輯模擬的,定時器的溢出時間可設(壹般比CPU啟動時間稍長壹點點),等CPU啟動完成後,定時器也隨之溢出,並產生溢出信號,SWITCH接收到此溢出信號後,立即采取動作,將清狗信號從系統時鐘切換到WDI。