NANDFlash文件系统方案及其可靠性设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
随着嵌入式系统在消费电子,数据采集和工业控制等领域得到越来越广泛的应用。
各个领域都对嵌入式系统提出了更高的要求。
作为嵌入式系统中最重要的组成部分,存储系统呈现出了较快的发展速度。
NANDFLASH作为一种安全、快速的存储体,具有体积小、容量大、成本低、以及更多的擦除次数等一系列优点,已成为嵌入式系统中数据和程序最主要的载体。
由于NANDFLASH在结构和操作方式上与硬盘、E2ROM等其他存储介质有较大区别,使用NANDFLASH时必须根据其自身特性,对文件系统进行特殊设计,以保证系统的性能达到最优。
同时由于工艺和使用环境的问题,NANDFlash存储器中不可避免的会出现坏块,因此必须提出有效的坏块处理方法,以解决坏块问题,实现存储系统的高可靠性。
1NANDFLASH特点
1.1区块结构
NANDFlash存储器内部分为若干个存储单元块(block),每个存储单元块又分为若干个页(page),存储单元块是最小的擦除单
位,页是写入数据的最小单位。
1.2先擦后写
由于FLASH的写操作只能将数据位从1写成0,不能从0写成1,所以在对存储器进行写入之前必须先执行擦操作,将预写入
的数据位初始化为1。
擦操作的最小单位是一个区块,而不是单个字节。
1.3操作指令
NANDFLASH的操作不能像RAM那样,直接对目标地址进行总线操作。
比如执行一次写操作,它必须完成一段时序才能将数据写入到FLASH中。
1.4坏块
NANDFLASH的坏块是随机分布的,可能在出厂时就存在坏块,也可能在使用过程中,导致某些区块的损坏。
区块一旦损坏,将无法进行修复。
如果对已损坏的区块进行操作,可能会带来不可预测的错误。
2NANDFlash文件系统的设计
将整个文件系统分为两个层次,第一层,直接和物理硬件接
触,管理Flash物理存储器,第二层,在基层之上,实现文件管理,如实现FAT。
2.1第一层
2.1.1物理地址到逻辑地址的映射
为了在NANDFlash物理地址和FAT操作的逻辑地址之间建立一个好的映射关系,须对NANDFlash的存储空间在逻辑上进行了重新定义。
物理上整个Flash划分为若干存储单元块,每个存储单元块内部分成若干物理页,每个物理页又可以分为基本的数据区和其它信息保留区(如安全性)。
逻辑上将整个存储器划分为若干簇,以簇作为最小存储单位。
确定好簇和物理页及物理区块的对应关系后,物理地址到逻辑地址的映射也就确定了。
2.1.2可靠性设计
一个完善的文件系统需要有良好的可靠性。
笼统的讲,可靠性的实现,需要存储器信息的支持。
2.1.3均衡擦写次数
由于NANDFlash有一定的使用寿命,所以要尽量避免频繁地对同一块地址操作,以免造成局部单元提前损坏,可以设计算法,将NANDFlash中要更新的数据直接写入一个空块中,降低由于NANDFlash先擦除后写入的特性带来的对块的频繁擦除。
2.2FAT设计
在NANDFlash上,建立了FAT文件系统来对文件操作进行管理。
将FAT文件系统具体分为以下四部分:
2.2.1FAT的引导区
该引导区存放代码所需的信息及最重要的文件系统信息。
这些信息包括了NANDFlash存储器的类型、容量以及划分成多少
个簇;每个簇包含多少扇区、FAT表数目、
保留扇区数、根目录的首簇号及根目录入口数、版本信息等等。
引导扇区是在格式化NANDFlash时生成的。
2.2.2FAT的文件分配表
文件分配表存放文件所占用的存储空间簇链以及NANDFlash存储器的占用和空闲空间的情况。
为了防止文件分配表损坏而引起文件的丢失,可以在系统中保存两个相同的文件分配表
(下转第1324页)
收稿日期:2007-09-10
作者简介:程道远(1981-),男,江苏省南京市人,硕士,研究方向为嵌入式系统设计。
NANDFlash文件系统方案及其可靠性设计
程道远
(东南大学国家ASIC系统工程技术研究中心,江苏南京210096)
摘要:NANDFlash具有高存储密度和高存储速率的特点,在嵌入式系统领域得到了广泛应用,如何使其文件系统的性能最优化成为本文讨论的主题。
本文首先提出文件系统的设计方法,主要阐述面向嵌入式应用的FAT文件系统;接着,针对NANDFlash存在固有的坏块这一弱点,为了提高整个系统的可靠性,提出一种利用嵌入式文件系统进行坏块处理的策略,核心思想为利用Flash存储器上未使用空间来代替坏块,同时,在FAT表中标记出损坏的坏的信息,避免以后对坏块进行读写。
本策略经项目的具体应用证明,具有较高可靠性。
关键词:NAND;Flash文件系统;坏块处理中图分类号:TP343文献标识码:A文章编号:1009-3044(2007)17-31320-01
ADesignofFileSystemandReliabilityaboutNANDFlash
CHENGDao-yuan
(SoutheastuniversityASICCenter,Nanjing210096,China)
Abstract:Nandflashbecomewidelyusedinembeddedsystembecauseofhighmemorydensityandhighmemoryspeed.Sohowtoim-provequalityofNandFlashfilesystemisamainsubjectinthispaper.Firstthispaperpresentthedesignmethodoffilesystem,mainaboutFATfilesysteminembedsystem.Andthenanewmethodofdealingwiththebadblockisalsointroducedinthispapertogetoverthehin-drance.Themethodisthatreplacesthebadblockwithfreespaceontheflash.Badblocksmarkedinthefileallocationtableareneveruseda-gain.Ithasbeencarriedoutinaprojectwithhighstability.
Keywords:NAND;FlashFileSystem;BadBlockManagement
(上接第1320页)
FAT1和FAT2,以改善其安全性。
在文件系统的操作中,程序对FAT表结构的两个备份进行顺次修改,以此确保Flash存储器上总是存有一整套完好的文件分配表。
系统对FAT表的访问原理如
下:访问文件时先从要目录中找到该文件的目录项,从中读出首簇号。
然后在FAT中找到从该首簇号开始的簇链,簇链上的簇号即为文件依次存放的位置,这样便可以进行数据读写了。
2.2.3FAT的根目录区
FAT的根目录区是固定大小的紧跟在FAT表后的区域。
FAT16中将从FAT区之后紧跟的32个扇区作为根目录区,可以保存512个目录项。
每个目录项记录了该文件的文件名、文件属性、文件大小、文件创建的日期和时间以及文件在数据区中所占的首簇号,即该文件在FAT表中的入口等数据。
2.2.4FAT的数据区
数据区存在文件的数据内容。
文件系统对数据区的存储空间是按簇进行划分和管理的。
3NANDFlash可靠性设计
由于工艺和使用环境的问题,NANDFlash存储器中不可避免的会出现坏块,这一弱点长期影响存储的可靠性,带来不可预测的后果,因此如果能解决坏块问题,将大大提升NANDFlash的可靠性。
本文提出一种在文件系统底层解决坏块问题的方法,即利用Flash存储器上未使用的空间来代替坏块,同时在FAT表中标记出损坏的坏块信息,避免以后对坏块进行读写。
具体方案如下。
3.1坏块发现
NANDFlash对存储器的写入采用先擦后写的流程,擦除的最小单位为1个block,写入的最小单位为一个page。
在写入数据时,先在内存中申请1个block大小的缓冲区,然后在存储空间找到要写入数据的page所在的block,将该block全部读入缓冲区,在缓冲区中将数据写入相应的page,写完后,将该block写入Flash,若在写入Flash时多次报错则判定该block为坏块
3.2坏块处理
3.2.1在内存里建立文件系统的反向簇链,方便进行坏块的替换。
3.2.2备份坏块对应簇的FAT表项,在FAT表中标记出该坏块的信息。
3.2.3寻找替换空间
以1个block包含32个page,1个簇包含16个page,即1个block包含2个簇为例进行说明,坏块N包含x,x+1簇,首先从Flash的末尾处开始寻找空闲块,找到即进行整块的替换,见图1。
图1替代块
若一直寻找到数据区的开头都没有空闲块,则重新寻找空闲
簇,以簇为单位进行替换,如图2,假设Y,Z分别为X,X+1的替换簇,由于簇在物理空间上并不一定连续,因此在进行簇的替换时可能会出现3种情况:
情况1:替换簇不在坏块中,即Y,Z不在坏块N中
处理方法:直接进行簇的替换,将备份的索引号,直接赋值给替换簇的FAT表项,同时更新反向簇链。
情况2:替换簇在坏块中,即Y或者Z也在坏块N中,这时要再分两种情况
情况2.1替换簇在被替换簇之前
处理方法:因为替换簇自己在之前已经被替换,所以要备份之前更新FAT表时替换的新簇簇号,根据两坏簇间距离,到替换簇号备份中查找其应对应的簇号,来更新当前簇的链接,同时更新反向FAT表。
情况2.2替换簇在被替换簇之后
处理方法:因为替换簇是坏簇,其替换的位置未知,所以只更新反向FAT表,其本身的FAT表项到更新替换簇的前续节点时再做更新。
最后查询反向FAT表,将替换的各个新簇接回其前续节点。
图2替代簇
如果FAT表中已经没有空闲簇则报错,该方案完成。
使用一块32M的NANDFlash,将测试代码先写入一块数据,然后读出数据进行校验的方法对上述方案进行论证,通过两个星期反复的读写,结论为:在没有采用坏块处理程序之前,由于坏块的存在,导致写入的数据在大约12M之后全部丢失,采用坏块处理程序之后,运行的两周内没有任何校验错误。
由此可见其可靠性得到很大提升。
4结语
通过上述对NANDFlash文件系统的设计,使得NANDFlash的性能大大优化,能够满足各个领域对嵌入式存储器越来越高的要求,同时在面对NANDFlash所固有的坏块问题上,通过上述坏块处理的算法,很好的解决了在NANDFlash存储介质上运用FAT文件系统的坏块问题,增加了整个嵌入式系统的存储可靠性。
参考文献:
[1]陈育智.嵌入式系统中的Flash文件系统[J].单片机与嵌入式系统应用,2002(2):5-8.
[2]MikeFicco.如何在嵌入式电子设备中建立多媒体文件系统[J].电子工程专辑,2004(2):20-22.
[3]陈代军.解析FAT文件系统对长文件名的支持[J].成都信息工程学院学报,
2004,(18):380-
385.
件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全、正确。
最后是系统测试,把已经经过确认的软件纳入实际运行环境中,与其他系统成分组合在一起进行测试。
6结束语
软件测试是保证软件可靠性的主要手段,是软件开发过程中最艰巨、最繁重的任务。
软件开发人员要明确软件测试的目标,掌握软件测试的方法、策略,选用最少量的高效测试数据,做到尽可
能完善的测试,从而尽可能多地发现软件中的问题。
降低软件测试的成本,提高软件测试效率。
开发出用户满意的高质量的软件。
参考文献:
[1]张海藩.软件工程导轮[M].北京:清华大学出版社,1992.6.[2]郑人杰,等.实用软件工程[M].北京:清华大学出版社,1997.4.
[3]古乐,史九林,等.软件测试案例与实践教程[M].北京:清华大学出版社,2007.2.。