微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于FLASH的嵌入式存储系统设计

基于FLASH的嵌入式存储系统设计

时间:09-28 来源:互联网 点击:

文件登记表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,说明该表存在操作异常,可用备份表更正。

4.2 层次接口

整个存储系统分成三层,如图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的角色。

5 结论

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

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

(2)使用双模式文件结构设计,使不同类型的数据处理效率同时达到最优;(3)使用地址映射表,屏蔽了坏块带来的隐患,增强了系统的健壮性;

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

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

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top