復(fù)位電路的作用是什么
什么是復(fù)位
單片機(jī)復(fù)位電路的作用是:使單片機(jī)恢復(fù)到起始狀態(tài),讓單片機(jī)的程序從頭開始執(zhí)行,運(yùn)行時(shí)鐘處于穩(wěn)定狀態(tài)、各種寄存器、端口處于初始化狀態(tài)等等。目的是讓單片機(jī)能夠穩(wěn)定、正確的從頭開始執(zhí)行程序。
為什么要加復(fù)位?
數(shù)字電路中寄存器和 RAM 在上電之后默認(rèn)的狀態(tài)和數(shù)據(jù)是不確定的,如果有復(fù)位,我們可以把寄存器復(fù)位到初始狀態(tài),RAM 的數(shù)據(jù)可以通過復(fù)位來觸發(fā) RAM 初始化
程序邏輯如果進(jìn)入了錯(cuò)誤的狀態(tài),通過復(fù)位可以把所有的邏輯狀態(tài)恢復(fù)到初始值,如果沒有復(fù)位,那么邏輯可能永遠(yuǎn)運(yùn)行在錯(cuò)誤的狀態(tài)。(一些簡單的IC芯片沒有看門狗電路,就需要外部復(fù)位)
好的,通過上面兩段話,你了解了復(fù)位電路的作用以及為什么要加復(fù)位電路
正常單片機(jī)和IC芯片復(fù)位都是有一個(gè)Reset引腳,給復(fù)位引腳通一定時(shí)間的高/低電平就可以實(shí)現(xiàn)復(fù)位
典型的51單片機(jī)當(dāng)RST復(fù)位腳持續(xù)兩個(gè)機(jī)器周期以上高電平就將復(fù)位
像我們常用的STM32F1系列 ,查閱手冊得知復(fù)位引腳需要持續(xù)20us以上的低電平,就可完成復(fù)位
復(fù)位電路的簡單與復(fù)雜
復(fù)位電路,所有的數(shù)字電路系統(tǒng)中都存在,但是以筆者二十年經(jīng)驗(yàn)看,不管是芯片原廠的工程師,還是電路系統(tǒng)廠家的工程師,鮮有人理解電路系統(tǒng)的復(fù)位作用,能真正理解,并恰當(dāng)設(shè)計(jì)復(fù)位電路的,難得一見。
很多人,覺得這個(gè)復(fù)位電路的作用太明確了,復(fù)位電路不就是對芯片復(fù)位嗎,哪有什么復(fù)雜的呢?
作用1:也是最簡單的一個(gè),就是復(fù)位系統(tǒng)上的芯片。
對芯片來說,復(fù)位的需求很簡單,就是幾ns或者幾ms的低電平即可,如下圖,某芯片的復(fù)位要求,上電完成后32個(gè)clock,這是多么簡單的要求,一個(gè)RC復(fù)位即可。甚至很多芯片無需復(fù)位要求,內(nèi)部都有POR電路,無須外部復(fù)位,就可以正常工作。
所以,很多人在設(shè)計(jì)復(fù)位電路時(shí),就簡單的在系統(tǒng)上電時(shí),輸出一個(gè)復(fù)位信號(hào),將整個(gè)系統(tǒng)里面有復(fù)位要求的芯片復(fù)位一遍,就算完成了。也許這樣設(shè)計(jì)也沒有什么問題,但是在一些復(fù)雜。
作用2,復(fù)位可以用于修復(fù)系統(tǒng),實(shí)現(xiàn)故障自愈。
我們在系統(tǒng)遇到問題時(shí),經(jīng)常會(huì)按復(fù)位按鈕,來重啟系統(tǒng),從而達(dá)到修復(fù)系統(tǒng)的目的。
一些偶發(fā)性的故障,如軟件出現(xiàn)異常掛死或者電源受到異常干擾,會(huì)導(dǎo)致系統(tǒng)進(jìn)入故障狀態(tài),這時(shí),通過復(fù)位就可以消除,這類復(fù)位有很多種。
1、看門狗復(fù)位
通過硬件心跳信號(hào),或消息心跳信號(hào),來監(jiān)控某個(gè)系統(tǒng),當(dāng)系統(tǒng)掛死時(shí),對其進(jìn)行復(fù)位;
2、低電壓復(fù)位
當(dāng)電壓異常低落時(shí),對系統(tǒng)進(jìn)行復(fù)位,很多復(fù)位芯片都具有電壓監(jiān)控功能,也有部分MCU有LVR功能,可以配置電壓跌落到多少時(shí),輸出復(fù)位信號(hào)。
下面是某款MCU的POR和LVD功能描述,用于實(shí)現(xiàn)LVR。
3、時(shí)鐘異常復(fù)位
通過時(shí)間檢測芯片,或者FPGA來對關(guān)鍵時(shí)鐘進(jìn)行檢測,當(dāng)出現(xiàn)異常時(shí),對系統(tǒng)進(jìn)行復(fù)位;
4、軟件復(fù)位模塊
通過軟件對某些通信通道,或者功能模塊進(jìn)行故障檢測,當(dāng)檢測到通信通道異常,或者模塊異常時(shí),對系統(tǒng)進(jìn)行復(fù)位。如IIC通道讀寫檢測,存儲(chǔ)空間某些算法的讀寫檢測。
熟練理解上述復(fù)位功能,并實(shí)施相應(yīng)的復(fù)位電路的設(shè)計(jì),會(huì)讓你的電子系統(tǒng)更加穩(wěn)定可靠。
作用3,也是系統(tǒng)中復(fù)位電路的真正作用,就是在整個(gè)系統(tǒng)(注意是系統(tǒng),而不是芯片)處于不穩(wěn)定狀態(tài)時(shí),通過復(fù)位使整個(gè)系統(tǒng)處于一種可控狀態(tài)。
這里以幾個(gè)具體產(chǎn)品來說明復(fù)位的這個(gè)真正作用。
一個(gè)由外部插拔電源適配器供電的產(chǎn)品,內(nèi)部有法拉電容作為掉電保護(hù)電源,當(dāng)插入外部電源時(shí),開機(jī),當(dāng)拔掉外部電源時(shí),關(guān)機(jī)。電路設(shè)計(jì),電源由PMIC給出,所有電源輸出后,PMIC又輸出復(fù)位信號(hào),給整個(gè)系統(tǒng)復(fù)位。
這個(gè)電路系統(tǒng)復(fù)位,看似沒有問題,但是實(shí)際上,就是沒有考慮到電源入口插入時(shí)電源接觸上造成電源抖動(dòng)的這種不可控狀態(tài),所以會(huì)導(dǎo)致嚴(yán)重的問題。
問題分析如下:
當(dāng)用戶插入電源時(shí),由于電源抖動(dòng),時(shí)而連接,時(shí)而斷開,造成PMIC輸出電源跌落,CPU掛死,但這個(gè)電源跌落并不會(huì)導(dǎo)致復(fù)位輸出為低,所以CPU掛死無法解除。
用戶保持一段時(shí)間后,看到無法啟動(dòng),拔出適配器,法拉電容被充電,可以維持PMIC輸出,CPU繼續(xù)保持掛死狀態(tài);
用戶拔出1~2秒后,又插入電源適配器,供電又被維持,不會(huì)觸發(fā)系統(tǒng)復(fù)位,CPU繼續(xù)掛死;
就這樣,一旦出現(xiàn)問題,用戶反復(fù)這樣插拔,系統(tǒng)始終處于掛死狀態(tài)無法解除。其根本原因,就是系統(tǒng)復(fù)位沒有考慮到插拔電源這種異常狀態(tài),并使系統(tǒng)處于復(fù)位狀態(tài)。
其實(shí)這種類似的產(chǎn)品非常常見,我們的手機(jī)就是這種情況,不過不是法拉電容,而是電池,當(dāng)手機(jī)沒有電,插拔USB充電時(shí),以前的手機(jī),也許就遇見過這種故障。當(dāng)然現(xiàn)在可能采用多種方式規(guī)避了,比如充電時(shí)電池電量低于10%,都控制不能開機(jī)。
不過在工業(yè)控制類產(chǎn)品,沒有使用鋰電池,而是大量使用法拉電容(用于掉電時(shí)保持某些配置),基本都是這種供電架構(gòu),而且要求插電必須開機(jī),這樣復(fù)位電路就是有問題的。大家可以想想怎么去修改這個(gè)復(fù)位設(shè)計(jì)。
無獨(dú)有偶,在車載類產(chǎn)品,方案如下:
MCU采用RC復(fù)位,MCU輸出復(fù)位給SOC,也有法拉電容,由于MCU電源在啟動(dòng)時(shí),出現(xiàn)振蕩,導(dǎo)致MCU掛死,系統(tǒng)無法啟動(dòng),更嚴(yán)重的是由于啟動(dòng)時(shí),沒有對MCU復(fù)位,導(dǎo)致MCU內(nèi)部程序損耗,產(chǎn)品需要返廠才能維修。
這類產(chǎn)品,之所以出現(xiàn)這種故障,都是因?yàn)閷ο到y(tǒng)復(fù)位電路的設(shè)計(jì),缺乏深入的理解而導(dǎo)致的,這些設(shè)計(jì)即存在芯片原廠的demo設(shè)計(jì),也存在系統(tǒng)廠商的設(shè)計(jì)中。