ARM平臺數(shù)據(jù)為何會莫名其妙丟失
Nand-Flash/eMMC(帶有Flash控制器的Nand-Flash)作為一種非線性宏單元模式存儲器,為固態(tài)大容量存儲的實(shí)現(xiàn)提供了廉價(jià)有效的解決方案。Nand-Flash存儲器具有容量大,改寫速度快等優(yōu)點(diǎn),適用于大量數(shù)據(jù)的存儲,因而越來越廣泛地應(yīng)用在如嵌入式產(chǎn)品、智能手機(jī)、云端存儲資料庫等業(yè)界各領(lǐng)域。
本文引用地址:http://cafeforensic.com/article/201712/373799.htm
圖1 Nand-Flash與eMMC芯片
1.1存儲器件使用壽命
使用了Nand-Flash的主板出現(xiàn)丟數(shù)據(jù)掉程序現(xiàn)象,是一個讓無數(shù)工程師毛骨悚然的事故。眼看著程序用著用著就消失了,只能干著急也無法下手。有經(jīng)驗(yàn)的工程師手起刀落換上一顆新物料,熬夜補(bǔ)代碼繼續(xù)撐過半個項(xiàng)目周期?;仡^無處發(fā)泄還要大刀闊斧換廠商、換品牌。與其換幾片Nand-Flash還能負(fù)擔(dān)得起,但畢竟這是一個無底洞,不如去深入探明問題原因,不然散盡家財(cái)也無法彌補(bǔ)虧空。
器件數(shù)據(jù)手冊中通常描述Nand-Flash的塊擦寫壽命達(dá)10萬次,EMMC的塊擦寫最高也會有1萬次;同理,EEPROM、SD卡、CF卡、U盤、Flash硬盤等存儲介質(zhì)在都存在寫壽命的問題。在文件系統(tǒng)向?qū)憯?shù)據(jù)的底層存儲器塊寫數(shù)據(jù)時,常規(guī)會先將塊里的數(shù)據(jù)讀出來,擦除塊干凈后,將需要寫入的數(shù)據(jù)和之前讀出來的塊數(shù)據(jù)一起在回寫到存儲器里面去,如果文件系統(tǒng)寫平衡沒有處理好,特別是要求1分鐘以內(nèi)要記錄一次數(shù)據(jù)這樣頻繁的擦寫塊操作,就有可能將Nand-Flash或EMMC的塊寫壞。
1.2存儲器件掉電丟數(shù)據(jù)
文件系統(tǒng)向存儲器寫數(shù)據(jù)時,常規(guī)是先將塊里的數(shù)據(jù)讀出來,擦除塊干凈后,將需要寫入的數(shù)據(jù)和之前讀出來的塊數(shù)據(jù)一起在回寫到存儲器里面去。如果設(shè)備在擦除塊過程中或者在回寫數(shù)據(jù)過程中意外發(fā)生斷電甚至電壓不穩(wěn)定,均會造出數(shù)據(jù)丟失或者損壞。如果丟失的數(shù)據(jù)是文件系統(tǒng)的FAT表,則會造成文件系統(tǒng)崩潰。這就是引起系統(tǒng)程序無法啟動災(zāi)難性后果的原因。
1.3系統(tǒng)數(shù)據(jù)保護(hù)方案
很多時候,產(chǎn)品在未出廠前燒錄程序、反復(fù)測試,無論怎樣折騰也不會出現(xiàn)丟程序的情況。這可能的因素是測試設(shè)備保證了穩(wěn)定的運(yùn)行中電源輸出,因此系統(tǒng)運(yùn)行中正常的Flash保護(hù)機(jī)制是可靠執(zhí)行的。
相對于用戶實(shí)際使用而言,想避免Flash損壞的情況。需要嚴(yán)格遵守產(chǎn)品說明使用,尤其注意避免在Flash擦除或?qū)懭脒^程中人為地突然掉電。這是存儲器件用法的一個大忌,即使完好的器件,如此不規(guī)范的使用也會大大縮短其壽命。而且不同環(huán)境下的電源系統(tǒng)五花八門,在電源不滿足功率要求情況下程序?qū)τ陔娫吹碗娏康臋z測閾值較低,此時強(qiáng)制啟動系統(tǒng)或執(zhí)行寫操作更會加劇系統(tǒng)耗電波動,巨大的紋波也會引起CPU對存儲的誤操作。
解決此問題對于軟件方面而言:
調(diào)試系統(tǒng)或現(xiàn)場使用時,建議使用軟件復(fù)位,避免人為頻繁的通過斷電實(shí)現(xiàn)復(fù)位操作;有斷電必要時,將打印信息添加如“系統(tǒng)加載完成”、“數(shù)據(jù)保存完畢”等指示說明后操作;
軟件采取Flash均衡保存算法,高效地調(diào)整更改數(shù)據(jù)時擦除的Flash區(qū)域大小;
可將數(shù)據(jù)先寫入內(nèi)存或者鐵電存儲器,然后定期的再將數(shù)據(jù)搬移到大的存儲器里面,減少直接斷Nand-Flash、EMMC擦寫次數(shù);
在程序中加入或者提高電源電量檢測的閾值,程序上保證所有電源系統(tǒng)下的芯片在此閾值上均可以正常工作。
讀寫過程中仔細(xì)對壞塊表進(jìn)行維護(hù)更新,避免程序?qū)懭雺膲K。讀取數(shù)據(jù)時對ECC校驗(yàn),確保讀取數(shù)據(jù)無誤。
從硬件角度考慮需要注意:
用法上避免在Flash擦除或?qū)懭脒^程中人為突然掉電;
設(shè)計(jì)好處理控制核心的電源系統(tǒng),防止CPU等在啟動、運(yùn)行中,電源系統(tǒng)因瞬時變化引起的紋波等情況;
搭配掉電檢測電路,在檢測到外部電源掉電的同時,及時迅速關(guān)閉文件系統(tǒng),停止向文件系統(tǒng)內(nèi)寫數(shù)據(jù)的操作;
添加文件系統(tǒng)電源域UPS電源,乃至整機(jī)掉電續(xù)航工作電源;
對于使用EEPROM等小容量存儲的用戶而言,可以考慮使用高可靠性的鐵電材料加工制成的鐵電非易失性存儲器FRAM來替換。FRAM可以像RAM一樣快速讀寫。數(shù)據(jù)在掉電后可以保存10年,且其讀寫壽命高達(dá)100億次,比EEPROM和其他非易失性記憶體系統(tǒng)可靠性更高,結(jié)構(gòu)更簡單,功耗低等優(yōu)點(diǎn)。
圖2 鐵電材料非易失性存儲器
下面簡介一款基于法拉電容的UPS電路設(shè)計(jì)思路,要點(diǎn)如下:
l由于電容存在個體差異,電容存儲電荷的速率不一樣,存在過充造成電壓超過耐壓值的問題,電路中存在多顆法拉電容時需要做均壓處理;
為保證電容能夠充滿電能,源端需采用恒流源充電;
為維持電容電壓穩(wěn)定,并降低充電電路功耗,需增加過壓檢測電路;
若對電壓高于法拉電容本身電壓上限的電源系統(tǒng)提供掉電續(xù)航時,Vcc_backu端需通過BOOST升壓電路后以實(shí)現(xiàn),且注意系統(tǒng)正常時(充電過程中)關(guān)斷EN腳。
圖3 基于法拉電容的UPS核心電路
系統(tǒng)電源正常時,充電電路即給UPS充電。系統(tǒng)電源掉電時,UPS放電給系統(tǒng)提供備用電能,建議UPS在掉電后能持續(xù)給文件系統(tǒng)供電能力不低于10秒,在10秒續(xù)航期間內(nèi),系統(tǒng)可以將電源異常狀態(tài)上報(bào)、及時保持臨時重要數(shù)據(jù)、關(guān)閉文件系統(tǒng),保證系統(tǒng)穩(wěn)定性,避免文件系統(tǒng)在掉電情況下出現(xiàn)損害,影響應(yīng)用程序的正常啟動。
圖4 建議UPS充放電時序
此外系統(tǒng)掉電情況需要掉電檢測電路實(shí)現(xiàn)。使用一顆比較器器件即可,注意使用Output_VCC端供電,以確保外部掉電時,比較器仍然可以工作。比較器負(fù)端連接一個參考電壓,參考電壓由穩(wěn)壓二極管提供。正常供電時,比較器輸出電壓由升壓電路的反饋端分壓決定;掉電時,比較器輸出低電平,此時處理器仍未掉電,收到狀態(tài)信息可及時響應(yīng)處理。另一路掉電檢測可供其它功能使用。
圖6系統(tǒng)掉電檢測電路
1.4工控行業(yè)領(lǐng)導(dǎo)品牌
在ARM內(nèi)核核心板、開發(fā)板、工控機(jī)等領(lǐng)域,M6708核心板、M/A335x核心板、M/A28x核心板、EPC系列工控主板、IoT系列無線主板/網(wǎng)關(guān)、DCP系列經(jīng)典工控機(jī)等產(chǎn)品中,核心板產(chǎn)品針對Nand-Flash有著完善的壞塊管理、工控主板添加掉電保護(hù)等措施。例如分別在WinCE與Linux系統(tǒng)下加固Flash驅(qū)動、對操作系統(tǒng)進(jìn)行雙備份;軟件與硬件信號測試對Flash進(jìn)行10萬次掉電試驗(yàn)等。
同時,致遠(yuǎn)電子配備專業(yè)的EMC實(shí)驗(yàn)室、安規(guī)實(shí)驗(yàn)室、環(huán)境實(shí)驗(yàn)室等可實(shí)際模擬惡劣應(yīng)用狀況試驗(yàn)。結(jié)合優(yōu)質(zhì)供應(yīng)商保證各產(chǎn)品分立器件均達(dá)到EMC工業(yè)三級標(biāo)準(zhǔn),有良好的靜電抗性、雷擊浪涌抗性、電瞬變?nèi)好}沖抗性、以及極低的EMI傳導(dǎo)騷擾情況;可實(shí)現(xiàn)-40℃~+85℃的工業(yè)級環(huán)境適應(yīng)性。為從Flash至整套目標(biāo)系統(tǒng)的可靠性安全穩(wěn)定提供切實(shí)保障。
評論