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