(筆記)一場由SD卡引發的災難


一場由SD卡引發的災難
 
注:此文章轉自“https://user.qzone.qq.com/63915185/blog/1512562541”。
 
Flash里面的數據在使用過程中莫名改變或不翼而飛?程序丟失可能無法正常運行,從而造成整個系統崩潰。Flash,說好的數據去哪了?

今天,筆者要為大家分享一個由SD引發的災難,以及該災難被我們項目組攻克的技術案例。

去年上半年,我們公司承接了某大型廣告公司的電梯廣告顯示屏的項目,該產品使用了飛思卡爾的IMX6系列芯片作為主控CPU,具備媒體人機觸摸互動、媒體投放、遠程升級、錄像監控等功能。其中很重要的一項功能就是監控和保存功能,因客戶的報價較低,我們理所當然的選擇了SD卡作為錄像數據的保存介質。

沒想到,災難半年后就降臨了,半年前發貨的10K機器,每個月都有10%的損壞率,損壞的機器90%都是SD卡損壞了!關鍵的監控視頻信息全部丟失,客戶不但要求我們賠償SD卡的損失,延長質保期,而且威脅一個月內不解決將終止合作,客戶是老板的唯一大客戶,丟失這個客戶我們離解散就不遠。老板甚至放下狠話:一個月內不解決,你們跳槽,我跳樓。

項目組首先從客戶的使用的電梯的場景入手,場景的特點如下:

1、電梯內部布滿各種通信線、音視頻線、電力線,互相之間的干擾非常嚴重

2、電梯內的廣告機每天晚上12點至早上6點回自動斷電,白天自動上電

3、廣告機只要開機就需要一直錄像,保存到本地的SD卡中。

於是我們首先模擬現場的應用場景,第一個場景公司內部無法模擬,於是先模擬第二和第三個場景,事設備上電10分鍾,掉電5分鍾,只要一上電就開始錄像,提高上下電的頻率。樣本數量使用了50台。

實驗第一天,SD卡損壞0張;

實驗第二天,SD卡損壞1張;

實驗第三天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損壞的常見原因還有以下幾種:

1、用戶代碼對Flash的誤操作不當引起程序丟失或被錯誤改寫

例如,在有對Flash寫入或擦除操作的代碼中,如果用戶誤調用了寫入或擦除函數或者由於程序跑飛而恰好執行了Flash擦除或寫入函數,這自然會導致數據丟失或改變。

針對以上情況,可以在程序中設置多個允許操作的變量,當執行寫入或擦除操作時,對這些變量進行判斷,只有條件全部滿足時,才執行相應的操作。

在一些不需要進行擦除或寫入操作的系統中,對存儲區進行寫保護或擦除保護設置,能有效的防止數據被意外修改。做到了寫入或擦除的可控性,基本可以避免此種情況發生。

2、系統時鍾不穩定

無論對於內部Flash還是外部Flash,系統時鍾的不穩定,都將導致MCU得不到可靠的工作時序信號,從而在讀寫Flash時產生不可預料的后果。

3、環境干擾

環境干擾的可能原因很多,如生產過程中的高溫焊接、靜電、使用環境的溫濕度,強磁場等,都可能影響到Flash或整個系統的穩定。環境干擾的因素很多,在此不展開討論。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM