基于flash存储介质的文件读写方法

文档序号:6570491阅读:132来源:国知局
专利名称:基于flash存储介质的文件读写方法
技术领域
本发明涉及文件系统的技术,特别是涉及一种基于FLASH存储介质的文件读写方法的技木。
背景技术
在电カ自动化行业,有各种各样的嵌入式产品,这些嵌入式产品经常需要存储各种监控数据。一般为了使用方便,都会引入各种文件系统,最常见的就是FAT文件系统,根据可管理容量大小又分为FAT12、FAT16、FAT32三种文件系统。在各种嵌入式产品中,存储大容量数据的介质,最经济、最常见的就是FLASH芯片、SD卡、U盘等,这些存储介质,一方面具有容量大、成本低的优点,另ー方面也有个明显区别于电脑硬盘的特点,那就是寿命次数有限,一般技术指标都是擦写I万次,品质高的可以擦写10万次。因此,基于这些存储介·质的文件系统,对文件操作是有次数限制的。在设计嵌入式产品时,要充分考虑文件操作次数,必须保证在产品的生命周期里,文件操作次数不能大于FLASH芯片允许的擦写次数。在电カ自动化行业,一般要求产品设计使用时间为10年、资源利用率为30%,也就是说,对基于擦写次数为I万次的FLASH文件系统,要求10年里写文件总次数不超过3千次。对基于擦写次数为10万次的FLASH文件系统,要求10年里写文件总次数不超过3万次。我们就以3万次为例计算ー下,每天也只能擦写8. 2次。对电カ监控设备来说,很多都需要每分钟存储一次数据。这样,常规的基于FLASH芯片、SD卡、U盘的文件系统就不能满足要求,人们通常选择用SRAM芯片或者铁电RAM芯片来保存这些数据。SRAM芯片和铁电RAM芯片虽然没有擦写次数的限制,但是其容量很小、价格贵,一般在IM字节ー下,就是少数大容量SRAM芯片,其单片容量也不会超过8M,而FLASH芯片、SD卡、U盘类的介质,其容量很容易做到几百M、几G、甚至几十G字节。如果用SRAM芯片或铁电RAM芯片保存大容量数据,就必须使用很多片SRAM芯片或铁电RAM芯片拼起来,这样不仅其成本将急骤增加,而且受产品空间的限制,有时根本就不可能做到大容量。

发明内容
针对上述现有技术中存在的缺陷,本发明所要解决的技术问题是提供一种能提高文件安全操作次数,延长FLASH存储介质使用寿命的基于FLASH存储介质的文件读写方法。为了解决上述技术问题,本发明所提供的一种基于FLASH存储介质的文件读写方法,其特征在干
在FLASH存储介质上建立文件系统,所述文件系统包括FAT表(文件分配表)、目录区、数据区,并为FAT表(文件分配表)的每个表项分配256个字的存储区域,为目录区的每个目录项分配8192个字节的存储区域,将目录区的每个目录项依序等分成256个子区块,每个子区块占32个字节的存储区域;
对FAT表中的单个表项进行单次簇号写操作的步骤如下
Al)将表项的第一个字设置为当前字;A2)读取当前字的值;
A3)如果当前字的值是OxFFFFFFFF,则将簇号写入当前字,再转至步骤A5 ;
A4)如果当前字不是表项的第256个字,则将表项的下一个字设置为当前字,然后转至步骤A2,反之则将表项的256个字全部擦除,再将簇号写入表项的第一个字;
A5)单次簇号写操作完毕;
对FAT表中的单个表项进行单次簇号读操作的步 骤如下
BI)将表项的第二个字设置为当前字;
B2)读取当前字的值;
B3)如果当前字值是OxFFFFFFFF,则读取前ー个字的值作为簇号,再转至步骤B5 ;
B4)如果当前字不是表项的第256个字,则将表项的下一个字设置为当前字,然后转至步骤B2,反之则读取当前字的值作为簇号;
B5)单次簇号读操作完毕;
对目录区中的单个目录项进行单次目录信息写操作的步骤如下
Cl)将目录项的第一个子区块设置为当前子区块;
C2)读取当前子区块的值;
C3)如果当前子区块中每个字节的值均为OxFF,则将目录信息写入当前子区块,再转至步骤C5 ;
C4)如果当前子区块不是最后ー个子区块,则将当前子区块清0,并将下ー个子区块设置为当前子区块,然后转至步骤C2,反之则将目录项的256个子区块全部擦除,再将目录信息写入目录项的的第一个子区块;
C5)单次目录信息写操作完毕;
对目录区中的单个目录项进行单次目录信息读操作的步骤如下
Dl)将目录项的第一个子区块设置为当前子区块;
D2)读取当前子区块的值;
D3)如果当前子区块中每个字节的值均为0x00,则将下一个子区块设置为当前子区块,然后转至步骤D2,反之则将当前子区块的值作为目录信息;
D4)单次目录信息读操作完毕。本发明提供的基于FLASH存储介质的文件读写方法,针对FLASH存储介质的读写特点,改进了 FAT表和目录区的结构,并改进了对FAT表和目录区的读写操作方式,能在文件读写过程中減少擦除操作次数,使得FLASH存储介质的安全读写操作次数有大幅提高,能延长FLASH存储介质使用寿命,使得FLASH存储介质的安全读写操作次数相对现有文件系统能提高两百倍以上。
具体实施例方式以下结合具体实施例对本发明的技术方案作进ー步详细描述。本发明实施例所提供的一种基于FLASH存储介质的文件读写方法,其特征在于 在FLASH存储介质上建立文件系统,所述文件系统包括FAT表(文件分配表)、目录区、
数据区,并为FAT表(文件分配表)的每个表项分配256个字的存储区域,为目录区的每个目录项分配8192个字节的存储区域,将目录区的每个目录项依序等分成256个子区块,每个子区块占32个字节的存储区域;
对FAT表中的单个表项进行单次簇号写操作的步骤如下
Al)将表项的第一个字设置为当前字;
A2)读取当前字的值;
A3)如果当前字的值是OxFFFFFFFF,则将簇号写入当前字,再转至步骤A5 ;
A4)如果当前字不是表项的第256个字,则将表项的下一个字设置为当前字,然后转至步骤A2,反之则将表项的256个字全部擦除,再将簇号写入表项的第一个字;
A5)单次簇号写操作完毕;· 对FAT表中的单个表项进行单次簇号读操作的步骤如下
BI)将表项的第二个字设置为当前字;
B2)读取当前字的值;
B3)如果当前字值是OxFFFFFFFF,则读取前ー个字的值作为簇号,再转至步骤B5 ;
B4)如果当前字不是表项的第256个字,则将表项的下一个字设置为当前字,然后转至步骤B2,反之则读取当前字的值作为簇号;
B5)单次簇号读操作完毕;
对目录区中的单个目录项进行单次目录信息写操作的步骤如下
Cl)将目录项的第一个子区块设置为当前子区块;
C2)读取当前子区块的值;
C3)如果当前子区块中每个字节的值均为OxFF,则将目录信息写入当前子区块,再转至步骤C5 ;
C4)如果当前子区块不是最后ー个子区块,则将当前子区块清0,并将下ー个子区块设置为当前子区块,然后转至步骤C2,反之则将目录项的256个子区块全部擦除,再将目录信息写入目录项的的第一个子区块;
C5)单次目录信息写操作完毕;
对目录区中的单个目录项进行单次目录信息读操作的步骤如下
Dl)将目录项的第一个子区块设置为当前子区块;
D2)读取当前子区块的值;
D3)如果当前子区块中每个字节的值均为0x00,则将下一个子区块设置为当前子区块,然后转至步骤D2,反之则将当前子区块的值作为目录信息;
D4)单次目录信息读操作完毕。本发明实施例中,所述文件系统的结构特征除FAT表(文件分配表)的表项存储区域大小、目录区的目录项存储区域大小之外,其它结构特征与现有的FAT32文件系统基本—致。本发明实施例中,所述文件系统除对FAT表(文件分配表)的表项及对目录区的目录项的读写方法之外,对其它区域数据的读写方式与现有的FAT32文件系统基本一致。本发明实施例的原理如下
ー个最简单的FAT文件系统至少包括DBR (引导记录)、FAT表(文件分配表)、FDT表(文件根目录表)、数据区这四部分,如果不止ー个分区,则DBR里描述了分区信息,每个分区里都有FAT表(文件分配表)、FDT表(文件根目录表)、数据区,只要不重新分区,分区信息就不会再擦写,正常使用时不存在擦写次数限制问题,而文件擦写操作涉及到的就是FAT表(文件分配表)、FDT表(文件根目录表)、数据区这三部分内容的变化,也就是说,只要降低了这三部分内容的擦写次数就等于提高了文件操作次数。SD卡、U盘的擦写特点与FLASH芯片相同,以FLASH芯片为例写命令只能使FLASH芯片内部位数据由I写成0,不能由0写成1,如果需要由0写成1,就必须先擦除扇区,擦除扇区后,该扇区的所有位就都变成I 了,每个位允许的擦写次数称之为寿命次数,一般FLASH芯片的寿命次数为I万次或者10万次,擦写操作超过寿命次数后,FLASH芯片基本就报废了。用于嵌入式产品的文件系统,有商业专用的,也有来自开源系统,各有优缺点,但本质上与UNIX、LINUX、DOS、windows这些操作系统下的文件系统是ー样的,这些文件系统在对FLASH芯片实施写操作吋,一般都是先判断一下能不能直接写成目标值,能直接写的就直接写,不能直接写的则把扇区值先读到缓冲区里,在缓冲区对应位置里写目标值,然后擦除扇区,最后把整个缓冲区写回FLASH芯片对应扇区;由于文件内容是不可预知的,修改·文件内容,实际结果就是不断的对FLASH芯片对应扇区进行读操作、擦操作、写操作,经常修改文件内容,就是经常擦写扇区,就容易出现擦写次数达到FLASH芯片的寿命次数,这就是一般的基于FLASH芯片的文件系统寿命问题。通过分析嵌入式文件系统通常的做法,可以发现,对每个要写的文件块内容,不管大小,只要有I个位不能写都要先擦除扇区再写。对文件擦写操作来说,很多都是在同一位置反复擦写的,比如文件时间和文件大小是记录在目录信息里的,文件每擦写一次,其目录信息对应的扇区就要先擦一次再全部写一次。这样不难看出,文件系统长期操作使FLASH芯片报废时,实际上只是少数扇区的擦写次数达到了寿命次数,绝大多说扇区的擦写次数是很少的。如果把少数扇区的频繁擦写次数,分摊到其它擦写很少的扇区,则达到了提高使用寿命的目的。本发明实施例分别针对常规文件系统的文件分配表、目录区、数据区采取不同的方法,大幅降低同一个扇区的擦写次数;
首先是FAT表(文件分配表),FAT表里描述的是文件内容占用的簇链表,就是描述了文件内容在数据区的哪个位置,称之为FAT表项。文件删除、文件变大或变小、文件移动位置,相应的FAT表项的内容要重新改写,这部分内容经常变化,导致这部分扇区擦写次数很容易达到寿命次数。常规FAT32文件系统中,FAT表项是用4字节描述的,即ー个FAT表项就是ー个字,因此常规FAT32文件系统中的FAT表(文件分配表)区域很容易达到寿命次数,本发明实施例将每个FAT表项用1024字节来描述,也就是ー个FAT表项占用256个字,对于单个FAT表项来说,第一次格式化时,表项的256个字都是全I,第一次写这个FAT表项时,使用第一个字,字的内容跟常规文件系统ー样,描述的是占用的簇号,第二次写这个FAT表项时,使用的是第二个字,以此类推,直至第256次写这个表项时使用的是第256个字,也就是最后ー个字,到第257次要写这个表项时才会对该表项的256个字执行擦除操作,然后再从第一个字开始写,进行了 256次写操作后才执行一次擦除操作,从而提高了对FAT表项安全写操作的次数,采用本发明实施例的方法对单个FAT表项执行256次写操作,仅相当于现有文件系统对单个FAT表项执行一次写操作对FLASH芯片寿命次数的影响。其次是目录区,目录区里记录的是文件大小、文件修改时间,毎次文件写操作都会引起目录区内容发生变化,所以目录区属于擦写最频繁的扇区,降低目录区擦写次数的原理与降低FAT表擦写次数的原理一祥,常规FAT32文件系统中,目录区里每个目录项占用32字节,因此常规FAT32文件系统中的目录区很容易达到寿命次数,本发明实施例将每个目录项用8192字节来描述,并每个目录项等分成256个子区块,每个子区块占32个字节的存储区域,对于单个目录项来说,第一次格式化吋,目录项每个子区块中的各个字节的值均为OxFF,第一次写这个目录项吋,使用第一个子区块,第二次写此目录项时使用第二个子区块,并将第一个子区块清0 (即将子区块的每一位都写成0),第三次写此目录项时用第三个子区块,并将第二个子区块清0,以此类推,直到第256次修改此目录项后,若再写第257次则需要对该目录项执行擦除操作,然后再从第一个子区块开始写,进行了 256次写操作后才执行一次擦除操作,从而提高了对目录项安全写操作的次数,采用本发明实施例的方法对单个目录项执行256次写操作,仅相当于现有文件系统对单个目录项执行一次写操作对FLASH芯片寿命次数的影响。最后是数据区,数据区的占用,是由FAT表来描述的,在文件写操作时申请数据区簇时,总是从前往后申请,直到达到FLASH芯片容量时再回头申请前面未使用的数据区簇,·只要数据区空间不是特别小,这部分扇区的擦写次数是不会达到FLASH芯片的寿命次数。这样,数据区的扇区,其擦写次数是平均的。本发明实施例通过对FAT表、目录区的结构及读写方法改进,在FLASH芯片的擦写寿命次数不变的情况下,使文件系统的文件读写操作次数提高了 256倍,大幅提高了文件系统的使用寿命,使得需要分钟级保存数据的嵌入式产品,也可以使用基于FLASH类存储介质,实现大容量、低成本的要求。
权利要求
1.一种基于FLASH存储介质的文件读写方法,其特征在于 在FLASH存储介质上建立文件系统,所述文件系统包括FAT表(文件分配表)、目录区、数据区,并为FAT表(文件分配表)的每个表项分配256个字的存储区域,为目录区的每个目录项分配8192个字节的存储区域,将目录区的每个目录项依序等分成256个子区块,每个子区块占32个字节的存储区域; 对FAT表中的单个表项进行单次簇号写操作的步骤如下 Al)将表项的第一个字设置为当前字; A2)读取当前字的值; A3)如果当前字的值是OxFFFFFFFF,则将簇号写入当前字,再转至步骤A5 ; A4)如果当前字不是表项的第256个字,则将表项的下一个字设置为当前字,然后转至步骤A2,反之则将表项的256个字全部擦除,再将簇号写入表项的第一个字; A5)单次簇号写操作完毕; 对FAT表中的单个表项进行单次簇号读操作的步骤如下 BI)将表项的第二个字设置为当前字; B2)读取当前字的值; B3)如果当前字值是OxFFFFFFFF,则读取前一个字的值作为簇号,再转至步骤B5 ; B4)如果当前字不是表项的第256个字,则将表项的下一个字设置为当前字,然后转至步骤B2,反之则读取当前字的值作为簇号; B5)单次簇号读操作完毕; 对目录区中的单个目录项进行单次目录信息写操作的步骤如下 Cl)将目录项的第一个子区块设置为当前子区块; C2)读取当前子区块的值; C3)如果当前子区块中每个字节的值均为OxFF,则将目录信息写入当前子区块,再转至步骤C5 ; C4)如果当前子区块不是最后一个子区块,则将当前子区块清0,并将下一个子区块设置为当前子区块,然后转至步骤C2,反之则将目录项的256个子区块全部擦除,再将目录信息写入目录项的的第一个子区块; C5)单次目录信息写操作完毕; 对目录区中的单个目录项进行单次目录信息读操作的步骤如下 Dl)将目录项的第一个子区块设置为当前子区块; D2)读取当前子区块的值; D3)如果当前子区块中每个字节的值均为0x00,则将下一个子区块设置为当前子区块,然后转至步骤D2,反之则将当前子区块的值作为目录信息; D4)单次目录信息读操作完毕。
全文摘要
一种基于FLASH存储介质的文件读写方法,涉及文件系统技术领域,所解决的是提高文件安全操作次数的技术问题。该方法为FAT表的每个表项分配256个字的存储区域,为目录区的每个目录项分配8192个字节的存储区域,将目录区的每个目录项依序等分成256个子区块;每次文件操作时,只对相应FAT表项的一个字执行写操作,只对相应目录项的一个子区块执行写操作,每个FAT表项执行256次写操作后执行一次擦除操作,每个目录项执行256次写操作后执行一次擦除操作。本发明提供的方法,能提高文件安全操作次数,延长FLASH存储介质的使用寿命。
文档编号G06F12/02GK102789425SQ20121024581
公开日2012年11月21日 申请日期2012年7月17日 优先权日2012年7月17日
发明者杨浩赟, 洪俊 申请人:上海晟东电力科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1