基于FLASH存储介质的文件读写方法技术

技术编号:7996266 阅读:218 留言:0更新日期:2012-11-22 05:06
一种基于FLASH存储介质的文件读写方法,涉及文件系统技术领域,所解决的是提高文件安全操作次数的技术问题。该方法为FAT表的每个表项分配256个字的存储区域,为目录区的每个目录项分配8192个字节的存储区域,将目录区的每个目录项依序等分成256个子区块;每次文件操作时,只对相应FAT表项的一个字执行写操作,只对相应目录项的一个子区块执行写操作,每个FAT表项执行256次写操作后执行一次擦除操作,每个目录项执行256次写操作后执行一次擦除操作。本发明专利技术提供的方法,能提高文件安全操作次数,延长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,反之则将当前子区本文档来自技高网
...

【技术保护点】
一种基于FLASH存储介质的文件读写方法,其特征在于:在FLASH存储介质上建立文件系统,所述文件系统包括FAT表(文件分配表)、目录区、数据区,并为FAT表(文件分配表)的每个表项分配256个字的存储区域,为目录区的每个目录项分配8192个字节的存储区域,将目录区的每个目录项依序等分成256个子区块,每个子区块占32个字节的存储区域;对FAT表中的单个表项进行单次簇号写操作的步骤如下:A1)将表项的第一个字设置为当前字;A2)读取当前字的值;A3)如果当前字的值是0xFFFFFFFF,则将簇号写入当前字,再转至步骤A5;A4)如果当前字不是表项的第256个字,则将表项的下一个字设置为当前字,然后转至步骤A2,反之则将表项的256个字全部擦除,再将簇号写入表项的第一个字;A5)单次簇号写操作完毕;对FAT表中的单个表项进行单次簇号读操作的步骤如下:B1)将表项的第二个字设置为当前字;B2)读取当前字的值;B3)如果当前字值是0xFFFFFFFF,则读取前一个字的值作为簇号,再转至步骤B5;B4)如果当前字不是表项的第256个字,则将表项的下一个字设置为当前字,然后转至步骤B2,反之则读取当前字的值作为簇号;B5)单次簇号读操作完毕;对目录区中的单个目录项进行单次目录信息写操作的步骤如下:C1)将目录项的第一个子区块设置为当前子区块;C2)读取当前子区块的值;C3)如果当前子区块中每个字节的值均为0xFF,则将目录信息写入当前子区块,再转至步骤C5;C4)如果当前子区块不是最后一个子区块,则将当前子区块清0,并将下一个子区块设置为当前子区块,然后转至步骤C2,反之则将目录项的256个子区块全部擦除,再将目录信息写入目录项的的第一个子区块;C5)单次目录信息写操作完毕;对目录区中的单个目录项进行单次目录信息读操作的步骤如下:D1)将目录项的第一个子区块设置为当前子区块;D2)读取当前子区块的值;D3)如果当前子区块中每个字节的值均为0x00,则将下一个子区块设置为当前子区块,然后转至步骤D2,反之则将当前子区块的值作为目录信息;D4)单次目录信息读操作完毕。...

【技术特征摘要】

【专利技术属性】
技术研发人员:杨浩赟洪俊
申请(专利权)人:上海晟东电力科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1