基于NOR FLASH的嵌入式FAT文件系统
2018-01-06孙甲松陈从华
张 鹏,孙甲松,陈从华
(1.清华大学电子工程系,北京100084;2.厦门雅迅网络股份有限公司福建厦门361008)
基于NOR FLASH的嵌入式FAT文件系统
张 鹏1,2,孙甲松1,陈从华2
(1.清华大学电子工程系,北京100084;2.厦门雅迅网络股份有限公司福建厦门361008)
本课题就是要设计一套确实可行的方案,将FAT文件系统管理文件/数据的理念应用于FLASH芯片上。本设计采用了数据块使用情况信息表BIM和定位表MAT这两个结构。通过利用NOR FLASH的特性,在不频繁擦写的情况下记录数据块当前状态和擦写次数,将FAT表和数据块磨损信息实时写入到FLASH存储器中。在此基础上制定合理的均衡损耗策略,并实现坏块管理、碎片回收。适用于内存资源有限、对上电时间有要求、可能随时掉电的终端。令终端能够使用标准接口快速存储、访问大容量数据,并提高FLASH器件使用寿命。
文件系统;FLASH;FAT;嵌入式
FLASH即半导体存储器,已被广泛应用于便携式设备等嵌入式系统中。具有非易失性、功耗低、成本低、体积小、容量大、读写速度快、无机械故障等优点。随着存储器容量的不断增大、嵌入式设备应用功能增多和系统复杂性的增加,如何高效地存储和管理数据从而方便上层开发应用,成为一个重要的课题。引入嵌入式FLASH文件系统正是解决这个问题的好办法。文件系统可以带来如下几点便利:能够高效的存储和管理数据,提高存储可靠性,方便快捷检索文件,使数据库具有高灵活性、良好的可移植性及可裁剪性,缩短上层应用开发周期。
1 NOR FLASH存储器特性
本设计是以NOR FLASH为平台进行开发设计。NOR FLASH的数据区必须先经过擦除操作才能写入。擦除操作以数据块(BLOCK,也称为扇区,或者擦除单元)为单位。数据块在正确擦除后,块内所有数据位都被置为“1”。软件执行的写入操作可使必要的数据位从“1”变成“0”(bit),但是要再想让位由“0”改为“1”,就不能够直接通过写入指令完成,须要重复以上的“擦除——写入”流程。请注意,并不是每次写入NOR FLASH芯片都需要进行擦除,可以只进行一些数据位的清除。后面提到的设计方案就用到了该特性。
2 应用环境
由于是在嵌入式终端上使用的文件系统,运行环境比较恶劣,设计时要考虑到应用场景的约束:
1)嵌入式MCU资源较少。包括了ROM和RAM,尤其是RAM,电子设备由于要考虑成本会采用尽量低配的芯片,往往没有过多的资源用于文件系统。
2)要求启动时间短。在一些应用场合中,要求终端必须在一定时间内完成上电初始化进入正常运行状态。
3)终端电源随时可能被关闭,因此信息数据最好能够实时更新到FLASH器件中。
3 其他设计方案对比
目前JFFS和YAFFS是比较常用的FLASH文件系统。它们都是日志型文件系统,需要在开机时从头至尾扫描FLASH器件中所有数据块的数据,在终端的内存中生成一个记录文件系统信息的目录树。这种设计有一定的局限性,文件索引信息会占用太多的内存资源,并且初始化时扫描时间较长,因此没有办法用在一些嵌入式终端中。本次设计采用FAT文件系统的处理和管理数据、文件方法。而如何解决均衡磨损的问题则是本次设计的难点。
嵌入式系统中的FLASH不能直接移植通用的FAT文件系统。在通用的FAT文件系统中,系统的记录信息(例如FAT表)放在固定的数据块,在文件系统使用过程中记录信息需要经常被改写,会导致其所在数据块频繁擦写,从而减少器件使用寿命。这是移植文件系统的难点,也是本次设计所要着重解决的问题。
之前有些嵌入式FAT设计是将文件系统的记录信息暂时存放到静态内存,再定时存储到FLASH芯片中。这种设计比较适用于电源稳定,关机时要能够有充足时间保存信息的场景。这种设计并不能很好的适用于上述随时可能掉电的终端上。首先掉电时会丢失还未存储的数据,定时时间间隔越长丢的数据越多。而且更严重的是,定时时间如果相对于数据存储的时间间隔不够,则文件系统的记录信息所处数据块达不到均衡磨损的目的,定时间隔越短,反而越容易形成“集中磨损”。
4 FLASH文件系统的设计
本研究目的在于提供一种在NOR FLASH存储器上建立FAT文件系统的优化方法,实现了FAT文件系统的掉电保护、坏块管理、碎片回收和均衡损耗策略。制定合理的坏块管理、碎片回收、均衡损耗策略。本设计将数据块擦除次数实时记录到FLASH当中,可用于随时掉电的应用场景。
以下设计方案以MX25L1606E芯片为例。容量为16M-bit。器件数据区分为512个数据块,每块16页,每页256个字节。其它容量类型的FLASH可以自行计算调整设计参数。
4.1 系统结构
通用的FAT文件系统基本结构如图1所示,包括MBR、DBR及其副本、FAT1、FAT2和数据区,根目录包含在数据区中。
图1 通用FAT文件系统结构
其中MBR是主引导记录,DBR是分区引导扇区。它们包括了文件系统的基本信息。对于电子设备终端来说,由于FLASH芯片属于内部器件,且容量等参数信息为已知,并不会在使用过程中更换不同规格的存储器。因此并不需要MBR、DBR这部分数据内容。每扇区字节数和每簇扇区数这些参数信息可以在程序中直接根据芯片参数进行赋值。因此可以只保留FAT表、根目录和普通数据区。
本设计引入BIM数据块使用情况信息表和MAT数据块定位表。由于终端设备可能会出现在擦除或写入的过程中掉电的情况。必须考虑数据的安全性。对此,本系统中的FAT、根目录、BIM、MAB作为重要数据都进行双备份处理。每次都顺序擦除写入数据。若设备在上电后发现其中有数据块因为一些原因遭到破坏使得信息无效,则从另一份数据中拷贝至失效的数据块中完成恢复。
实际FLASH文件系统结构图如图2所示。
图2 嵌入式FAT系统的结构示意图
4.2 BIM数据块使用情况信息表
BIM(Block Information Map)记录了FLASH数据块当前状态及已擦除次数。对于要实时写入信息至闪存的终端来说,BIM的问题和FAT表一样,如果每擦除一个数据块就要更新BIM,那么BIM将因频繁擦写而提前损坏。为了解决这个问题,具体实施方法如下。
案例中FLASH总共512个数据块,每个块可以用8个字节信息来记录。记录结构体结构分为3个部分,如图3所示。
图3 BIM结构体示意图
每个数据块的记录分成3个部分。低位标4个字节包含32个bit位作为单次计数,初始化为“1”。当对应的数据块产生擦除操作时,将最低位的“1”变为“0”来计数(此时可以直接写入而不需要擦除数据块使用情况信息表)。中间两个字节长度记录擦除32次的倍数。当32个数据位全部清0时,倍数计数加1。由此,可记录数据块擦除次数总共为200万次。而平均擦除其他数据块平均32次才需要擦除一次数据块使用情况信息表,不至于频繁修改该信息表。
而最高位两个字节表示对应数据块的当前状态。其各值含义如下:
0xA5FF-空闲
0xA5FE-正在准备写入数据
0xA5FC-已写入有效数据
0xA5F8-已被删除的数据
0xA580-坏块
可以看出数据块状态逐步变化时可以只写入数据位而不需要重新擦除。
图4 数据块使用情况信息表数据示例
按照上面的存储方式,就可以将所有数据块的擦除次数记录在FLASH当中。在此前提下,设计合理的数据块损耗均衡算法。
4.3 损耗均衡算法
当某个数据块需要擦写时,根据所有数据块的擦除情况重新检查,视情况分配新的数据块继续存储数据。以达到均衡磨损的目的。
由于是嵌入式内部使用的文件系统,可以在分配新的数据块的算法上,考虑热区数据和冷区数据两种,区别分配算法。可以通过上层应用定义文件夹来归类这两种数据。
所谓热区数据,是指经常更新的数据信息。比如终端的定时采集记录数据、设备使用状态信息等等。系统先设定擦除次数差值上限,定义为阈值T。如果热区信息数据块总擦除次数高出所有数据块平均擦除次数超出阈值T时,判断热区数据需要分配新数据块。热区数据的分配比较简单,扫描整个BIM,查找标志为“空闲”或“已删除”的擦除次数最少的数据块,作为新的数据块进行记录即可。
而冷区数据是指很久才更新一次,或者甚至设备出厂后都不怎么更新的数据信息。比如文件系统的根目录和终端的参数。对于这类信息,在其数据更新时先判断其擦除总次数是否低于或高于平均擦除次数太多(分别设置两个阈值),如果需要重新分配新数据块,则先计算所有数据块平均擦除次数,在低于平均擦除次数的数据块中寻找最接近这个平均值的块进行存储。
通过对热、冷区数据的特殊处理,可以更好的实现数据块损耗均衡。
4.4 MAT定位表
MAT(Map Allocation Table)用于记录定位 FAT表、根目录及BIM分别在哪个数据块中。由于擦写次数的限制,FAT表、根目录、BIM不能处于固定的扇区。当这3个表所在的数据块擦写次数累加到一定次数时,同样需要寻找磨损程度较低的数据块继续记录。此时就需要更新定位表。
系统需要MAT处于相对固定的位置,这样终端初始化时才能先找到MAT,再通过它查找FAT表、根目录及BIM的位置。可以将MAT安排在最开始的数据块中。而为了使MAT不会频繁的擦除,其具体实施方案如下。
MAT数据占用一个数据块,容量4 K,第一次初始化为全“0xFF”,预留最后8个字节写入标识符。以8个字节为单位,整合BIM、FAT表、根目录所在的数据块序号,从头开始写入MAT数据块中。MAT表采用只添加数据而不修改数据的方式。一直添加到定位表所处的数据块写满了为止,再重新擦写。如图5所示。
图5 MAT数据示例
终端每次上电读取标识符,如果数据符合则从记录区读取非“0xFF”最后8字节的数据,便可解析BIM、FAT表、根目录所在数据块。
当定位表写满后,重新擦写。系统预留FLASH芯片最开始的5个备份数据块区供定位表循环使用以防MAT成为坏块。如果出现坏块,写入下一个备份数据块中(MAT有副本,所以实际上是占用2个数据块)。当终端上电时,从预留区最后一个数据块判断标识符,确认MAT所在的真实数据块扇区。
4.5 总体流程
软件总体流程如图6所示。终端在上电初始化过程中,终端确认定位表MAT信息,查找加载数据块使用情况信息表BIM数据,并将BIM读入内存。当终端运行过程中需要将某个文件数据更换数据块扇区或添加文件数据至新的数据块时,先根据BIM查找标志为“空闲”或“已删除”擦除次数较少的数据块,将新数据块状态改为“正在准备写入”。再依次检查根目录、FAT表和BIM表是否需要修改且被擦除次数过多,如果是则同样查找新数据块并修改其状态标志。而后依次写入文件数据、根目录、FAT,更新最终数据块状态写入BIM。如果后三者有改动所在数据块扇区号。则增加一条记录写入MAT。
图6 文件系统流程图
5 结论
本次设计研究了NOR FLASH文件系统的架构和存储管理技术,旨在研究和开发一种可以运用于NOR FLASH的FAT文件系统,适合对系统开机时间有要求、内存资源有限、供电条件恶劣的嵌入式终端。向上层应用提供了标准的文件接口。解决了FAT表的存储问题,并且加入了数据块均衡磨损的算法,设计了可行的空间分配方案,提高了FLASH的使用寿命。此外,还增加了垃圾回收和坏块管理等机制,增加掉电保护,提高了存储的可靠性。
[1]覃万林.基于实时系统的Flash文件系统的研究与应用[D].广州:广东工业大学,2012.
[2]曹璐.基于NAND FLASH的文件系统设计与实现[D].上海:华东师范大学,2012.
[3]时正,纪金松,陈香兰,等.一种基于差分进化的Flash文件系统垃圾回收算法[J].电子学报,2011,39(2):280-284.
[4]季飞.基于μCOS-II的嵌入式文件系统设计与实现[D].广州:中山大学,2014.
[5]张继珂,谷青范.基于Flash的嵌入式文件系统设计与实现.工业控制计算机,2011,24(4):84-86.
[6]崔鹏伟.面向嵌入式数据采集设备的文件系统设计[D].太原:太原科技大学,2014.
[7]吴磊,翟云飞.基于STM32的NAND flash的块分配框架设计[J].计算机测量与控制,2015,23(1):201-204.
[8]胡宁,杨琼,王冬.基于分组的NandFlash块管理方法[J].微电子学与计算机,2015,32(3):19-22.
[9]王小妮.嵌入式Linux文件系统的构建和移植[J].
电脑开发与应用,2015,28(2):52-54.
[10]夏兰,贾晓冬,曲文博.基于MSP430F5529和SD卡的FAT16文件系统的设计[J].电子器件,2015,(4):946-947.
[11]吴京洪,曾学文,李明哲,等.面向流式数据的嵌入式文件系统[J].计算机工程,2015,41(9):92-96.
[12]邢亮,黄晖,田丹.机载系统NANDFlash存储技术[J].航空计算技术,2014,44(1):123.
[13]彭涛.基于Flash存储芯片的文件存储系统设计[J].电子科技,2015,28(5):27-29.
[14]李书根,潘海燕,王培.一种嵌入式实时操作系统高可靠文件系统[J].微电子学与计算机,2014(3):14-16.
[15]刘军芳,胡和智.嵌入式文件系统中垃圾块回收机制的研究[J].民营科技,2014,(4):76.
[16]张哲,车鑫,李运华.一种高可靠嵌入式文件系统的应用策略研究[J].航空计算技术,2014(5):111-113.
Embedded FAT file system based on NOR FLASH
ZHANG Peng1,2,SUN Jia-song1,CHEN Cong-hua2
(1.Department of Electronic Engineering,Tsinghua University,Beijing100084,China;2.Yaxon Network Co.,Ltd.,Xiamen361008,China)
The paper is to design a feasible solutions that apply the FAT file system concept applied to nor FLASH chip,using BIM(Block Information Map)and MAT(Map Allocation Table).Base on the characteristics of nor flash,the BIM record the state and erasing times of data block without flashing frequently.The MAT locates all system information table in the FLASH.The FAT table and the block information can be written to the FLASH memory in real time.Base on the plan,the design provides reasonable mechanisms of loss-balance,bad-block-management and garbage-collection.The design is suitable for these devices which have limited memory,harsh time of power up,or astable power.The terminal can use the standard interface to store and access the large capacity data quickly.It improve the service of FLASH.
file system;FLASH;FAT;embedded chip
TN302
A
1674-6236(2017)23-0159-04
2016-11-28稿件编号:201611237
张鹏(1983—),男,福建泉州人,工程师。研究方向:汽车电子嵌入式软件。