今天,筆者要爲你們分享一個由SD引起的災難,以及該災難被咱們項目組攻克的技術案例。web
去年上半年,咱們公司承接了某大型廣告公司的電梯廣告顯示屏的項目,該產品使用了飛思卡爾的IMX6系列芯片做爲主控CPU,具有媒體人機觸摸互動、媒體投放、遠程升級、錄像監控等功能。其中很重要的一項功能就是監控和保存功能,因客戶的報價較低,咱們理所固然的選擇了SD卡做爲錄像數據的保存介質。函數
沒想到,災難半年後就降臨了,半年前發貨的10K機器,每月都有10%的損壞率,損壞的機器90%都是SD卡損壞了!關鍵的監控視頻信息所有丟失,客戶不但要求咱們賠償SD卡的損失,延長質保期,並且威脅一個月內不解決將終止合做,客戶是老闆的惟一大客戶,丟失這個客戶咱們離解散就不遠。老闆甚至放下狠話:一個月內不解決,大家跳槽,我跳樓。測試
項目組首先從客戶的使用的電梯的場景入手,場景的特色以下:spa
一、電梯內部佈滿各類通訊線、音視頻線、電力線,互相之間的干擾很是嚴重設計
二、電梯內的廣告機天天晚上12點至早上6點回自動斷電,白天自動上電視頻
三、廣告機只要開機就須要一直錄像,保存到本地的SD卡中。blog
因而咱們首先模擬現場的應用場景,第一個場景公司內部沒法模擬,因而先模擬第二和第三個場景,事設備上電10分鐘,掉電5分鐘,只要一上電就開始錄像,提升上下電的頻率。樣本數量使用了50臺。產品
實驗第一天,SD卡損壞0張;it
實驗次日,SD卡損壞1張;class
實驗第三天SD卡損壞3張,一直到實驗到第6天,SD卡一共損壞8張。
咱們基本找到SD卡損壞的緣由:就是設備上下電致使的。因而你們分頭行動,從硬件和軟件、驅動着手,分析掉電可能引發的緣由。
首先是驅動工程師查閱MMC的規範「JESD84-B45」時有發現,以下圖1所示
圖1 :JESD84-B45規範中掉電的要求。
文中大概的意思就是,主機在掉電關閉設備前,應該通知SD卡控制,由控制判斷掉電的緊迫性,從而進入對自己設備的保護模式,而且在這以前,應該保持設備的電源處於工做範圍以內。
繼續查閱SD卡2.0規範中,SD卡的標準只保證在讀數據過程當中,意外斷電和移除能夠對數據進行保護,對寫和擦除過程當中的掉電的,徹底沒有把握保護數據,也就是SD卡內部的自己固件、用戶數據都是有可能丟失的。
圖2:SD 2.0標準中對SD卡的保護闡述
經過查閱相關的規範,咱們知道了緣由的所在,就是咱們的設備在斷電的時候,還在錄像保存數據,進行不斷的寫和擦除SD卡的操做。
通過討論,咱們採用了以下的方案。.其中,方案的核心主要有3個
第一:掉電檢測電路;
第二:超級電容繼續供電電路
第三:掉電後軟件處理機制。
圖3:SD卡掉電保護的處理過程
下圖4是掉電檢測電路,能夠精準的檢測一旦電壓跌落至10V(電源爲12V供電),立刻送掉電信號給CPU。
圖4:掉電檢測電路
下圖5是超級電容的充放電電路,增長該電路可使掉電後繼續維持2秒鐘的時間,使CPU完成掉電後的保護處理工做。
圖5:超級電容充放電電路
通過了上述的整改,咱們生產了50臺設備,進行連續7天24小時,10分鐘一個循環的上下電測試,沒有一臺設備的SD卡損壞,證實了上述方案可行。老闆的樓,終於不用跳了。
經驗總結,其實CPU原廠提供的DEMO參考設計,基本都是處在能用的狀態,離真正的高可靠應用,還有很大的距離,須要咱們工程人員的不斷挖掘和積累。才能設計出高可靠性的產品。
創易棧小編點評:
上述案例Flash的損壞是供電系統不穩定形成,電源電壓的異常可能會致使系統單片機系統工做異常的現象,如輸出電壓小於單片機系統工做所需的最小電壓,輸出電壓不乾淨,噪音嚴重等,這些很容易引發單片機內部電路的邏輯紊亂。
Flash的讀寫信號處於不穩定狀態,可能產生知足Flash的寫操做,從而給系統帶來嚴重的損害。針對以上狀況,能夠在系統中加入電源監控芯片或使能MCU自己的電源監控電路,在電源異常的狀況下禁止對Flash區域操做。
除了電源失效,會形成Flash損壞的常見緣由還有如下幾種:
一、用戶代碼對Flash的誤操做不當引發程序丟失或被錯誤改寫
例如,在有對Flash寫入或擦除操做的代碼中,若是用戶誤調用了寫入或擦除函數或者因爲程序跑飛而剛好執行了Flash擦除或寫入函數,這天然會致使數據丟失或改變。
針對以上狀況,能夠在程序中設置多個容許操做的變量,當執行寫入或擦除操做時,對這些變量進行判斷,只有條件所有知足時,才執行相應的操做。
在一些不須要進行擦除或寫入操做的系統中,對存儲區進行寫保護或擦除保護設置,能有效的防止數據被意外修改。作到了寫入或擦除的可控性,基本能夠避免此種狀況發生。
二、系統時鐘不穩定
不管對於內部Flash仍是外部Flash,系統時鐘的不穩定,都將致使MCU得不到可靠的工做時序信號,從而在讀寫Flash時產生不可預料的後果。
三、環境干擾
環境干擾的可能緣由不少,如生產過程當中的高溫焊接、靜電、使用環境的溫溼度,強磁場等,均可能影響到Flash或整個系統的穩定。環境干擾的因素不少,在此不展開討論。