1. 程式人生 > >微控制器/ARM宕機的常見原因及解決方案

微控制器/ARM宕機的常見原因及解決方案

前幾天在寫ARM時經常宕機,莫名其妙,在這蒐集了一些比較好的解答和方案,給大家參考。

罵人罵人罵人

可能原因:

一 振盪器停止振盪
又可以分為電源電壓不穩,或者強幹擾引起的振盪器停振。


二 PC指標跑飛
電源電壓不穩或強幹擾引起PC跑飛,如果看門狗不好,也會引起宕機。


三 設計上對長引出線的IO沒有保護,靜電打在IO口上引起微控制器死鎖,破壞了硬體邏輯功能,導致宕機。


四. 復位收到干擾,引起反覆復位,在反覆復位當中有可能會導致宕機。


五.電源電壓 的地 不穩  ,造成電源電壓 瞬間負電壓 導致微控制器故障 程式不發運行


綜上所述:
設計電路時,應該注意:


1.電源穩定
2.IO保護
3.振盪器PCB佈線要注意
4.復位電路設計和PCB佈線
5.電源,訊號線干擾路徑的保護,加濾波TVS等
6.高速訊號輸出遠離訊號輸入端,如SPI匯流排,I2C匯流排佈線要遠離ADC,復位,時鐘等佈線處,以及其他模擬前端。


我的理解:


1、“跑飛”是因為程式隱患或外部干擾引起的誤動作,致使PC被寫入“出界”資料,跑到了RAM區,或者跑到了FLASH的空白區。如果PC指向了RAM區,哪情況就不好說了!因為程式譯碼器可能得到任意譯碼結果。如果PC指向了FLASH空白區,則可以事先將所有FLASH空白區填入某個你想要的資料,迫使程式譯碼器在這裡翻譯出你想要的指令,從而進行相應的處理。在IAR Workbench中好象有在空白區填充資料的設定。
2、“宕機”是指PC進入了“死迴圈”,或者是MCLK等於近似為零的值。此時,要想救活MCU,非外狗不可。
*程式執行過程中,如果MCU電源出現問題(電源供電問題,或其它外部電路引起的電源擾動),比較容易出現“跑飛”現象


程式跑飛應該是PC出錯;軟體和硬體都可能出這樣的問題.
宕機應該是CPU根本沒有執行,多是硬體方面的問題造成的,比如POR復位不成功,430比較容易出現掉電不完全後重新上電.


看門狗在這個方面介紹:

有了看門狗就不會宕機

宕機是指CPU的程式指標進入一個死迴圈,無法執行正常的程式流程。其外在表現常常是:正常功能喪失,按鍵無響應,顯示凝固。微控制器宕機後,只有復全才能走出死迴圈,執行正常的程式流程。眾所屬知,克服宕機的最有效手段是加看門狗(WatchDog)。


目前用得最廣泛的看門狗實際上是一個特殊的定時器DogTimer。DogTimer按固定速率計時,計滿預定時間就發出溢位脈衝使微控制器復位。如果每次在DogTimer溢位前強行讓DogTimer清零,就不會發出溢位脈衝。清零脈衝由CPU發出,在微控制器程式中每隔一段語句放一個清DogTimer的語句——FeedDog語句,以保證程式正常執行時DogTimer不會溢位。一旦程式進入一個不含FeedDog語句的死迴圈,DogTimer將溢位,導致微控制器復位,跳出這個死迴圈。本文稱這種看門狗為典型看門狗,典型看門狗已被整合比,如MAX706、MAX791等[1];還有許多微控制器本身集成了這種看門狗,如PIC16C57、MC68HC705等,
有一個錯誤觀點:加了看門狗,微控制器就不會宕機。實際上,看門狗有時間會完全失效。當程式進入某個死迴圈,而這個死迴圈中又包含FeedDog語句,這時DogTimer始終不會溢位,微控制器始終得不到復位訊號,程式也就始終跳不出這個死迴圈。針對這一弊端,筆者設計了雙對限看門狗和定時復位看門狗。


雙時限看門狗有兩個定時器;一個為短定時器,一個為長定時器。短定時器定時為T1,長定時器定時為T2,0 
這樣,當程式進入某個死迴圈,如果這個死迴圈包含短定時器FeedDog語句而不包含長定時器FeedDog語句,那麼長定時順終將溢位,使微控制器復位。巧妙安排長定時器FeedDog語句的位置,可保證出現宕機的概率根低。在水輪發電機組微機控制裝置中的對比應用證明了這一點[3]。


目前幾乎所有的看門狗都是依賴於CPU(依賴於CPU FeedDog)。這可以比作:一個保險裝置能否起到保險作用還依賴於被它保護的物件的行為。顯然,依賴於CPU的看門狗是不能保證微控制器在分之百不宕機的。


在絕對不允許宕機的裝置中,筆者設計了一種完全不依賴於CPU的看門狗——定時復位看門狗。定時復位看門狗的主體也是一個定時器,到預定時間就發出溢位脈衝,此溢位脈衝使微控制器強行復位。定時復位看門狗不需要CPU FeedDog。


簡言之,定時復位看門狗就是定時地讓微控制器強行復位。這樣,即使裝置宕機,其最大宕機時間也不會大於定時器定時時間。顯然,只要硬體完好,這種看門狗百分之百地保證了微控制器不會長時間宕機。在智慧電錶(包括IC卡電能表、復費率電能表、多功能電能表[4])中採用了定時復位看門狗,每1秒讓CPU強行復位,迄今數十萬電錶運行了近五年,無一例宕機報告。