看門�,又叫 watchdog timer,是一�定時�電路, 一般有一個輸�,叫喂�(kicking the dog or service the dog),一個輸出到MCU的RST�,MCU正常工作的時�,每隔一端時間輸出一個信號到喂狗�,� WDT 清零,如果超過�(guī)定的時間不喂�,(一般在程序跑飛�),WDT 定時超過,就會給出一個復(fù)位信號到MCU,是MCU�(fù)�. 防止MCU死機. 看門狗的作用就是防止程序�(fā)生死循環(huán),或者說程序跑飛� 出于�單片�運行狀�(tài)進行實時�(jiān)測的考慮,�(chǎn)生了一種專門用于�(jiān)測單片機程序運行狀�(tài)�芯片,俗稱"看門�"(watchdog)
看門狗定時器是一個獨立于CPU的計�(shù)單元,如果不采用特定的指令周期地使看門狗定時器�(fù)位,看門狗單元將會使系統(tǒng)�(fù)�。為了避免不必要的復(fù)位,要求用戶軟件周期地對看門狗定時器進行�(fù)位操�。如果不明原因使CPU中斷程序,比如系�(tǒng)軟件進人了一個死循環(huán)或者CPU的程序運行到了不確定的程序空�,從而使系統(tǒng)不能正常工作,則看門狗電路將�(chǎn)生一個復(fù)位信號使CPU�(fù)位,程序從系�(tǒng)軟件的開始執(zhí)�。通過這種方式,看門狗就可以�(jiān)測軟件和硬件的運行狀�(tài),提高了系統(tǒng)的可靠��
F28l2/F281O DSP上的看門狗與240x器件上的基本相同,當(dāng)8位的看門狗計�(shù)器計�(shù)到值時,看門狗模塊產(chǎn)生一個輸出脈沖(512個振蕩器時鐘寬度)。如果不希望�(chǎn)生脈沖信�,則需要屏蔽計�(shù)�,或用軟件周期地向看門狗復(fù)位控制寄存器�0x55+OxAA,該寄存器能夠使看門狗計�(shù)器清�。圖1為看門狗的功能框圖�
WDINT信號使能看門狗作為IDLE/STANDBY模式喚醒的定時器。在STANDBY模式�,所有外�(shè)都將被關(guān)�,只有看門狗起作用。WATCHDOG模塊將脫離PLL時鐘運行。WDINT信號反饋到LPM +H�,可以將器件從STANDBY模式喚醒。在IDI'E模式�,WDINT信號能夠向CPU�(chǎn)生中斷(該中斷為WAKEINT)使CPU脫離IDLE工作模式。在HALT模式下,Pl-I-和OSC單元被關(guān)�,因此不能實�(xiàn)上述功能�
�1 看門狗功能框�
在看門狗計�(shù)器(WDCNTR)溢出之�,如果采用正確的時序向WDKEY寫人�(shù)�(jù)就可以使WDCNTR�(fù)�。當(dāng)向WDKEY�0x55�,WDCNTR�(fù)位到使能位置;只有在向WDKEY�0xAA后才會使WDCNTR真正地復(fù)��0x55�0xAA以外的任何數(shù)�(jù)寫到WDKEY都會引起系統(tǒng)�(fù)�。只要向WDKEY�0x55�0xAA,無論寫的順序如何都不會�(dǎo)致系�(tǒng)�(fù)�,而只有先寫Ox55再寫OxAA才會使WDCNTR�(fù)位。表1列出了看門狗操作的幾種情況�
�1 看門狗操作實�
看門狗的�(yù)定標(biāo)寄存器可以用來提高看門狗的計數(shù)溢出周期。邏輯校驗位(WDCHK)是看門狗的另一個安全機�,所有訪問看門狗控制寄存器(WDCR)的寫操作中,相�(yīng)的校驗位(位5�3)必須是�101�,否則將會拒絕訪問并會立即觸�(fā)�(fù)�??撮T狗的�(nèi)部原理如�1所��
�1 看門狗內(nèi)部原理圖
看門狗復(fù)位電路主要是利用ARM正常工作�,定時復(fù)位計�(shù)�,使得計�(shù)器的值不超過某一�;當(dāng)ARM不能正常工作時,由于計數(shù)器不能被�(fù)�,因此其計數(shù)會超過某一值,從而產(chǎn)生復(fù)位脈�,使得ARM恢復(fù)正常工作狀�(tài)�
看門狗復(fù)位電路的可靠性主要取決于軟件�(shè)�,即將定時向�(fù)位電路發(fā)出脈沖的程序放在何處,在一般設(shè)計中,將此段程序放在定時器中斷服�(wù)子程序中。然�,有時這種�(shè)計仍然會引起程序工作不正�,原因主要是,當(dāng)程序異常�(fā)生在定時器初始化及開中斷之后�,這種情況就有可能不能由Watch dog�(fù)位電路校正回��
因為定時器中斷一直在�(chǎn)生,即使程序工作不正�,Watch dog也能被正常復(fù)位。為此可以使用定時器加預(yù)�(shè)的設(shè)計方�,即在初始化時壓入堆棧一個地址,在此地址�(nèi)�(zhí)行的是一條關(guān)中斷和一條死循環(huán)語句。在所有不被程序代碼占用的地址盡可能地用子程序返回指令代替,這樣,當(dāng)程序異常�,其進入陷阱的可能性將大大增加。而一旦進入陷阱,定時器就會停止工作并且�(guān)閉中�,從而使Watch dog�(fù)位電路產(chǎn)生一個復(fù)位脈沖將ARM�(fù)��
看門狗應(yīng)用程序如下所��
由看門狗WDT引發(fā)系統(tǒng)�(fù)位的電路�(jié)�(gòu)等效圖如圖所�。從該圖中可以看�,只有當(dāng)狀�(tài)信號SLEEP�1,即單片機處于非睡眠狀�(tài)時,看門狗超時溢出才會引�(fā)單片機的�(fù)位操�。而在單片機處于睡眠狀�(tài),即狀�(tài)信號SLEEP�0時,看門狗超時溢出會喚醒單片��
� 看門狗復(fù)位電路結(jié)�(gòu)等效電路
看門狗就是一個用獨立時鐘源提供的脈沖進行累加計數(shù)的計�(shù)器,無需任何外部元件。獨立的RC時鐘信號源是指RC振蕩器與OSC1(ULKIIN)引腳的外接RC振蕩�,OSC1和OSC2外接晶體振蕩器/陶瓷諧振器構(gòu)成的單片機系�(tǒng)時鐘是分離的。這就意味�,即使單片機進入系統(tǒng)時鐘停振的睡眠狀�(tài),監(jiān)視定時器WDT仍然能夠運行�
在單片機�(zhí)行程序期�,一次看門狗WDT超時溢出,將使單片機�(chǎn)生復(fù)位操作(稱為WDT�(fù)位)。如果單片機處于睡眠狀�(tài),一次看門狗WDT超時溢出將使單片機被喚醒,恢�(fù)正常運行狀�(tài),并且繼�(xù)�(zhí)行在進入睡眠之前被擱置的程序(稱為WDT喚醒��
每次看門狗超時溢�,都會使得狀�(tài)寄存器STATUS中的了T0位被�0,以記錄曾經(jīng)�(fā)生的這次看門狗溢出事�,供作程序查詢判斷用�
即當(dāng)WDTE�0�,看門狗WDT將被禁止;當(dāng)WDTE�1�,看門狗WDT將被啟用。就是說,只要WDTE被定義成1,以后在用戶程序中將再也無法禁止看門狗的運行�
若想不讓看門狗WDT�(fā)生超時溢出,在用戶程序中只能不停�、周期性地將看門狗計時器�0,使它不會因計數(shù)到超過值而溢��
看門狗計時器的計時周期取決于獨立RC振蕩源的頻率和計時器的寬度,同時在一定程度上受到工作電壓、環(huán)蟑溫度、制作工藝等因素的影��
另外,看門狗的超時周期還可以借助于分頻器以及分頻器的分頻�,在一定范圍內(nèi)改變和延長。分頻器是否配置給看門狗使�,可以通過用戶程序定義選項寄存器OPTION KEG的PSA位進行�(shè)置�
目前,在許多情況下,�(shè)計人員會用軟件實�(xiàn)以往由硬件才能完成的電路功能,其中部分原因是低成本的微處理器(μP)為大家提供了廣泛的選擇。軟件常常是解決問題成本、靈活性的方案,但它也迫使�(shè)計人員進行一些額外的測試以確保系�(tǒng)的可靠�。當(dāng)然,如果程序沒有代碼錯誤也就不存在上述問�,細心的測試能夠�1000條指令中減少1�10條錯�。而設(shè)計人員則希望�10�000條指令中出錯率不要超過十��
在臺式機系統(tǒng)中出�(xiàn)�(dǎo)致系�(tǒng)癱瘓的軟件錯誤并不可怕,因為用戶只需重新啟動系統(tǒng)即可,它只會造成少量�(shù)�(jù)的丟�。然�,對于運行在工控系統(tǒng)的軟件,系統(tǒng)則必須能夠在沒有人為干預(yù)的條件下恢復(fù)故障。這一特性在兩種情況下非常關(guān)鍵:一種是高有效性系�(tǒng),如服務(wù)器、電話系�(tǒng)以及生產(chǎn)線等;另一種是高可靠性系�(tǒng),因為這種系統(tǒng)一旦出�(xiàn)錯誤將造成傷害,如汽車、醫(yī)療設(shè)�、工�(yè)控制、機器人、自動門等。即使不考慮這些要求嚴格的應(yīng)�,系�(tǒng)在無需用戶干預(yù)的條件下自動(按下�(fù)位鍵或重新上�)從故障狀�(tài)下恢�(fù)也是很有益處�,這種�(shè)備的好處是顯而易見的,因為用戶不希望�(shè)備內(nèi)部出�(xiàn)問題。改善這類系統(tǒng)可靠性的一種簡單、有效的措施是采用看門狗電��
1看門�
看門狗實際上是一個計�(shù)�,它需要在一定的看門狗延時周期內(nèi)被清�,如果沒有清零動�,看門狗電路將�(chǎn)生一個復(fù)位信號以使系�(tǒng)重新啟動或建立一個非屏蔽中斷(NMI)并執(zhí)行故障恢�(fù)子程�。大多數(shù)看門狗電路是沿觸�(fā),這樣,無論是上升沿還是下降沿觸發(fā)看門狗的輸入�(WDI)通常都能夠清計數(shù)�。WDI引腳一般連接在處理器的一個I�0�,這條口線可由軟件觸發(fā)。圖1所示是微處理器通過在WDl腳發(fā)送脈沖清除看門狗定時器以防止復(fù)位的連接方式,實際上,清看門狗計�(shù)器的命令必須在主程序�(nèi)。如果看門狗沒有被清零,復(fù)位后軟件將從地址�0000(啟動程序)的子程序處開始運�。計算主程序的運行時間往往很困�,因為在此期間可能需要多次調(diào)用子程序,這與系統(tǒng)輸入有關(guān)。因�,設(shè)計人員常常選擇看門狗延時周期遠遠高于測試到的或計算出的循環(huán)時間。圖2所示是正常工作情況�(看門狗在延時周期�(nèi)被請�)的看門狗信號和�(fù)位信�。圖3所示為看門狗計�(shù)器溢出時引發(fā)一次復(fù)位的時序示意圖。工�(yè)�(biāo)準的看門狗電路延時周期一般在l00ms~2s范圍�(nèi),當(dāng)然,也有些可�(diào)節(jié)或定制的看門狗電路能夠覆蓋更寬的延時范圍(30ms至幾分鐘)。如果主程序的執(zhí)行時間對于看門狗電路而言過長,設(shè)計人員可以在主程序的不同部位多次�(zhí)行看門狗觸�(fā)命令,也可以選用看門狗延時周期更長的器件�
一種防止系�(tǒng)滯留在死循環(huán)的技�(shù)是在主程序的初始化部分將相應(yīng)的I/O引腳置為高電�,而在主程序的另一部分將其置為低電子。如果軟件在主程序的起始部分進入了死循環(huán),由于WDI始終保持高電�,看門狗將�(chǎn)生延時輸出而使系統(tǒng)�(fù)�。如果采用一個低-�-低的脈沖,看門狗將被清�,但系統(tǒng)仍處于阻塞狀�(tài)。為解決這個問題,一種比較成熟的方法是對程序中的多項任務(wù)進行�(jiān)�,并對每項任�(wù)�(shè)置一個標(biāo)志,只有�(dāng)全部�(biāo)志置位后,看門狗電路才被觸�(fā)。執(zhí)行全部任�(wù)的時間要比看門狗超出周期短。在更復(fù)雜的系統(tǒng)�,還存在一些潛在問�,如存儲器泄�、堆棧溢出等,此時系�(tǒng)同樣需要對這些情況進行�(jiān)�,盡管對這些問題的討論超出了本文的范�,但通過合理的程序設(shè)�、認真審核代碼或采用特殊的軟件工具也可以解決上述問題�
2 �(nèi)部看門狗與外部看門�
許多μP都集成了可編程看門狗功�,軟件控制可禁止其工�。通常�(nèi)置看門狗易受代碼錯誤的影響,它無法提供外部獨立看門狗電路所具有的保護能�,因此在對安全性能要求較高的應(yīng)用中(如自動門、醫(yī)療設(shè)�、機器人�),內(nèi)置看門狗是無法接受�,從而使管理層采用獨立的外部看門狗電�?,F(xiàn)利用外部看門狗電路降低高可靠性系�(tǒng)的風(fēng)險是一個極好的嘗試�
2�1簡單的看門�+�(fù)�
�??撮T狗延時將重新�(fù)位系�(tǒng),大多數(shù)看門狗電路與 μP�(fù)位集成在一�,它同時可以�(jiān)視處理器的供電電�。在出現(xiàn)看門狗延時或電源電壓跌落的情況下均可�(chǎn)生復(fù)位動作,MAX823~MAX825系列�(chǎn)品就包含了這兩種功�,它們可提供�(biāo)準的�(fù)位電壓門�、標(biāo)準的看門狗延時周期和�(fù)位延遲,僅消�6μA電流。而且這些器件具有超小型SC70封裝�
2�2工廠�(yù)置看門狗系�
MAX6316~MAX6322系列可提�26種工廠預(yù)置的�(fù)位電壓門限�4種看門狗延時周��4種復(fù)位延遲以�4種輸出配置�
2�3用電容調(diào)節(jié)的看門�
如果�(yīng)用中需要靈活的看門狗延時周�,設(shè)計人員可以選用可�(diào)節(jié)電路,MAX6746~MAX6753系列�(chǎn)品不但提供了工廠�(yù)置的�(fù)位電壓門�,也提供了分壓編程的�(fù)位電壓門限,另外,還可以利用外部電容來調(diào)節(jié)看門狗的延時周期和復(fù)位延�。圖4所示是其典型工作電�,其中:
�(fù)位電壓由分壓器R1/R2決定�
�(fù)位延遲時間由電容CSRT�(shè)��
看門狗延時周期由電容Csw放置�
�5是CSWT�100pF�100nF時所對應(yīng)的看門狗延時周期范�,設(shè)計人員利用如此寬范圍的看門狗延時周期可以為任何�(yīng)用提供解決方�。需要說明的是:MAX6301-MAX6304系列基本與MAX6746-MAX6753系列相同,它們均可提供SO或DIP封裝�
2�4較長啟動/延時周期和引腳可選的看門�
對于啟動過程較長的應(yīng)用,可提供兩個不同的延時周期�(shè)計:即一個較長的初始化延時周期和一個較短的正常工作延時周期。MAX6369-MAX6374系列便具有引腳可編程的啟動延�,其可選范圍�200ms~60s。一些版本還提供有看門狗的首次邊沿激活功�,以滿足啟動過程更長的應(yīng)�。在這些芯片�,看門狗電路在啟動過程中被禁止,而只允許來自μP相關(guān)I/O引腳的個邊沿才可以激活看門狗電��
2�5多電壓監(jiān)控看門�
對于雙電源供電系�(tǒng),MAX6358-MAX6360系列可以�(jiān)視兩路標(biāo)準電壓,并提供長啟動周期和標(biāo)準延時周期的看門�;對于三組電源供電或需要高有效和低有效�(fù)位輸出的系統(tǒng),設(shè)計人員可以選用MAX6721-MAX6729系列�(chǎn)�,這些器件能提供長啟動周期和標(biāo)準延時周期的雙模式看門狗功能。并可監(jiān)視兩路標(biāo)準的電源電壓(MAX6721-MAX6722)或兩路標(biāo)準電壓加上一路可�(diào)電壓(MAX6723-MAX6724)。同�,這些器件還帶有手動復(fù)位輸�,電源失效比較器、雙�(fù)位輸出和RESET、RESET輸出��
2�6超高可靠窗式看門�
為獲得超高的可靠�,設(shè)計人員可以利用MAX6323/MAX6324窗式看門狗電�,使用這些器件時必須在�(guī)定的窗口定時周期�(nèi)為看門狗提供清零脈沖,有效脈沖可以在上次觸�(fā)脈沖1�5ms后送達,也可以在上次觸�(fā)脈沖之后�10ms時到�,利用MAX6323/MAX6324系統(tǒng)可以脫離離散循環(huán),如果清零看門狗指令在循環(huán)�(nèi)�(zhí)�,它將發(fā)出一串高速脈沖,這些脈沖可以將常�(guī)的看門狗清�,而且不產(chǎn)生復(fù)�。利用窗式看門狗電路可避免上述問題的原因是這種器件在兩次看門狗觸�(fā)脈沖之間要求有一定的時間間隔。這些器件的典型應(yīng)用包括防抱死(ABS)系統(tǒng)或其它汽車電�、工�(yè)控制、醫(yī)療產(chǎn)品等要求安全性能較高的應(yīng)用系�(tǒng)�?qū)ο到y(tǒng)有效性要求苛刻的�(yīng)用場��
3 �(jié)�
各種軟件程序都會出現(xiàn)代碼錯誤,而且噪聲和EMI也會影響系統(tǒng)中的�(shù)�(jù),并�(dǎo)致不可預(yù)測的系統(tǒng)動作,因�,設(shè)計人員要保證系統(tǒng)不出�(xiàn)死鎖??撮T狗電路是提高系統(tǒng)可靠性的一種簡�、廉價方�。利用外部看門狗電路可以防止系�(tǒng)死鎖,如果WDI信號在規(guī)定的看門狗延時周期內(nèi)沒有被觸�(fā),那么電路將對系�(tǒng)進行�(fù)�。在目前種類繁多的看門狗器件中,設(shè)計人員一定能夠找到一款與其需求相吻合的器件�