查看: 4418|回复: 1

Flash存储器和Flash文件系统!

[复制链接]
发表于 2009-7-3 23:21:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
大容量的Flash存储器在嵌入式开发中被广泛应用,为了方便管理flash存储器,都要建立文件系统,其中FAT文件系统是Falsh存储器常用的文件系统。

Ⅰ.Flash存储器
    Flash文件系统就是采用Flash作为外存储器而建立的文件系统,要建立Flash文件系统就必须先了解Flash存储器的存储特点。
    Flash存储器由于存储容量大、掉电数据不丢失、可多次擦写等优点,正逐步取代其它半导体存储器件而广泛应用于移动电话、PDA、数码相机等移动电子产品中。作为存储数据和应用程序的媒体,Flash存储器可以将大量数据方便、快捷地移动和交换。

    Flash内部分为多个存储块(block),每个存储块又由多个页(page)组成。存储单元块是可擦除的最小单位,页是写入数据的最小单位。
    Flash存储器跟其它存储器一样,可以快速地随机读取数据,但Flash存储器的数据写入则不同于其它存储器,Flash的在执行写入操作前,要先擦除欲写入数据的页(page) 所在的块(block)(写入0xff到要擦除的存储单元块中),再按页顺序写入数据。由于Flash存储器擦除需要较长时间,所以Flash存储器得写入时间主要决定于Flash存储器的擦除操作等。
    Flash存储器的第一个块必须是有效块,否则该Flash存储器会被认为是废品,其它块可能在出厂时或在读写yid会在使用前就是坏块或者在使用过程中变成坏块(invalid block)。Flash存储器根据每个块的第一页的spare area的第6个Byte是否为0xff来判断该块是否为坏块,如果不是0xff则认为该块为坏块,不会对该块进行读写。虽然Flash存储器内会有坏块,但是由于Flash存储器得每一个块都是相互独立的,所以只要在读写前对其状态加以识别,就不会影响系统对有效块的操作。
Ⅱ.Flash文件系统
    要使用Flash存储器,就必须有相应的系统来管理,就有了Flash文件系统。Flash文件系统和常规的文件系统类似,必须满足下列要求:
1. 统一管理Flash存储器存储空间,实施存储空间的分配与回收;
2. 实现文件的按名存取,使用直观方便 ;
3. 提供一个方便的使用接口(提供文件系统的操作命令和文件的操作命令);
4. 优化存储速度和空间利用,屏蔽物理因素的影响,如对坏块的管理。
    Flash文件系统具体如何设计
    一般来说,整个文件系统应该分为两个层次:
    最一层:直接和物理硬件接触,管理Flash物理存储器;;
    第二层:在基层之上,实现文件管理,如实现FAT。

     Flash文件系统设计中的注意事项
    2.1第一层

(1)物理地址到逻辑地址的映射
    为了在Flash存储器的物理地址和FAT操作的逻辑地址之间建立一个好的映射关系,要先对Flash的存储空间在逻辑上进行重新定义。根据Flash特点,将每个存储块内部分成若干物理扇区,每个物理扇区可以分为基本的数据区和其它信息保留区(如安全性);确定了扇区的结构和大小之后,物理地址到逻辑地址的映射也就确定了。
    (2)可靠性设计
    一个完善的文件系统需要有良好的可靠性。 文件系统的可靠性需要存储器信息的支持,扇区的信息保留区就可以用来保证文件系统的可靠性。

    (3)坏块管理
    由于Flash存储器会有坏块,因此必须对Flash存储器进行坏块管理。一般坏块的管理分以下两种情况:
    ① 初始坏块处理:Flash存储器在使用前就可能有随机分布的坏块,Flash文件管理系统在执行读写操作之前先要建立一个坏块表,对Flash存储器进行初始化扫描以便将坏块加入到坏块表中不再使用。
    ② 操作过程中坏块处理:在对Flash存储器进行块擦除或者编程过程中发生错误时,Flash文件管理系统会将该块中的数据先拷贝到一个空块中,然后再将该块标记为坏块,加入到坏块表中。在这个处理过程中,由于对Flash存储器的块擦除或编程操作都会使得Flash存储单元的内容改变,所以Flash文件管理系统一旦发现Flash存储器的存储块是坏块后,就不会再对该块进行擦除或编程操作,以免清除坏块标志位数据,而是直接将该块标记为坏块,并加入坏块表中。
    (4)均衡擦写次数
    由于Flash存储器一般可擦除的次数只有10~100万次,随着使用次数的增加,会有一些块逐渐变得不稳定或擦除、写入失败,因此要尽量避免频繁地对同一块地址进行擦除可写入操作,以免造成局部单元提前损坏;同时,由于块擦除操作耗时较长,也应尽可能减少块擦除操作,尽可能使Flash存储器的块保持擦写次数均衡,为了达到这个目的,有必要设计Flash存储器的更新算法和磨损程度检测算法。
    Flash存储器更新算法可以通过将要更新的数据直接写入一个空块中,以降低由于Flash存储器必须先擦除块然后写入数据的特性带来的对块的频繁擦除操作,也能提高了lash的使用效率,加快操作速度。
    磨损程度检测算法就是在对Flash存储器进行写入操作前应先扫描Flash存储器的坏块,以确保不会将数据写入坏块而导致数据丢失。
    2.2 FAT设计
    在Flash文件管理系统的基础上,还必须建立FAT文件系统来对文件操作进行管理。同其它存储器的文件系统一样,FAT文件系统分为以下四个部分:
    (1)FAT的引导区
    该区存放最重要的文件系统信息。这些信息包括Flash存储器的类型、容量、簇数、每个簇包含的扇区数、FAT表数目、保留扇区数、根目录的首簇号及根目录入口数、版本信息等等。引导扇区是在格式化Flash存储器时生成的。

    (2)FAT的文件分配表
    文件分配表存放文件所占用的存储空间簇链及Flash存储器的空间占用和空闲情况。为了防止文件分配表损坏而引起文件的丢失,在系统中保存有两个相同的文件分配表FAT1和FAT2,以保证其安全性。在文件系统的操作中,程序对FAT表结构的两个备份进行顺次修改,以此确保Flash存储器上总是存有一整套完好的文件分配表。

    系统对FAT表的访问原理如下:访问文件时先从根目录中找到该文件的目录项,从中读出首簇号,然后在目录中找到该文件的目录项,从中读出首簇号。再在FAT表中找到从该首簇号开始的簇链,簇链上的簇号即为文件在逻辑扇区中占用的扇区号链,这样便可以进行数据读写了。
    (3)FAT的根目录区
    FAT的根目录区是固定大小的紧跟在FAT表后的区域。从FAT区之后紧跟的32个扇区为根目录区,可以保存512个目录项。每个目录项记录了该文件的文件名、属性、大小、创建日期和时间以及文件在数据区中所占的首簇号,即该文件在FAT表中的入口等数据。

    (4)FAT的数据区
    数据区存储文件的数据内容。文件系统对数据区的存储空间是按簇进行划分和管理的。
  
发表于 2019-8-23 06:56:03 | 显示全部楼层
這區塊要好號學習.文件編輯
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|维修人员 ( 鲁ICP备17033090号 )

GMT+8, 2024-3-29 16:03 , Processed in 0.209961 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表