中国·芯片交易在线
首页 | 供应信息 | 求购信息 | 库存查询 | 新闻中心 | 展会资讯 | IC厂商 | 技术资料 | 自由区域
   新闻首页 |  行业动态 | 新品发布 | 政策法规 | 科技成果 | 模拟技术 | 嵌入系统 | 传感控制 | 存储设计  
当前位置:IC72首页>> IC新闻中心>> 存储设计 >>电子行业新闻正文

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

时间:2006/11/23 10:50:00  作者:  来源:ic72  浏览人数:1156
 
 

      摘要  作为一种新型的存储介质,FLASH以其优良的特性,在嵌入式领域中得到了广泛的应用。本文通过分析FLASH介质的自身特性,并结合嵌入式系统的特点,设计实现于兼容性、可靠性以及开销等方面都得到充分优化的FLASH存储系统。

      关键字  嵌入式系统 文件系统 FLASH

      1 引言

      FLASH(闪速存储器)作为一种安全、快速的存储体,具有体积小、容量大、成本低、掉电数据不丢失等一系列优点,已成为嵌入式系统中数据和程序最主要的载体。由于FLASH在结构和操作方式上与硬盘、E2ROM等其他存储介质有较大区别,使用FLASH时必须根据其自身特性,对存储系统进行特殊设计,以保证系统的性能达到最优。

      2 FLASH的特点

      FLASH是一种非易失性存储器NVM(Non-Volatile Memory),根据结构的不同可以将其分成NOR FLASH和NAND FLASH两种。但不管哪一种都具有如下特点:

      1.  区块结构

      FLASH在物理结构上分成若干个区块,区块之间相互独立。比如NOR FLASH把整个Memory分成若干个Sector,而NAND FLASH把整个Memory分成若干个Block;

      2.  先擦后写

      由于FLASH的写操作只能将数据位从1写成0,不能从0写成1,所以在对存储器进行写入之前必须先执行擦操作,将预写入的数据位初始化为1。擦操作的最小单位是一个区块,而不是单个字节。

      3.  操作指令

      除了NOR FLASH的读,FLASH的其它操作不能像RAM那样,直接对目标地址进行总线操作。比如执行一次写操作,它必须输入一串特殊的指令(NOR FLASH),或者完成一段时序(NAND FLASH)才能将数据写入到FLASH中。

      4.  位反转

      由于FLASH固有的电器特性,在读写数据过程中,偶然会产生一位或几位数据错误。这就是位反转。位反转无法避免,只能通过其他手段对结果进行事后处理。

      5.  坏块

      FLASH在使用过程中,可能导致某些区块的损坏。区块一旦损坏,将无法进行修复。如果对已损坏的区块进行操作,可能会带来不可预测的错误。尤其是NAND FLASH在出厂时就可能存在这样的坏块(已经被标识出)。

      3 关键设计

      3.1  FLASH通用设计

      对于一个嵌入式系统,设备的兼容性越好,系统可行性就越好,产品也就越有竞争力。所以,为了兼容不同类型的FLASH设备,对FLASH进行通用设计至关重要。

      对于NOR FLASH,数据的读操作可以通过独立的数据总线和地址总线快速完成,然而NOR FLASH的其他操作需要通过特殊的指令来完成,更糟糕的是不同厂商生产的芯片这些指令互不相同。这就导致了设备的不兼容。

      对于NAND FLASH,也存在这样的问题。NAND FLASH可以根据相同的指令读取芯片的厂商号和设备号,从而通过识别设备号调用对应的时序流程实现操作。但是,系统中太多的判断,会使得程序的结构变得非常复杂。所以,在一定的条件下,NAND FLASH设备还是不兼容的。

      为了解决这一问题,一个较好的方法是将FLASH的各个操作指令以及结构特性按照统一的格式存放到FLASH中固定位置。系统初始化时,将这个结构读入系统,通过分析这个结构,可以获得关于芯片所有相关信息,包括操作指令,区块分布等等。这样,系统可以轻松实现对不同型号FLASH的所有操作,极大地提高了设备的扩展性。

      3.2  双模式文件系统设计

      嵌入式系统中文件数据的存放一般有两种结构,一种是索引格式的线性结构,一种是非线性的链表式结构。这两种结构各有优缺点。比如对于系统配置、点阵字库等一些具有固定结构的系统数据,索引结构比链表式结构更有效率。但对于经常更新的用户数据,链表式结构要比索引结构更灵活。如果系统能将两种结构集成,势必能将性能发挥到最优。

      实现这种集成的方法是将设备定义成若干个分区,每个分区相互独立,不同分区可以使用不同的文件模式。这样,不同类型的数据就可以根据自己的属性选择存放的分区。比如系统数据存放在使用索引线性结构的分区,用户数据存放在使用链式非线性结构的分区。

      3.3 坏块处理

      FLASH中的坏块处理是一件很棘手的问题,如果没有有效的管理,对系统的稳定性会造成严重影响。一个可行的解决方法是生成一张坏块表,坏块表中记录所有坏块的块号,并且按块号从小到大排序,坏块表在读写过程中动态更新。当读写数据时,遍历坏块表中的块号,将文件的逻辑地址转换成对应FLASH 物理地址,以保证所用的FLASH地址空间不存在坏块。

      4 系统实现

      4.1 结构定义

图1 - 存储结构 

      系统的存储结构如图1所示,在FLASH的Block0位置存放整个系统最重要的数据——系统记录SR(System Record)。选择Block0的原因是一般FLASH出厂时,都能保证Block0是完好的,因此可以避免坏块问题带来的不便。SR其实就是一个定义好的数据结构,它包括媒质信息和文件系统信息两部分。媒质信息包括FLASH存储器的类型、容量、块类型的大小和数量(BlockInfo)、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,说明该表存在操作异常,可用备份表更正。

      4.2  层次接口
      整个存储系统分成三层,如图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.  进行分级差错校验,提高了系统的执行效率;

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

 
【相关文章】
·基于FLASH介质嵌入式存储方案的设计与实现
 
 
IC新闻搜索
 
热点新闻
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于ARM9内核Processor对外部NAND FLASH的控制实现
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9