新闻中心

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

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

作者: 时间:2018-08-07 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/201808/385633.htm

整个逻辑分区中,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 下一页

评论


相关推荐

技术专区

关闭