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