祝清法 張阿朋
摘 要:存儲式測井儀器在工作過程中把測井數(shù)據(jù)存儲到本地,測井完畢后把數(shù)據(jù)讀出到PC機進行處理。儀器采用NAND_Flash作為存儲介質(zhì),使用ECC糾錯算法對存儲到NAND_Flash中的數(shù)據(jù)進行校驗和糾錯是非常重要的工作,文章使用STM32實現(xiàn)了ECC糾錯算法。
關鍵詞:存儲式;NAND_Flash ECC糾錯算法;STM32
引言
目前世界上主流的非易失閃存技術分為NAND和NOR,NAND結構以其極高的存儲密度,極快的寫入和擦除速度,占領了中大容量存儲器的市場,我公司存儲式測井儀器的存儲體便采用K9F2G08U0C作為存儲介質(zhì),典型的NAND_Flash。
ECC全稱Error Checking and Correction,是常用的對NAND_Flash進行校驗和糾錯的算法,其只能糾正1bit的錯誤,檢測出2bit以內(nèi)的錯誤,對2bit以上的錯誤不能保證檢測。由于NAND_Flash的出錯模式一般不會整個Block或者Page全部失效,而是某一個bit發(fā)生錯誤,故ECC糾錯算法對NAND_Flash的糾錯效果非常理想。
1 算法詳細介紹
ECC校驗每次對256字節(jié)的數(shù)據(jù)進行操作,形成一個256行、8列的矩陣,矩陣每個元素代表一個bit。ECC算法的校驗包括列校驗和行校驗,對每個待校驗的bit位求異或,很顯然,如果結果為0,則表示有偶數(shù)個1,如果結果為1,則表示有奇數(shù)個1。
列校驗矩陣示意圖如圖1所示
2 實際應用
K9F2G08U0C的每個Page頁包含512字節(jié)的數(shù)據(jù)區(qū)和16字節(jié)的OOB區(qū),每次往K9F1208寫入256字節(jié)的數(shù)據(jù),同時生成一個ECC校驗碼存儲到OOB區(qū);讀數(shù)據(jù)的時候,將從OOB區(qū)中讀出的原ECC校驗和新ECC校驗和按位異或,若結果為0,則表示不存在錯(或是出現(xiàn)了 ECC無法檢測的錯誤);若3個字節(jié)異或結果中存在11個比特位為1,表示存在一個比特錯誤,且可糾正,根據(jù)相應的規(guī)則即可定位到特定的Bit發(fā)生了反轉(zhuǎn),修正過來即可;若3個字節(jié)異或結果中只存在1個比特位為1,表示 OOB區(qū)出錯;其他情況均表示出現(xiàn)了無法糾正的錯誤。
如果使用軟件進行ECC編碼和解碼,根據(jù)上述ECC計算規(guī)則,進行一次列計算最少需要1024個指令周期,256字節(jié)共需要1024*22=22528個指令周期,嚴重影響MCU工作效率。使用STM32F407自帶硬件ECC模塊,可以自動計算出ECC校驗碼,提高系統(tǒng)的工作效率。用STM32F407的FSMC接口連接K9F2G08U0C,對FSMC進行適當?shù)呐渲弥?,即可在讀寫NAND_Flash的時候讀到ECC校驗數(shù)據(jù),無需手動計算。
3 結束語
采用ECC糾錯算法糾正NAND_Flash中的位翻轉(zhuǎn)錯誤,有效的保證了數(shù)據(jù)的正確性和完整性,從而保證了存儲式測井儀器的測井成功率。在實際使用中,充分利用MCU的硬件模塊,極大的提高系統(tǒng)工作效率。ECC糾錯算法也可以應用在其他任何需要高可靠性存儲的系統(tǒng)中。
參考文獻
[1]楊孝光.ECC校驗的算法分析和程序?qū)崿F(xiàn)[M].成都:電子科技大學出版社,2004:13-16.
[2]李晴.高速大容量NAND FLASH存儲系統(tǒng)的設計與實現(xiàn)[D].北京理工大學,2015.
[3]陳國,高楊.NAND Flash在大容量存儲技術中的應用[J].航空計算技術,2009(2):113-116.
作者簡介:祝清法(1988-),男,江蘇連云港人,學士,助理工程師,主要研究方向為石油測井儀器。張阿朋(1985-),男,江蘇連云港人,學士,工程師,主要研究方向為石油測井儀器。