FAT文件系统在NAND Flash存储器上的改进设计
4 FAT文件系统的改进设计
当文件系统工作时,发生变化的只有FAT表和紧跟在其后的FRT表,因此,只用跟踪记录FAT表和FRT表就能知道文件操作的具体情况,这也是文件系统的核心;但Flash存储器结构与硬盘不同,不能直接改写其内容。直接移植的FAT文件系统、FAT表和FRT表始终存放在同一个区块中,将会导致该区块的使用寿命明显比其他的区块短。如果这一重要区域失效,那么将影响整个存储器的使用,因此必须改进两个表的存储方式。
Flash生产厂商设定的存储空间的第l区块必定是有效块。在改进的设计中,将第1个区块(128KB+4KB)作为存储器的系统记录区,同时在此区块中建立一个100KB(50页)的空白区域,用于记录FAT表在Flash中的起始地址(FRT表紧跟FAT表之后,不必再单独记录其首地址)。按照写入操作以页为单位的规则,100 KB的空间,可以加入FAT表的起始地址50次。
FIash第1块的分配信息区结构如图1所示。
改进设计的文件系统把FAT表和FRT表作为可移动的数据放在某一个区块内,在Flash的系统信息区中记录着FAT表的首地址,并用指针指向它。每次FAT表存储的位置发生变化时,只需将新位置的首地址添加到系统信息区的空白区域中,再调整指针的指向。这样避免了FAT表和FRT表始终在一个区块中反复擦写,导致该区块被过度使用,缩短存储器的寿命。文件系统的操作原理框网如图2所示。
图2中,主引导区程序首先读出存储在系统信息区中FAT表的首地址,找到FAT表和FRT表,再将其复制到控制终端的内存中进行操作(内存中可以按位修改,避免Flash不能按位修改的问题)。由于FAT文件系统是索引的链式结构,在内存中修改FAT表和FRT表的同时,也将两个表的改写情况以链式的方式紧跟在Flash存储器中两个表后面的空白区域里。这样在任何时候发生突然掉电或非法插拔而导致内存中FAT表和FRT表丢失的情况下,也能根据Flash中改写的内容恢复两个表,提高文件系统的可靠性。
在全部操作完成后,先把内存中的FAT表和FRT表写到存储器的转存区块中,擦除原来表所在的区块,再将转存区块中的内容复制到擦除后的原区块中。最后,擦除转存区块,完成整个一次操作。
同时,为了避免表存储区块的过度使用,当其擦除操作次数到了一个阈值(如500000次)时,先将FAT表和FRT表移动到其他空白区块,新区块作为表的存储区块。再把其中FAT表的首地址,写到FIash存储器的系统信息区的预留空白区域中,通过变化指针,程序在下次操作时将读取新地址。原先存放FAT表和FRT表的区块被标志为无效,最后通过Flash的垃圾回收策略,回收此区块。这样可达到将FAT表和FRT表作为移动数据存储的目的,延长了使用寿命,如图3所示。
上面的设计中,存储器第l区块作为信息记录区块。其中的预留空白空间可以记录50个地址,可以满足FAT表和FRT表移动5O次。表存储区块的使片j寿命提高了5O倍。
经过上面的改进,文件系统不仅避免了FAT表和FRT表始终在一个块中被过度使用的现象,也避免了在任何时候,发生掉电或非法插拔的情况。仍然可以根据Flash中修改过的内容重新建立新的FAT表和FRT表,使文件系统不至于遭到致命的破坏。这样虽然占用了一些Flash资源,但确保了文件系统的安全性和可靠性。通过这样的没计,即使出现了操作异常的情况,错误也只涉及当时被操作的文件,不会扩散给F1ash存储器中的其他文件,更不会因此彻底损坏FAT表和FRT表,造成整个文件系统的瘫痪。
结语
根据嵌入式系统中Flash存储器的特点没计的FAT文件系统,对FAT表和FRT表的存储方式进行了改进,使其使用寿命和可靠性都有了较大的提高。即使在嵌入式设备操作异常频发的恶劣工作条件下,文件系统也能够保证安全地工作。此文件系统出于可靠性的考虑,较通常的文件系统只多占用1个D(块(转存区块)的资源,而对于嵌入式上使用的NANE)Flash存储器,这样的耗费完全是可以接受的。
编者注:本文为期刊缩略版,全文见本刊网站www.mesnet.com.cn。
- VxWorks中怎么从Flash BOOT(11-15)
- DSP和Flash接口技术的实现(08-15)
- 基于JTAG的DSP外部FLASH在线编程与引导技术(01-22)
- TMS320F2812片内Flash在线烧写技术研究(01-23)
- 基于VxWorks的文件系统的研究与实现(09-18)
- TMS320C6713B DSP的外部FLASH引导(03-02)
