新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于FLASH介质嵌入式存储方案的设计与实现

基于FLASH介质嵌入式存储方案的设计与实现

作者:时间:2014-11-14来源:网络收藏

  系统实现

本文引用地址:http://www.eepw.com.cn/article/265391.htm

  结构定义

  系统的存储结构如图1所示,在的Block0位置存放整个系统最重要的数据——系统记录SR(System Record)。选择Block0的原因是一般出厂时,都能保证Block0是完好的,因此可以避免坏块问题带来的不便。SR其实就是一个定义好的数据结构,它包括媒质信息和文件系统信息两部分。媒质信息包括存储器的类型、容量、块类型的大小和数量(Block Info)、FLASH操作命令(CommandInfo)等。文件系统信息包括版本信息、各逻辑分区的起始地址(物理地址)和结束地址。FLASH设备可以被分成一个或多个逻辑分区,每个逻辑分区采用的操作方式可以互不相同,如图1中Device0分区采用的是线性文件系统,Device1分区采用的是链式文件系统。如果采用的是线性文件系统,在分区信息后面加入文件索引表INDEX起始地址、大小等信息;如果采用的是链式文件系统,则加入文件系统页大小、文件分配表FAT和文件登记表FRT所在的位置等信息。

  文件登记表FRT位于FAT后的页中,存放着逻辑分区中文件的信息,如文件总数、每个文件的文件代号、位置、长度以及校验模式。其中,校验模式用来标识文件读写时采用差错校验的级别。不同类型的文件采用不同级别的校验方式。0级不进行校验,1级ECC校验,2级逐个字节比较。

  对于线性文件系统分区,所有文件顺序存储,读取数据时,直接通过INDEX索引得到某个文件的逻辑起始地址,然后从这个地址开始顺序搜索,获取某个偏移位置下的n个连续Byte。链式文件系统是将地址空间分成若干个等分,即Sector,它是操作的最小单位;一个大文件可以分布在不连续的多个Sector中,然后通过FAT表将它们连接起来;在FLASH介质上实现链式文件系统,Sector大小的选择是一个关键,由于FLASH的写操作,擦操作是以Page,Block为单位的,设小了使大块结构的FLASH写操作复杂,设多了又浪费空间,因此最好的选择是将Sector大小设为擦操作的最小单位16K。

  整个逻辑分区中,INDEX,FAT,FRT表中的内容非常重要,

  一旦因为异常产生错误,可能会影响到所有文件;所以,这三个文件都做了备份处理,备份存放于不同的Block中。同时,在对他们处理时,改写表中的更新状态。0xff表示开始更新,0x00表示更新结束。在文件系统初始化时,读取它们的更新状态,如果表中的更新状态为0xff,说明该表存在操作异常,可用备份表更正。

  层次接口

  整个存储系统分成三层,如图2所示。

  (1)操作系统层

  在整个存储系统中,操作系统扮演的是使用者的角色。当需要数据时,它通过调用文件系统层提供的接口函数获取数据,它不关心数据的来源和正确性。

  (2)文件系统层

  文件系统层的任务是实现它和操作系统层的函数接口。在实现方式上,线性文件系统和链式文件系统有较大区别。比如文件读取mfread,线性文件系统直接读取所要的字节,而链式文件系统是每次先把对应的整个页读到文件缓冲区,然

  

 

  后再把所需数据拷贝到读到指定内存。文件删除mfdelete,线性文件系统需要重新整理,不然就会因为大量的数据空洞(由于空间太小,无法放入新文件的小块区域)使得系统很快没有可用空间。链式文件系统只需修改文件系统的FAT和FRT,而不用做其他任何处理,当下次写入操作用到该块时,自动完成擦除。

  (3)驱动层

  驱动层的任务是完成与FLASH之间的通讯协议,实现它和文件系统层的函数接口。接口函数包括页面读mPageRead,页面写mPageWrite,块擦除mBlockErase,随机读取mRnRead,随机写入mRnWrite。mPageRead,mPageWrite,mBlockErase对整页或块进行操作,在链式文件系统中调用;mRnRead,mRnWrite对字节单位进行操作,在线性文件系统中调用。其中mRnWrite比较麻烦,以写一个Byte为例,它的操作分三步,首先将目标块中的所有数据读到内存Buffer中,然后将要写入的数据更新到Buffer,擦除目标块,最后将已更新的Buffer写回到目标块,这里的Buffer大小是一个Block。由于嵌入式系统的内存资源比较紧张,系统采用了块交换技术以降低成本,方法是在FLASH中搜索一个空闲块,用它充当Buffer的角色。

  结论

  通过上面的设计,所实现的存储系统具有以下的特点:

  (1)使用通用模式设计,增强了系统对FLASH设备的兼容性;

  (2)使用双模式文件结构设计,使不同类型的数据处理效率同时达到最优;

  (3)使用地址映射表,屏蔽了坏块带来的隐患,增强了系统的健壮性;

  (4)对重要数据采用备份保护,保证不会因为断电等异常导致系统的崩溃,增强了系统稳定性;

  (5)采用块交换技术,节约系统成本;

  (6)进行分级差错校验,提高了系统的执行效率;

  因此,本文所设计的FLASH存储系统,非常适合于嵌入式系统的应用。

存储器相关文章:存储器原理



上一页 1 2 下一页

关键词: FLASH NAND

评论


相关推荐

技术专区

关闭