一种基于NAND FLASH的FAT文件系统的研究与实现
2012-09-30张小进罗海波
张小进,罗海波
(闽江学院 计算机科学系,福建 福州350108)
随着嵌入式系统的发展,计算资源及存储资源的不断增加,FLASH在各种嵌入式设备包括智能终端中扮演了重要的角色,可用于存储程序及大量的数据.随着FLASH技术的成熟和普及,单片机、ARM及DSP芯片已普遍采用FLASH取代过去常用的片内ROM或EEPROM,FLASH作为一种安全快速的存储体,以其体积小、容量大、成本低、掉电数据不丢失等一系列优点成为了嵌入式系统中数据和程序的主要载体.但存储中数据庞大,特别是多媒体数据庞大时,必须使用一定的文件系统进行组织和管理,本文研究了NAND FLASH上的FAT文件系统,可使得所管理的文件与Windows平台具有通用性,配合USB控制接口,可以直接在目标系统和Windows系统之间进行文件互通,具有较高的实用性及便利性.
1 相关研究
1.1 NAND FLASH的结构及特点 FLASH可分为NAND FLASH及NOR FLASH 2种.NOR FLASH的读取速度快,写入速度慢,适用于小容量程序的存储.NAND FLASH密度高,可低成本制造出更大容量的存储器,适用于大数据量的程序和数据读写场合,是目前使用较多的一种FLASH存储器结构.典型的NAND FLASH设备由若干个块(Block)组成,块与块之间是相互独立的,一个块由若干个页(Page)组成,一页有若干个可供用户使用的存储单元及供系统维护使用的备用单元(Spare Area).NAND FLASH的读操作可以以字节或页为单位进行,但由于NAND FLASH的写操作只能从1写成0,不能从0写成1,所以在对存储器进行写入之前必须进行擦除操作,将所有位置为1,且擦除是以块为单位进行的,而不能擦除单个字节或页[1].
1.2 FAT文件系统 FAT文件系统应用于桌面操作系统,具有多个版本,目前常用的是FAT16和FAT32.FAT以簇链结构来存储文件,基本的存储单元是簇.一个簇由2N(N>0)个扇区构成.1个FAT文件系统包括4个不同的部分[2-3].1)启动扇区在具有FAT文件系统的存储介质中,介质的第1个扇区为启动扇区(引导扇区),介质不同,此启动扇区大小不同,至少为512 Byte,如FLASH存储卡及硬盘即为512 Byte,软盘为1 024 Byte.启动扇区存放FAT文件系统的基本信息.2)FAT区域存放文件分配表,是分区信息的映射表,指示簇是如何存储,并记录文件的簇链结构.3)根目录区域是在根目录中存储文件和目录信息的目录表,在FAT32下可以存在分区中的任何位置,但是在早期的版本中永远紧随FAT区域之后.4)数据区域是实际的文件和目录数据存储的区域,占据了分区的绝大部分.简单地在FAT中添加文件链接的个数,就可以任意增加文件大小和子目录个数(只要有空簇存在).
2 坏块管理及磨损均衡
2.1 坏块管理 有2个原因会不可避免的造成NAND FLASH中的坏块:1)NAND FLASH由于生产工艺的问题,其在出厂时可能存在一定的坏块.这些固有坏块不能用于存储数据,已被产家进行标识(通常将坏块的第1个Page的Spare Area的第6个Byte标记为非0xFF值).2)使用过程中由于读写次数增多,好块也会变得不稳定或失效,成为坏块,称为使用坏块.对坏块进行读写和擦除操作将不能保证数据的正确性,而坏块不会影响正常块的性能,因此,为了保证整个存储器的正常有效使用,必须采取一定的坏块管理机制,本系统采用的坏块管理机制描述如下:
1)系统启动、第1次使用该FLASH或格式化时,扫描所有的块(设有An个),以确定当前的坏块数量(设有Bn个)及位置;
2)建立坏块映射表,预留Mn个块用于进行坏块映射,当正常用户使用区出现坏块时,将其映射到预留待映射坏块上;
3)预留Sn个块用于交换块,即对某块进行数据擦除时,需要将其内某些有效页数据拷贝到交换块的对应页上,以便重新写入;
4)将坏块映射表以双份拷贝的形式保存在独立的2个块上;
5)系统初始建立时,如果在映射区及交换区存在坏块,将不计入其应保留的数量内,即初始时保证映射块为Mn、交换块为Sn,但随着系统的运行,各分区坏块的出现,Mn和Sn中可用的空闲好块将减少,而当Mn或Sn为0时,该NAND FLASH将需要进行重新格式化或再次按照以上要求建立.
因此,可将1个物理NAND FLASH功能分区如图1所示(假设总容量为Tn,映射区、交换区、映射表区均无坏块).
图1 坏块管理机制下的NAND FLASH分区结构示意图
使用过程中的NAND FLASH操作流程图如图2所示(交换区操作省略).
图2 坏块管理机制流程图
2.2 磨损均衡 FLASH的块单元在频繁擦写的情况下,出现坏块的概率将增加,为了增加FLASH的整体使用寿命,可将擦写操作平衡到FLASH的各块中.本系统采用轮流使用的方法,即每次使用后,计数值加1,下一次将使用下一个可供使用的交换块,这样,交换块区的各块使用频率可实现均衡化[4-5].
文件系统下的磨损均衡可以从2个方面进行考虑:1)如果系统中的某文件需要频繁的进行擦写,则将其搬移至另外一个磨损较小的簇(或某些簇)内;2)当文件系统下某簇(或某些簇)的擦写次数明显高于其他簇时,则暂停这些小部分簇的使用.文件系统下的磨损均衡是从逻辑意义上的,簇由1个或多个扇区组成,扇区则直接映射到具体的物理块上,所以对物理存储的磨损均衡保护是有效的,但必须指出的是,文件的搬移将造成系统资源的额外消耗,且与文件的大小成正比.此外,为实现以上机制,需要在文件系统中额外维护2组信息:1)文件的擦写次数;2)簇的擦写次数.
进行文件搬移的触发条件为
暂停使用某些簇的触发条件为
恢复使用的触发条件为
其中,ENf为当前文件的擦写总次数为当前文件所在簇的平均擦写次数为文件系统下所有簇的平均擦写次数,M,N,S,T为设定阈值,各阈值均大于1且应有S>T.
由式(1)~(3)可知,当某文件的擦写总次数高于值M且其所在簇的平均擦写次数N倍于所有簇的平均擦写次数时,进行文件的搬移.当某簇的擦写次数S倍于所有簇的平均擦写次数时,暂停使用;随着文件系统的使用将增加,当暂停使用簇的擦写次数降低到T倍于所有簇的平均擦写次数时,则恢复使用.
3 系统实现与分析
在STM32F103ZE及NAND FLASH芯片HY27UF081G2A平台上,实现了本文文件系统.HY27UF081 G2A共1 Gbit,分为1 024块,每块为64页,每页为(2 K+64)Byte,其中2 KB为可用有效的数据空间,64 B为扩展冗余空间,用于存放控制及标志信息,如标识该块是否已坏,在HY27UF081G2A中每块第1页冗余信息区的第1个字节如果为非0xFF的值,则表示此块已坏.在该平台上实现的软件系统框架如图3所示.
图3 软件系统框架示意图
如图3所示,该系统实现了文件系统的挂载(f_mount)、打开文件(f_open)、读文件(f_read)、写文件(f_write)、关闭文件(f_close)等FAT文件系统所必须的API接口,在文件系统之下嵌入磨损均衡管理层,并基于HY27UF081G2A的物理存储驱动实现了坏块管理算法.此外,为了测试该文件系统,将USB驱动嵌入到系统中,从而可以在PC上通过USB接口观察调试.
为考证本系统的可行性,测试参数先行设置为M=1 000,N=5,S=10,T=4,系统随机创建文件并读写文件,运行24 h.性能测试结果如表1所示,其中磨损均方差用于反映各块擦写次数偏离平均擦写次数的差值,则可定义为
其中,ENuci为各块擦写次数,N取HY27UF081G2A总块数1 024.从表1可知,该系统具有较好的FLASH存储利用率和较快的文件读写速度,在上述参数设置下,均方差σ为37.3,可见各存储块具有较为平均的磨损率.
表1 性能测试表
4 结束语
本文基于NAND FLASH的存储特性,在研究FAT文件系统的基础上,对其进行了实现并设计了物理存储的坏块管理机制及基于文件系统的磨损均衡机制,试验测试结果表明该系统稳定可靠,对于构建无操作系统下的嵌入式文件系统具有重要的借鉴及工程意义,且便于移植到其他硬件系统平台.本文所研究设计的FAT系统存在进一步的研究空间,如对于文件系统中长文件名的支持,各参数的设定对系统性能影响的考察分析等,笔者将在此方面进行深入的研究和探讨.
[1]杨瑞霞.基于NAND FLASH的FAT文件系统的实现[J].山东轻工业学院学报,2007,21(3):27-30.
[2]刘可嘉,梁阿磊.实现实时FAT文件系统的一种简单方法[J].计算机工程与应用,2008,44(16):70-72.
[3]Microsoft Corporation.Microsoft extensible firmware initiative FAT32 File system specification[M].北京:微软公司,2000.
[4]CHOI In-hwan,SHIN Dong-kun.Wear Leveling for PCM using hot data identification[M]∥KIM Kui-nam J,AHN Seong Jin.Proceedings of the International Conference on IT Convergence and Security 2011,Dordrecht:Springer Netherlands,2012.
[5]WANG Xin-hua,WANG Jian-fen.A Wear-Leveling algorithm for NANDFLASH in embedded system Proceedings of the Fifth IEEE International Symposium on Embedded Computing,Beijing,October 6 -9,2008[C].[S.1]:IEEE Computer Society,2008:260-265.