祝清法 张阿朋
摘 要:存储式测井仪器在工作过程中把测井数据存储到本地,测井完毕后把数据读出到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-),男,江苏连云港人,学士,工程师,主要研究方向为石油测井仪器。