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