在由單片機構成的微型計算機系統中,由于單片機的工作常常會受到來自外界電磁場的干擾,造成程序的跑飛,而陷入死循環,程序的正常運行被打斷,由單片機控制的系統無法繼續工作,會造成整個系統的陷入停滯狀態,發生不可預料的后果,所以出于對單片機運行狀態進行實時監測的考慮,便產生了一種專門用于監測單片機程序運行狀態的芯片,俗稱“看門狗”(watchdog)
其作用是使單片機可以在無人狀態下實現連續工作,其工作原理是:看門狗芯片和單片機的一個I/O引腳相連,該I/O引腳通過程序控制它定時地往看門狗的這個引腳上送入高電平(或低電平),這一程序語句是分散地放在單片機其他控制語句中間的,一旦單片機由于干擾造成程序跑飛后而陷入某一程序段 進入死循環狀態時,寫看門狗引腳的程序便不能被執行,這個時候,看門狗電路就會由于得不到單片機送來的信號,便在它和單片機復位引腳相連的引腳上送出一個復位信號,使單片機發生復位,即程序從程序存儲器的起始位置開始執行,這樣便實現了單片機的自動復位。
單片機看門狗電路的作用
看門狗的作用: 看門狗定時器是一個計數器,基本功能是在發生軟件問題和程序跑飛后使系統重新啟動。看門狗計數器正常工作時自動計數,程序流程定期將其復位清零,如果系統在某處卡死或跑飛,該定時器將溢出,并將進入中斷。在定時器中斷中執行一些復位操作,使系統恢復正常的工作狀態,即在程序沒有正常運行期間,如期復位看門狗以保證所選擇
的定時溢出歸零,使處理器重新啟動。軟件的可靠性一直是一個關鍵問題。任何使用軟件的人都可能會經歷計算機死機或程序跑飛的問題,這種情況在嵌入式系統中也同樣存在。由于單片機的抗干擾能力有限,在工業現場的儀器儀表中,常會由于電壓不穩、電弧干擾等造成死機。在水表、電表等無人看守的情況下,也會因系統遭受干擾而無法重啟。為了保證系統在干擾后能自動恢復正常,看門狗定時器(Watchdog Timer)的利用是很有價值的。
現今市面上流行的一些單片機,多嵌有內部WDT,如TI的MSP430系列,Philips的P87XXX和P89XXX系列,Microchip的PIC列,Atmel的AT89SXX系列和Holtek公司的Htxxx系列。但是這些內部看門狗在工作時,多存在一定的誤差。一些工程師在設計的過程中,由于忽略了這一點,導致系統出現異常。MSP430系列單片機是美國德州儀器公司(TI)近幾年開發的新一代單片機,該系列是一款16位、具有精簡指令集、超低功耗的全新概念混合型單片機。在眾多單片機系列中,由于它具有極低的功耗、豐富的片內外設和方便靈活的開發手段,已成為一顆耀眼的新星。其內部自帶看門狗及復位電路,理論上如果程序跑飛,可用看門狗將其復位。但在實際使用過程中,發現看門狗的作用并非萬無一失,以下實驗證明了這一點。實驗電路如圖1所示。
試驗程序清單:
#include《msp430x12.h》
void main(void){
p1dir l=0x0f; //設置p1.2-.p1.0為輸出
for(;;){
volatile unsigned int i;
wdtctl=wdtpw+wdtcncl;
//復位wdt
piout==0x0t;
i=5000;
do(i--)
while(i!=0);
}}
上述實驗啟動后,如果程序正常運行,LED會閃爍。缺省時,MSP430的看門狗是允許狀態,所運行的程序會不斷地訪問看門狗。理論上,這個系統是不會發生啟動失敗的,因為即使啟動失敗,看門狗也應該在數百毫秒內啟動,復位整個系統?;谶@種思想,對單片機的復位進行測試。K2斷開,用K1連續產生。Reset信號,測試看門狗使系統重啟的成功率。K2閉合,則reset端高電平,理論上K1不能有效產生復位脈沖,觀察看門狗是否起作用。
實驗結果與分析
實驗結果如下:K2斷開,連續開關K1,上電重啟系統,平均155次失敗1次(LED不閃),即看門狗失效概率0.6%;K2閉合,連續開關K1,平均18次失敗1次(LED不閃),且一旦失敗,將連續失敗下去,看門狗無效率占到了約5.5%。另外,當采用同樣具有內置看門狗的其他系列單片機替代實驗中的MSP430,啟動程序段作相應修改時,實驗結果仍大致相同,這說明具有內置看門狗的單片機面臨的問題是相同的。經分析可能有如下原因:
①由于看門狗的時鐘不獨立,計數時鐘與系統為同一分頻鏈路,因此看門狗不能在系統出現問題時有效運作。
②由于時鐘可用軟件設置,啟動失敗時,開機時鐘可能處于空檔,沒有時鐘看門狗不能生效。
③有些看門狗需要用軟件設置或啟動,因此啟動失敗后,初始化程序沒有激活,CPU可能跳轉到隨機代碼,使看門狗被禁止。這樣的看門狗是需要有可靠的上電復位作保證的,因此,從理論上講,原設計存在著不合理性。基于上述分析,采用片外看門狗專用芯片TPS3823由獨立的分頻振蕩電路提供計數脈沖。實驗電路如圖2所示。
上述電路中,TPS3823輸出定時溢出信號給Reset端。程序段中,CPU要不斷地通過I/O口輸出喂狗信號,使看門狗計數器清零。在此電路中重復上述試驗中K1、K2的相同動作,系統重啟成功率達到100%。
未來的內置看門狗必須有獨立可靠的時鐘。系統上電后,看門狗即為允許狀態,無需軟件設置,它只能被外部硬件跳線或內部熔絲(fuse)所禁止。目前,如果要求設計可靠性較高的嵌入式系統,外置看門狗是必須考慮的。內置看門狗的另一問題是系統復位后,程序應判斷是由Reset端正常上電復位,還是程序跑飛看門狗所致,由此確定現場數據是否應該保留。這也是在看門狗應用中所應考慮的。
看門狗系統設計技巧
外部看門狗是嵌入式系統工程師工具箱里重要且關鍵的工具,然而為了捕捉到故障,且預防故障的發生,看們狗必須設計得當。因此設計一個看門狗系統時應考慮以下5個秘訣。
技巧1—監測心跳
一個外部看門狗須具備的最簡單功能是監測由主應用處理器產生的一個定期“心跳(Heartbeat)”信號,以及在心跳異常時發出一個錯誤信號。心跳監測可做為兩種不同的用途:首先,在經過已在軟件執行的功能檢查之后,微控制器(MCU)應該只是生成心跳,以確保軟件的正常工作。第二,如果系統的實時響應已受到損害,心跳應該要能顯示出來。
為軟件功能和實時響應監測心跳,可透過一個使用簡單,“啞巴(Dumb)”的外部看門狗。外部看門狗應該有沿著一個心跳必須出現的窗口的能力調派一個心跳周期,心跳窗口的作用是當系統的實時響應受到損害時,允許看門狗進行檢測。而在該功能或實時檢查失敗的情況下,看門狗會試圖透過應用處理器的重置來恢復系統。
技巧2—采用一個低效能MCU
簡易基于定時器的外部看門狗可在相對低成本的狀況下監控心跳,但這會嚴重限制看門狗系統的能力和恢復的可能性。其實,低效能微控制器就可以做為外部看門狗的定時器,所以何不為看門狗增添一些智能且采用微控制器呢?微控制器的固件(Firmware)可被開發用來滿足增加許多功能的心跳監測窗口所需。
一個“聰明”的看門狗有時被稱為監督者或安全看門狗,且已在不同的產業,如汽車領域實際使用了許多年;另外,通常基于微控制器的看門狗以被主要用于安全關鍵應用。目前開發工具已相當可用且硬件成本也低,這樣的設計具成本效益,且在其他的應用中亦是如此。
技巧3—監督關鍵的系統功能
使用一個小微控制器作為看門狗的決定,可開啟看門狗該如何使用的無限可能。其中可賦予智能看門狗的第一個角色通常是監督的重要系統功能,如系統電流或傳感器狀態??撮T狗如何能監督電流的一個例子是,采取一個電流的獨立測量,并提供監測值給應用處理器,之后,應用處理器可比較看門狗與自身讀取到的數值。若是兩者之間有分歧,則系統將執行故障樹(FaultTree)此一被應用程序視為適當的方式。
技巧4—觀察一個信道
有時嵌入式系統可像個看門狗且應用處理器也可以如期工作,但外部的檢查員是處于非響應的狀態。在這樣的狀態下,綁定智能看門狗到一個信道如通用異步收發器(UART)是可行的。當看門狗被連接到信道時,不僅可以監控通道流量,還可以接收對看門狗而言的特定指令。
在這方面一個很好的例子是專為小型衛星設計的看門狗,其可監視飛行器計算機和地面基地臺間的無線電通信。如果飛行器計算機變得不響應無線電,看門狗將接收到一個命令,然后執行并重置飛行器計算機。
技巧5—考慮外部定時重置功能
采用一個微控制器執行看門狗,會有額外功能增加其復雜性,以及一個新軟件單元到系統的設計,因此,系統中看門狗的問題無疑是由工程師的頭腦來監看。在看門狗自行“放大假”的情況下,其將如何恢復?
選擇之一是使用前面討論的啞巴外部看門狗定時器。智能看門狗會由啞巴看門狗的定時器,使其從被重置的狀況下生成心跳;另一個選擇是讓應用處理器的行為就像個看門狗。這里須小心思考,給予最佳的方式以確保兩個處理器如預期地保持正常狀態。
簡單設計確保看門狗可行性
智能看門狗的目的是監測系統和主微控制器,以確保它們依預期運作。在系統設計中,看門狗可允許其所支持的非常多功能,開發者需要牢記,增加智能看門狗復雜度的可能性,且看門狗本身須包含潛在的故障模式和錯誤。更重要的是,看門狗的設計應保持簡單與采用最小的必要功能集,將可確保其可被徹底測試和驗證。
看門狗技術及其抗干擾措施
隨著工業自動化水平的不斷提高,以MCS-51單片機為核心所構成的單片機應用系統得到了廣泛應用,如水泥生料配料系統、電子皮帶秤給料控制、各種現場智能測量儀表等。但其工作現場條件惡劣,干擾多而且幅度大,嚴重影響著應用系統的正常運行與可靠性,甚至使應用系統計算機進入死循環而癱瘓,通常稱為程序“跑飛”。由此引出的計算機可靠性問題,一直是人們研究的重要課題。
采用屏蔽、濾波、退耦、隔離、接地等措施能有效地提高系統的抗干擾能力,但很難在強干擾發生時消除因程序“跑飛”而死機情況的發生。“看門狗”技術能在程序“跑飛”時實現自我診斷并使系統恢復運行,是單片機應用系統抗干擾的有力武器。當然,它是以系統的硬、軟件設計開發的合理和成熟為條件的,否則將掩蓋系統設計開發過程中的人為缺陷與不足。
“看門狗”技術及其對干擾的抑制
1、程序“跑飛”對系統的攻擊
?。?)程序計數器PC的值被攻擊,成為一隨機拼合的數據。
(2)系統設置的控制字與標志參數因“跑飛”后可能被訪問而被攻擊。
?。?)數據存儲器RAM內容被攻擊等。
2、 “看門狗”技術
“看門狗”源于“Watch dog、Watch dog timer”,或稱定時監視技術,其本質是一可復位的定時器,其原理如圖1、2所示。
在程序正常運行時,計算機通過程序以周期T1向定時器發送脈沖觸發定時器(或通過軟件以T1為周期初始化定時器),而由定時脈沖控制的定時器動作時間為T2(T3),在T1<T2(T3)時,定時器不會動作,處于休眠狀態。當計算機受到強干擾等作用破壞后,程序計數器PC中內容不再是程序的正確代碼,而可能為一隨機拼合的數據,這樣會使取指不正確,必然導致程序運行混亂“跑飛”,進入死循環而死機。反過來由于程序脫離正常循環,也使定時器觸發脈沖丟失,在經過T2(T3)時間后,“看門狗”定時器被激活,向CPU發出Reset信號使其復位,將“跑飛”的程序從PC=0000H開始,納入正常軌道。但有些生產過程是不能從頭開始的,應用程序均是一循環體,且在開始處均有初始化程序,包含各種寄存器、指針、變量、控制字等。此時狀態不能反應“跑飛”時的狀態,有時還有人身、設備等方面的安全危險。在這種情況下,程序“跑飛”后應設法找到出錯時的斷點,此時就可以采用二級“看門狗”的方式。由程序設計時優先級設置為最高級的定時器一先發出中斷請求信號,CPU響應中斷轉向中斷處理程序,進而恢復系統。第二級“看門狗”電路只有在第一級未起作用時經過T3才起動Reset信號。
3、 “看門狗”技術的實施方法
(1)在系統構成時選用芯片內帶有“看門狗”電路的單片機,如ATMEL公司的89C52等。
(2)選配專門的“看門狗”電路,如美國Xicor公司的X25043/45、MAXIM公司的MAX813L等,它們均可構成獨立的“看門狗”電路。
?。?)采用計數器、單穩態觸發器、定時器等器件構成。在圖3中用4060構成了一個二級“看門狗”電路。
因/I/N/T/O中斷入口0003H處僅有0003H~000AH單元可為中斷服務程序所用,很可能容納不下中斷服務程序,故應在其內安排一條JMP Watch dog指令。由于“跑飛”,PC值在響應中斷前已被破壞,在響應中斷后,該內容自動被壓入堆棧,故一定要用兩條POP A指令將無用內容彈出,以便為中斷返回時由堆棧給PC賦予“跑飛”處的正確值,這一點在設計中斷服務程序時尤其要引起重視。通過對P1.0取反,恢復對4060的觸發脈沖。在中斷服務中應安排被破壞數據的診斷、修復以及查找“跑飛”處的地址正確入口,并在返回前將其壓棧。當執行RETI時,“跑飛”處斷點地址入口自動彈棧到PC,恢復正常運行。P1.0取反指令在何處插入應通過計算指令周期讓兩條CLR P1.0指令間隔小于定時器的定時時間T1<T2,可取T2=(1.5~2)T1。
?。?)利用8031片內定時器/計數器 8031片內有兩個十六位的定時器/計數器,可用定時器T0。在應用程序對T0初始化時,將其定時時間T2設置得比應用程序循環體執行時間T1長,可?。篢2=(1.5~2)T1。當程序正常時,T0不會溢出,“跑飛”時溢出,定時器/計數器控制寄存器TCON的TF0(TCON.5)由8031內部硬件置位TF0=1,發出中斷信號。設8031采用12MHz晶振,經定時器內部12分頻后得1MHz的定時時鐘,對應定時時間1μs,最長可定時約65.5ms,如應用程序循環時間T1=10ms,則可取T2=2T1=20ms,定時器的初值X可由下式確定:
(216-X)×1μs=20ms
X=45536D=B1EOH
定時器的初始化程序:
MOV TLO,#OEOH
MOV THO,#OB1H;定時器/計數器T0寫入初值
MOV TMOD,#O1H;設置定時器/計數器工作方式1
SETB TRO; 起動定時器/計數器T0
在應用程序的系統初始化時用下面指令設定T0優先級:
SETB EA; 開放中斷
SETB ETO; 允許T0中斷
SETB PTO; 置T0中斷優先級最高
T0中斷服務流程與/I/N/T/O中斷服務流程(見圖4)相比,其中斷入口為000BH,去掉P1.0取反的指令,其余相同??績炏燃墑e最高的中斷將控制權重新奪回交給CPU,使系統恢復正常。
6
4、 斷點的查找與恢復
斷點的查找與恢復是人們最關注的問題,我們的方法是擴展一外部數據存儲器,用以存儲“跑飛”前斷點(或接近斷點)的PC之值以及一些重要的變量、指針及控制字的值。利用正常工作時P1.0向“看門狗”發送的觸發脈沖經反向、延時等作為外部擴展RAM的片選信號以T1為周期定時對外部RAM中內容進行刷新。當“跑飛”后因觸發脈沖丟失而避免了外部RAM被攻擊,保證其內容的可靠性。隨著T1的減少,被恢復的值就愈趨近斷點值,但要非常準確找到斷點,還值得人們研究。在中斷響應時由于P1.0恢復了輸出觸發脈沖,故可將斷點值讀出。
結束語
“看門狗”是對付“跑飛”的有力手段,在生產過程中由于特定的生產條件使得“看門狗”技術有其相當的作用。我們在對某水泥廠微機配料系統的技術改造過程中采用了二級“看門狗”技術,該系統運行兩年多來經受住了各種強干擾的考驗,取得了令人滿意的效果。
對于“跑飛”后的診斷、恢復,尤其是如何更準確地找到程序“跑飛”斷點,對被損數據加以恢復等方面盡管有許多軟件可以利用,但還是值得人們多加關注的問題。
評論
查看更多