看門狗工作原理和電路設(shè)計
1.看門狗是什么?
本文引用地址:http://m.butianyuan.cn/article/202405/458341.htm看門狗,又叫watchdog timer,是一個定時器電路,一般有一個輸入,叫喂狗(kicking the dog/service the dog),一個輸出到MCU的RST端。
MCU正常工作的時候,每隔一段時間輸出一個信號到喂狗端,給 WDT清零,如果超過規(guī)定的時間不喂狗(一般在程序跑飛時),WDT定時超過,就會給出一個復(fù)位信號到MCU,使MCU復(fù)位,防止MCU死機。看門狗的作用就是防止程序發(fā)生死循環(huán),或者說程序跑飛。
2.硬件和軟件看門狗
? 硬件看門狗
硬件看門狗是利用了一個定時器,來監(jiān)控主程序的運行,也就是說在主程序的運行過程中,我們要在定時時間到之前對定時器進行復(fù)位。如果出現(xiàn)死循環(huán),或者說PC指針不能回來,那么定時時間到后就會使單片機復(fù)位。常用的WDT芯片如MAX813,5045,IMP 813等。
? 軟件看門狗
而在某些情況下,也會采用純軟件的方法來設(shè)置看門狗,如在單片機系統(tǒng)中,利用閑置的定時器/計數(shù)器就可以設(shè)計一個軟件看門狗。具體實現(xiàn)步驟如下:
首先,在初始化程序中設(shè)置定時器/計數(shù)器的方式以控制寄存器(TMOD) 和定時時間的初值,并且打開中斷。
然后,根據(jù)定時器的時間,在主程序中按一定的時間間隔插入復(fù)位定時器的指令(喂狗), 兩條喂狗指令之間的時間間隔可以根據(jù)系統(tǒng)時鐘與指令周期計算出來,而且該時間周期應(yīng)該小于定時器的定時時間。
最后,在定時器的中斷服務(wù)程序中,設(shè)置一條無條件轉(zhuǎn)移指令,將程序計數(shù)器PC轉(zhuǎn)移到初始化程序的入口。
軟件看門狗的優(yōu)點是無需額外的硬件支持,但當(dāng)系統(tǒng)存在嚴(yán)重的錯誤時(例如:中斷服務(wù)出錯),則有可能導(dǎo)致軟件看門狗失效。
3.硬件看門狗芯片電路
看門狗芯片與MCU的連接關(guān)系如下:其基本的原理就是MCU要在固定的時間內(nèi)通過IO翻轉(zhuǎn)去控制看門狗芯片的WDI引腳,否則看門狗芯片就會將WDO拉低,進而使CPU復(fù)位。
以SP706為例,看門狗芯片的引腳定義和功能描述如下圖:
(來自CSDN: heat.huang)
這個MR腳是手動復(fù)位,挺有用的,原理圖設(shè)計時注意下
當(dāng)J2接上跳線帽時,開啟看門狗。反之,看門狗關(guān)閉。
芯片參數(shù)比較少,關(guān)注下最短喂狗時間Twd 即可:
參考文獻:
https://www.bilibili.com/video/BV1134y197sh?spm_id_from=333.337.search-card.all.click&vd_source=1dd819fba773162098e21ce510439d48
https://baike.baidu.com/item/%E7%9C%8B%E9%97%A8%E7%8B%97/6518878?fr=aladdin
https://blog.csdn.net/weixin_40407893/article/details/117956750
評論