NAND Flash文件系统方案及其可靠性设计

时间:2022-03-24 11:34:07

NAND Flash文件系统方案及其可靠性设计

摘要:NAND Flash具有高存储密度和高存储速率的特点,在嵌入式系统领域得到了广泛应用,如何使其文件系统的性能最优化成为本文讨论的主题。本文首先提出文件系统的设计方法,主要阐述面向嵌入式应用的FAT文件系统;接着,针对NAND Flash存在固有的坏块这一弱点,为了提高整个系统的可靠性,提出一种利用嵌入式文件系统进行坏块处理的策略,核心思想为利用Flash存储器上未使用空间来代替坏块,同时,在FAT表中标记出损坏的坏的信息,避免以后对坏块进行读写。本策略经项目的具体应用证明,具有较高可靠性。

关键词:NAND;Flash文件系统;坏块处理

中图分类号:TP343文献标识码:A 文章编号:1009-3044(2007)17-31320-01

A Design of File System and Reliability about NAND Flash

CHENG Dao-yuan

(Southeast university ASIC Center, Nanjing 210096,China)

Abstract: Nand flash become widely used in embedded system because of high memory density and high memory speed. So how to improve quality of Nand Flash file system is a main subjectin this paper. First this paper present the design method of file system , main about FAT file system in embed system. And then a new method of dealing with the bad block is also introduced in this paper to get over the hindrance. The method is that replaces the bad block with free space on the flash. Bad blocks marked in the file allocation table are never used again. It has been carried out in a project with high stability.

Key words:NAND;Flash File System;Bad Block Management

随着嵌入式系统在消费电子,数据采集和工业控制等领域得到越来越广泛的应用。各个领域都对嵌入式系统提出了更高的要求。作为嵌入式系统中最重要的组成部分,存储系统呈现出了较快的发展速度。NAND FLASH作为一种安全、快速的存储体,具有体积小、容量大、成本低、以及更多的擦除次数等一系列优点,已成为嵌入式系统中数据和程序最主要的载体。由于NAND FLASH在结构和操作方式上与硬盘、E2ROM等其他存储介质有较大区别,使用NAND FLASH时必须根据其自身特性,对文件系统进行特殊设计,以保证系统的性能达到最优。同时由于工艺和使用环境的问题,NAND Flash存储器中不可避免的会出现坏块,因此必须提出有效的坏块处理方法,以解决坏块问题,实现存储系统的高可靠性。

1 NAND FLASH特点

1.1 区块结构

NAND Flash存储器内部分为若干个存储单元块(block),每个存储单元块又分为若干个页(page),存储单元块是最小的擦除单位,页是写入数据的最小单位。

1.2 先擦后写

由于FLASH的写操作只能将数据位从1写成0,不能从0写成1,所以在对存储器进行写入之前必须先执行擦操作,将预写入的数据位初始化为1。擦操作的最小单位是一个区块,而不是单个字节。

1.3 操作指令

NAND FLASH的操作不能像RAM那样,直接对目标地址进行总线操作。比如执行一次写操作,它必须完成一段时序才能将数据写入到FLASH中。

1.4 坏块

NAND FLASH的坏块是随机分布的,可能在出厂时就存在坏块,也可能在使用过程中,导致某些区块的损坏。区块一旦损坏,将无法进行修复。如果对已损坏的区块进行操作,可能会带来不可预测的错误。

2 NAND Flash 文件系统的设计

将整个文件系统分为两个层次,第一层,直接和物理硬件接触,管理Flash物理存储器,第二层,在基层之上,实现文件管理,如实现FAT。

2.1 第一层

2.1.1 物理地址到逻辑地址的映射

为了在NAND Flash物理地址和FAT操作的逻辑地址之间建立一个好的映射关系,须对NAND Flash的存储空间在逻辑上进行了重新定义。物理上整个Flash划分为若干存储单元块,每个存储单元块内部分成若干物理页,每个物理页又可以分为基本的数据区和其它信息保留区(如安全性)。逻辑上将整个存储器划分为若干簇,以簇作为最小存储单位。确定好簇和物理页及物理区块的对应关系后,物理地址到逻辑地址的映射也就确定了。

2.1.2可靠性设计

一个完善的文件系统需要有良好的可靠性。笼统的讲,可靠性的实现,需要存储器信息的支持。

2.1.3 均衡擦写次数

由于NAND Flash有一定的使用寿命,所以要尽量避免频繁地对同一块地址操作,以免造成局部单元提前损坏,可以设计算法,将NAND Flash中要更新的数据直接写入一个空块中,降低由于NAND Flash先擦除后写入的特性带来的对块的频繁擦除。

2.2 FAT设计

在NAND Flash上,建立了FAT文件系统来对文件操作进行管理。将FAT文件系统具体分为以下四部分:

2.2.1 FAT的引导区

该引导区存放代码所需的信息及最重要的文件系统信息。这些信息包括了NAND Flash存储器的类型、容量以及划分成多少个簇;每个簇包含多少扇区、FAT表数目、保留扇区数、根目录的首簇号及根目录入口数、版本信息等等。引导扇区是在格式化NAND Flash时生成的。

2.2.2 FAT的文件分配表

文件分配表存放文件所占用的存储空间簇链以及NAND Flash存储器的占用和空闲空间的情况。为了防止文件分配表损坏而引起文件的丢失,可以在系统中保存两个相同的文件分配表

(下转第1324页)

(上接第1320页)

FAT1和FAT2,以改善其安全性。在文件系统的操作中,程序对FAT表结构的两个备份进行顺次修改,以此确保Flash存储器上总是存有一整套完好的文件分配表。系统对FAT表的访问原理如下:访问文件时先从要目录中找到该文件的目录项,从中读出首簇号。然后在FAT中找到从该首簇号开始的簇链,簇链上的簇号即为文件依次存放的位置,这样便可以进行数据读写了。

2.2.3 FAT的根目录区

FAT的根目录区是固定大小的紧跟在FAT表后的区域。FAT16中将从FAT区之后紧跟的32个扇区作为根目录区,可以保存512个目录项。每个目录项记录了该文件的文件名、文件属性、文件大小、文件创建的日期和时间以及文件在数据区中所占的首簇号,即该文件在FAT表中的入口等数据。

2.2.4 FAT的数据区

数据区存在文件的数据内容。文件系统对数据区的存储空间是按簇进行划分和管理的。

3 NAND Flash可靠性设计

由于工艺和使用环境的问题,NAND Flash 存储器中不可避免的会出现坏块,这一弱点长期影响存储的可靠性,带来不可预测的后果,因此如果能解决坏块问题,将大大提升NAND Flash 的可靠性。本文提出一种在文件系统底层解决坏块问题的方法,即利用Flash存储器上未使用的空间来代替坏块,同时在FAT表中标记出损坏的坏块信息,避免以后对坏块进行读写。具体方案如下。

3.1 坏块发现

NAND Flash对存储器的写入采用先擦后写的流程,擦除的最小单位为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的NAND Flash,将测试代码先写入一块数据,然后读出数据进行校验的方法对上述方案进行论证,通过两个星期反复的读写,结论为:在没有采用坏块处理程序之前,由于坏块的存在,导致写入的数据在大约12M之后全部丢失,采用坏块处理程序之后,运行的两周内没有任何校验错误。由此可见其可靠性得到很大提升。

4 结语

通过上述对NAND Flash文件系统的设计,使得NAND Flash的性能大大优化,能够满足各个领域对嵌入式存储器越来越高的要求,同时在面对NAND Flash所固有的坏块问题上,通过上述坏块处理的算法,很好的解决了在NAND Flash 存储介质上运用FAT文件系统的坏块问题,增加了整个嵌入式系统的存储可靠性。

参考文献:

[1]陈育智.嵌入式系统中的Flash 文件系统[J].单片机与嵌入式系统应用,2002(2):5-8.

[2]Mike Ficco.如何在嵌入式电子设备中建立多媒体文件系统[J].电子工程专辑,2004(2):20-22.

[3]陈代军.解析FAT文件系统对长文件名的支持[J].成都信息工程学院学报,2004,(18):380-385.

上一篇:对遗留系统的Web服务封装 下一篇:《跑跑卡丁车》高级技术白皮书