泛谈Flash文件系统  
 
 
【摘 要】本文主要简单介绍Flash文件系统,文中涉及Flash存储器基本特征,以及怎样利用Flash文件系统实现对Flash存储器的较好的操作管理功能。
 
【关键字】Flash存储器 Flash文件系统
 
Ⅰ。Flash存储器
Flash文件系统,顾名思义就是采用Flash作为外存储器实现的文件系统。因此,Flash文件系统地实现就必须考虑Flash存储器的特点。
Flash存储器由于具有存储容量大、掉电数据不丢失以及可多次擦写等许多优点,正逐步取代其它半导体存储器件而广泛应用于移动电话、PDA以及数码相机等移动电子产品中。其作为存储数据和应用程序的存储体,可以将大量数据方便、快捷地移动和交换。
Flash内部分为多个存储单元块(block),每个存储单元块又由多个页(page)组成。存储单元块是可擦除的最小单位,页是写入数据的最小单位。
Flash存储器读取数据与一般的存储器类似,可以实现随机读取,读出的速度也很快。而Flash存储器的写操作则和一般的存储器有所不同,Flash的写操作必须先按存储块擦除(写入0xff到要擦除的存储单元块中),再按页顺序写入。由于Flash存储器擦除耗时较长,所以Flash存储器写入的时间主要在于Flash存储器内部的擦除操作等。
Flash存储器第一块一定是有效块,而其它块可能会在使用前就是坏块或者在使用过程中变成坏块(invalid block)。Flash存储器对内部坏块的判定是,根据其每一个单元存储块中的第3区中的第6 Cloumn内容是否为0xff来定。虽然Flash存储器内容会有坏块,但是由于每一块的内部结构都是相互独立的,所以只要对其状态加以识别,坏块并不影响系统对有效块的操作。
 
Ⅱ.Flash文件系统

有了Flash存储器,相应的应该有对应的系统来管理,于是有了Flash文件系统的出现。和常规的文件系统类似,我认为Flash文件系统地提出,至少需要实现以下几个特点:

1.    统一管理Flash存储器存储空间,实施存储空间的分配与回收

2.    实现文件的按名存取,使用方便,直观

3.    向用户提供一个方便使用的接口(提供对文件系统操作命令,以及提供对文件的操作命令

4.    优化存储速度和空间利用屏蔽物理因素的影响,如对于坏损单元,采用透明的坏损管理

u       Flash文件系统具体如何设计

一般来说,整个文件系统应该分为两个层次:

最一层,直接和物理硬件接触,管理Flash物理存储器;

第二层,在基层之上,实现文件管理,如实现FAT。

u       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先擦除后写入的特性带来的对块的频繁擦除;同时,也提高了Flash的使用效率,加快了操作速度。

磨损程度检测算法是在对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的数据区

数据区存在文件的数据内容。文件系统对数据区的存储空间是按簇进行划分和管理的。

【小  结】

Flash文件系统应该来说和通常的文件系统没有太多的区别,文件的组织管理形式可以和磁盘文件差不多,关键在于Flash存储器的硬件特性。硬件的区别决定Flash文件系统有其自己需要考虑的东西。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhtek/archive/2006/05/19/745882.aspx

泛谈Flash文件系统相关推荐

  1. c语言中flash文件系统,适宜于嵌入式多媒体应用的Flash文件系统

    随着电子技术的不断发展,嵌入式系统越来越多地在控制类.消费类.通讯类等电子产品广泛应用,并且随着数字信号处理与人机交互界面等相关技术的不断成熟,嵌入式多媒体应用数量也逐渐上升.多媒体业务的数据量大,数 ...

  2. flash文件系统实现原理

    flash文件系统实现原理 http://www.dpj.com.cn/  网址 摘要:在深入分析TI为开发DSP提供的RTS.LIB(RTS.SRC为源泉代码)的基础上,介绍对自定义的文件和设备的操 ...

  3. 串行FLASH文件系统FatFs---转自野火论坛

    为了支持长文件名,需要用到FATFS源码中的cc936.c的两个函数ff_convert,ff_wtoupper:这里面直接用了两个大数组(127KB)来做unicode转gbk(OEM)的对照表,这 ...

  4. STM32-串行FLASH文件系统FatFs

    串行FLASH文件系统FatFs FatFs官方链接 FatFs文件系统的源码可以从FatFs官方下载:官方链接http://elm-chan.org/fsw/ff/00index_e.html Fa ...

  5. Linux flash 文件系统剖析

    文章出自:http://www.ibm.com/developerworks/cn/linux/l-flash-filesystems/ 您之前可能听说过 Journaling Flash File ...

  6. 第 26 章 串行 FLASH 文件系统 FatFs

    26.1 文件系统 26.2 FatFs 文件系统简介 2.1 FatFs 的目录结构 2.2 FatFs 帮助文档 2.3 FATFS 源码 src 文件夹下的源码文件功能 (1)integer.h ...

  7. linux flash文件读取,一种基于Linux的flash文件系统存储策略

    摘要:随着嵌入式系统的广泛应用,嵌入式系统中的数据存储和数据管理显得日益重要.本文主要介绍flash存储器的存储特点,Linux文件系统的两类存储策略:块式存储和线性存储,并在此基础上提出了一种改进的 ...

  8. STM32CUBEIDE之SPI读写FLASH进阶串行FLASH文件系统FatFs

    预备知识 >>W25Q128是16M spi flash,一共有256个block ,每个Block 64KB. >>一个Block可以分割为16个扇区(small secto ...

  9. c++ 文件读写_串行FLASH 文件系统FatFs

    文件系统 即使大家可能不了解文件系统,但也一定对"文件"这个概念十分熟悉.数据在PC上是以文件的形式储存在磁盘中的,这些数据的形式一般为ASCII 码或二进制形式.如需要记录本书的 ...

最新文章

  1. 云炬随笔20190701
  2. SAP Spartacus服务器端渲染模式下的调试方法
  3. 2021年兰州师大附中高考成绩查询,2021年兰州重点高中名单及排名,兰州高中高考成绩排名榜...
  4. ubuntu系统火狐浏览器上网解决方法
  5. Multiple substitutions specified in non-positional format; did you mean to add the formatted=false
  6. java里有没有 0的使用_请问有没有人有零基础Java基础习题?
  7. Zedboard安装桌面系统ubuntu及opencv(2)
  8. 【音乐欣赏】《Sunflower》 - Post Malone / Swae Lee
  9. 3.46 OrCAD软件怎么输出物料清单BOM表格?
  10. 【课程设计-毕业设计】机械设计课程设计选题-含设计说明书
  11. Typora设置工作台水印和导出PDF水印
  12. java代码家庭系谱图,高中生物--遗传系谱图解题一般步骤
  13. matlab 简单算例,MATLAB 3D 动画简单实例 | 学步园
  14. 手机坏了微信聊天记录怎么恢复?不用怕,用这招
  15. element-ui版本更新兼容问题
  16. 国产机免流下载网上资源方法(仅限移动用户
  17. 视觉里程计 第一部分:前30年的发展和理论基础
  18. 软件测试项目实战,Web测试常用测试点,即拿即用宝典
  19. 计算机科学与技术考研报名属于哪一类,计算机在考研中属于什么类别
  20. 通过自动驾驶+物联网解决道路拥堵的方案建议(以虎门大桥为例)

热门文章

  1. c4d启动无反应_C4D画笔工具用不了/无法使用/没反应/无效怎么解决?
  2. 根据新的地图图幅编号,在openlayers上显示图幅范围和图幅号
  3. 十个推荐系统的开源项目
  4. windows如何实现微信新消息弹窗
  5. Spring读书笔记-----使用Spring容器(二)
  6. IE 兼容模式下 contentEditable 无法取值
  7. 冬奥会区块链亮点:数字雪花、冰墩墩NFT
  8. docker安装canal
  9. Spring Cloud源码分析之Eureka篇第三章:EnableDiscoveryClient与EnableEurekaClient的区别(Edgware版本)
  10. 艾司博讯:多多场景扣费?要怎么推广