一种在NORFlash上建立FAT文件系统的优化方法与流程

文档序号:12666889阅读:415来源:国知局
一种在NOR Flash上建立FAT文件系统的优化方法与流程

本发明涉及一种在NOR Flash上建立FAT文件系统的优化方法。



背景技术:

随着NOR Flash即半导体存储器制造工艺的不断改进,被广泛应用于嵌入式系统中。

NOR Flash数据区的擦除操作以数据块为单位。NOR Flash的擦除是有次数限制的,一般为10万次~100万次。数据块在正确擦除后,所有位都置为“1”。当进行写入操作时,可使必要的数据位从“1”变为“0”(bit),此时不需要擦除动作,若要让数据位从“0”变为“1”,则需要“擦除—写入”的流程。因此,并不是每次写入NOR Flash芯片都需要进行所有数据位的擦除,可只对局部数据位进行写入。

目前嵌入式设备的文件系统有TrueFFS、JFFSx以及YAFFS。TrueFFS使用代价高并且兼容性弱于通用文件系统。JFFSx以及YAFFS都属日志型文件系统,具有启动加载时间较长,内存消耗较大,没有很好的解决均衡磨损等缺点,不适用于很多嵌入式设备的应用场景。为高效地存储和管理数据,方便上层开发应用,并避免某些数据块的过度操作导致使用寿命降低,须引入嵌入式 FAT 文件系统。

但FAT文件系统并不适合直接移植到Flash存储器中,主要有以下两个原因:第一、嵌入式系统的应用条件恶劣,电源电压不稳定,突发性断电及非法插拔都将对Flash的存储造成灾难性的影响,对于可靠性的设计考虑不足;第二、通用文件系统的记录信息(如图1所示的FAT表)需要被多次改写,而记录信息放在固定的数据块中,会导致其所在数据块频繁使用,从而减少器件使用寿命。

需要特别指出的是,针对上述的第二点问题,之前的一些发明采用了如下一些方法来解决。

一是将文件系统的记录信息暂时存放到静态内存,定时存储到Flash中。这个是较常用的方式。但是这种设计并不能很好的适用于上述随时可能掉电的终端上。首先掉电时会丢失还未存储的数据,定时时间间隔越长,丢的数据越多。而且更严重的是,定时时间如果相对于数据存储的时间间隔不够,则文件系统的记录信息所处数据块达不到均衡磨损的目的,定时时间间隔越短,反而越容易形成“集中磨损”。

另外一种方法是使用其他存储器来存储通用文件系统的记录信息。比如用铁电存储器,该器件读写次数相对NOR Flash要高的多。但是这种方法需要增加器件,增加终端成本不说,还需要原终端芯片上留有IO引脚供与铁电存储器通讯,而且新的软件版本无法与旧版本兼容,提高了后续软件维护工作量。



技术实现要素:

本发明的目的在于提供一种在NOR Flash上建立FAT文件系统的优化方法,能够解决现有技术中FAT文件系统不支持Flash设备,对硬件资源要求高的技术问题,制定合理的坏块管理、碎片回收、均衡损耗策略, 实现FAT文件系统的均衡磨损、掉电保护和坏块管理,提高数据存储安全性。

本发明一种在NOR Flash上建立FAT文件系统的优化方法,包括如下步骤:

步骤1、FAT文件系统的文件数据包括定位表、数据块使用情况信息表、FAT表、根目录,当FAT表、根目录或数据块使用情况信息表擦写次数累加到阈值次数时,需要寻找磨损程度较低的数据块继续记录,建立定位表用于记录定位FAT表、根目录及数据块使用情况信息表分别在哪个数据块中;

步骤2、定位表占用一个数据块,第一次初始化为全“0xFF”,预留最后8个字节写入标识符供校验用,该定位表以8个字节为单位,整合数据块使用情况信息表、FAT表、根目录所在的数据块序号,从头写入定位表所在的数据块中,当FAT表、根目录或数据块使用情况信息表更换至磨损程度较低的数据块继续记录时,需要更新定位表,更新定位表采用只写入数据而不擦除数据的方式,一直添加到定位表所在的数据块写满为止,再重新擦写;预留多个备份数据块供定位表循环使用,如果出现坏块,写入下一个备份数据块中,当终端上电时,从预留区最后一个数据块判断标识符,确认定位表所在数据块,然后读取定位表所在数据块的标识符,校验成功后从数据块读取非“0xFF”最后8字节的数据,便可获得数据块使用情况信息表、FAT表、根目录所在数据块信息;

步骤3、为了解决均衡磨损的问题,建立数据块使用情况信息表,用于记录所有数据块的当前状态和已擦除次数,该当前状态包括空闲、正在准备写入数据、已写入有效数据、已被删除的数据、坏块;

所述数据块使用情况信息表占用一个数据块,依次对每个数据块的当前状态及已擦除次数信息用8个字节来记录;每个数据块的记录包括当前状态及已擦除次数信息,分成3个部分,该已擦除次数记录分成两个部分:32个bit位作为单次擦除计数,用2Byte长度的计数器记录擦除32次的倍数,即通过低位四个字节包含32个bit位作为单次擦除计数,初始化为“1”,当对应的数据块产生擦除操作时,将最低位的“1”变为“0”来计数,此时将“1”变为“0”可以直接写入而不需要擦除,若对应的数据块产生擦除操作满32次,意味着上述32个bit位被全部清“0”;第3、4这两个字节长度记录擦除32次的倍数,即当上述32个bit位被全部清“0”时,倍数计数加1,而最高两个字节,则表示对应数据块的当前状态;

步骤4、FAT文件系统开始初始化,判断应用层是否需要修改文件数据,若需要,先判断是否需要修改FAT表,若是,则擦写FAT表,若否,则进一步判断是否需要擦写数据块使用情况信息表,若是,擦写数据块使用情况信息表,若否,进一步判断数据块使用情况信息表、FAT表或者根目录所在的数据块号是否变化,若是,就往定位表中添加记录,若定位表已满,擦写定位表,FAT文件系统初始化结束;

步骤5、当需要将某个文件数据更换数据块或添加某个文件数据至新的数据块时,先将数据块使用情况信息表读入内存,根据数据块使用情况信息表查找擦除次数较少的当前状态为“空闲”或“已删除”的数据块,将该数据块的当前状态改为“正在准备写入”;再依次检查根目录、FAT表和数据块使用情况信息表是否需要修改且被擦除次数过多,如果是,则同样查找新数据块并修改其状态标志,而后依次写入文件数据,更新最终数据块状态写入数据块使用情况信息表。

进一步,采用双备份的方式保存定位表、数据块使用情况信息表、FAT表、根目录。

本发明将FAT文件系统管理文件/数据的理念应用于flash芯片上,通过使用FAT文件系统接口,能够快速存储,访问大容量数据,并可兼容U盘、T卡等数据读写接口,利于应用移植。本发明记录数据块擦除次数信息,当文件数据需要更新时,根据信息分配新数据块以实现均衡磨损,并将FAT表和数据块磨损信息实时写入到Flash存储器中,可应用到终端可能随时掉电的场景中。

附图说明

图1为现有技术的FAT文件系统的结构示意图;

图2为本发明实施例中嵌入式FAT文件系统的结构示意图;

图3为本发明实施例中定位表一个实际数据示例图;

图4为本发明实施例中数据块使用情况信息表结构示意图;

图5为本发明实施例中数据块使用情况信息表一个实际数据示例图;

图6为本发明实施例中嵌入式FAT文件系统的工作流程图。

以下结合附图和实施例对本发明做进一步详述。

具体实施方式

本发明以2MByte容量的NOR Flash为例,数据区分为512个数据块,每块16页,每页256个字节。其它容量类型的Flash可以自行计算调整设计参数。

本发明一种在NOR Flash上建立FAT文件系统的优化方法,包括如下步骤:

步骤1、如图2所示,FAT文件系统的文件数据包括定位表、数据块使用情况信息表、FAT表、根目录,为了擦写过程中的掉电保护,采用双备份的方式,即定位表、数据块使用情况信息表、FAT表、根目录各包括一正本和一副本,由于擦写次数的限制,FAT表、根目录及数据块使用情况信息表不能处于固定的数据块,当FAT表、根目录或数据块使用情况信息表擦写次数累加到阈值次数时,需要寻找磨损程度较低的数据块继续记录,建立定位表用于记录定位FAT表、根目录及数据块使用情况信息表分别在哪个数据块中;

步骤2、如图3所示,定位表占用一个数据块,容量4K,第一次初始化为全“0xFF”,预留最后8个字节写入标识符供校验用,例如{0x59, 0x41, 0x58, 0x4F, 0x4E, 0x30, 0x30, 0x31},该定位表以8个字节为单位,整合数据块使用情况信息表、FAT表、根目录所在的数据块序号,从头写入定位表所在的数据块中,当FAT表、根目录或数据块使用情况信息表擦写次数累加到阈值时,需要更换至磨损程度较低的数据块继续记录,需要更新定位表,更新定位表采用只写入数据而不擦除数据的方式,一直添加到定位表所在的数据块写满为止,再重新擦写;以防万一定位表出现坏块,预留多个备份数据块供定位表循环使用,如果出现坏块,写入下一个备份数据块中,当终端上电时,从预留区最后一个数据块判断标识符,确认定位表所在数据块,然后读取定位表所在数据块的标识符,校验成功后从数据块读取非“0xFF”最后8字节的数据,便可获得数据块使用情况信息表、FAT表、根目录所在数据块信息;

步骤3、为了解决均衡磨损的问题,建立数据块使用情况信息表,用于记录所有数据块的当前状态和已擦除次数,该当前状态包括空闲、正在准备写入数据、已写入有效数据、已被删除的数据、坏块;

所述数据块使用情况信息表占用一个数据块,如图5所示,依次对每个数据块的当前状态及已擦除次数信息用8个字节来记录;

如图4所示,每个数据块的记录包括当前状态及已擦除次数信息,分成3个部分,该已擦除次数记录分成两个部分:32个bit位作为单次擦除计数,用2Byte长度的计数器记录擦除32次的倍数,即通过低位四个字节包含32个bit位作为单次擦除计数,初始化为“1”,当对应的数据块产生擦除操作时,将最低位的“1”变为“0”来计数,根据NOR Flash的特点,此时将“1”变为“0”可以直接写入而不需要擦除,若对应的数据块产生擦除操作满32次,意味着上述32个bit位被全部清“0”;第3、4这两个字节长度记录擦除32次的倍数,即当上述32个bit位被全部清“0”时,倍数计数加1,由此,可记录数据块擦除次数总共为200万次,这样,数据块每擦除32次才需要擦除一次数据块使用情况信息表,不至于频繁修改该数据块使用情况信息表;而最高两个字节,则表示对应数据块的当前状态,其各值含义如下:

0xFFFF - 空闲

0xFFFE - 正在准备写入数据

0xFFFC - 已写入有效数据

0xFFF8 - 已被删除的数据

0xFF80 - 坏块

可以看出数据块状态逐步变化时可以只写入数据位而不需要重新擦除,若数据块为坏块只需更改其状态不再使用即可。

步骤4、如图6所示,FAT文件系统开始初始化,判断应用层是否需要修改文件数据,若需要,先判断是否需要修改FAT表,若是,则擦写FAT表,若否,则进一步判断是否需要擦写数据块使用情况信息表,若是,擦写数据块使用情况信息表,若否,进一步判断数据块使用情况信息表、FAT表或者根目录所在的数据块号是否变化,若是,就往定位表中添加记录,若定位表已满,擦写定位表,FAT文件系统初始化结束;

步骤5、当需要将某个文件数据更换数据块或添加某个文件数据至新的数据块时,先将数据块使用情况信息表读入内存,根据数据块使用情况信息表查找擦除次数较少的当前状态为“空闲”或“已删除”的数据块,将该数据块的当前状态改为“正在准备写入”;再依次检查根目录、FAT表和数据块使用情况信息表是否需要修改且被擦除次数过多,如果是,则同样查找新数据块并修改其状态标志,而后依次写入文件数据,更新最终数据块状态写入数据块使用情况信息表。

以上所述,仅是本发明较佳实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1