随着嵌入式系统越来越广泛的应用,嵌入式系统中的数据存储和数据管理已经成为一个重要的研究课题. FLASH存储器具有速度快,成本低等很多优点,因此在嵌入式系统中的应用也越来越多.为了合理地管理存储数据,进行数据共享,FLASH的设计在ARM嵌入式系统中对数据存储和数据管理尤为重要.
一.实例说明.
在嵌入式设备中,有两种程序运行方式: 一种是将程序加载到SDRAM中运行,另一种是程序直接在其所在的ROM/FLASH存储器中运行.一种比较常用的运行程序的方法是将FLASH存储器作为一个硬盘使用,当程序需要运行时,首先将其加载到SDRAM存储器中,在SDRAM中运行.通常相对于ROM而言,SDRAM访问速度较快,数据总线较宽,程序在SDRAM中的运行速度比在FLASH中运行速度快.ARM中存储模块示意图如下
其中各功能模块的含义如下.
1.系统初始化. 进行系统的最小初始化,包括初始化系统时钟,系统的中断向量表,SDRAM及一些其它的重要 I/O端口.
2.映象文件的下载. 通过一定的方式,得到新的目标程序的映象文件,将该文件保存到系统中的SDRAM中.要完成这部分工作,ARM嵌入式设备需要与外部的主机建立某种通道,大部分系统都是使用串行口,也可以使用以太网口或者并行口进行通信.
3.FLASH写入. 根据不同的FLASH存储器,选择合适的操作指令,将新的目标程序的映象文件写入目标系统的FLASH存储器中,实现FLASH存储器操作的功能模块.在本实例里,FLASH用来存放程序代码,向量表和一些系统掉电后需要保存的用户数据等.
二. FLASH原理
1.性能比较
FLASH闪存是非易失性存储器,可以对存储器单元块进行擦写和再编程. 任何FLASH器件进行写入操作前都必须先执行擦除操作. NAND执行擦除操作十分简单;而NOR要求在执行擦除操作前先将目标块内所有的位都写为0. 擦除:NOR器件是以64~128的块进行的,执行一个写入/擦除操作时间为1~5S;擦除NAND是以8~32K的块进行的,执行相同的操作最多需要4mS的时间.
执行擦除操作时,块尺寸的不同进一步拉大了NOR和NAND之间的性能差异.统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行.因此选择存储方案时,必须权衡以下各项因素:NOR的读取速度比NAND稍快一些;NAND写入速度比NOR快很多;NAND擦除速度远比NOR快;NAND擦除单元更小,相对擦除电路更少.
2.接口差异
NOR带有SRAM接口,有足够的地址引脚来寻址,可以很容易地来存取其内容的每一字节.NAND使用复杂的I/O口来串行地存取数据.各个厂商产品的方法可能不同.8个引脚用来传送控制,地址和数据信息.NAND的读写操作采用512字节的块,这一点有点象硬盘管理,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备.
3.容量和成本
NAND的单元尺寸基本上是NOR的一半.由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格. NOR占据了大部分容量为1~16MB的内存市场,而NAND只是用在8~128M的产品当中.
4.可靠性和耐用性
采用FLASH介质时一个重点要考虑的问题是可靠性.对于需要扩展MTBF的系统来说,FLASH是非常合适的存储方案.可以从寿命,位交换和坏块处理三个方面来比较NOR和NAND的可靠性.1.寿命.NAND每个块的擦写次数是100万次,而NOR的擦写次数是10万次.NAND除了具有10:1擦除周期优势外,块尺寸要比NOR小8位,每个块在给定时间内删除的次数要少一些.2.位交换.所有的FLASH器件都受位交换现象的困扰,在某些情况下,一个比特位会发生反转或被报告反转了.一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障就可能导致系统停机.如果只是被报告有问题,则多读几次就有可能解决.位反转的问题更多见于NAND,NAND供应商建议使用NAND闪存时,同时使用EDC/ECC算法,当然,如果用本地存储设备来存储操作系统,配置文件或其他敏感信息时,则必须使用EDC/ECC系统以确保可靠性.3.坏块处理.NAND中的坏块是随机分布的,以前做过消除坏块的努力,但发现成品率太低,代价太高,根本不划算.NAND需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用.在已制成的器件中,如果通过可靠的方法不能进行这项处理,则将导致高故障率.
5.易用性
可以非常直接地使用基于NOR的闪存,象其它存储器那样连接,并可以在上面直接运行代码.由于需要I/O接口,NAND要复杂得多,各种NAND器件的存取方法因厂家而不同.在使用NAND器件时,必须先写入驱动程序,才能继续执行其它操作.向NAND写入信息需要相当的技巧,因此设计人员决不能向坏块写入,这就意味着NAND自始至终都必须进行虚拟映射.
6.软件支持
在NOR器件上运行代码不需要任何软件支持,在NAND器件上进行同样操作时,通常需要驱动程序,也就是闪存技术驱动程序,NAND和NOR在进行写入和擦除操作时都需要MTD.但NOR需要的MTD要相对少一些,许多厂商都提供基于NOR器件更高级的软件,在LINUX系统中经常采用JFFS的驱动.
FLASH驱动.
对于FLASH器件的驱动,LINUX提供了完善的驱动程序,只需要在内核配置里面选择好相应的类型即可.在LINUX中通过MTD子系统提供的抽象设备机制,来实现对FLASH的管理控制和读写.MTD设备是一类特殊的存储设备,如常用的FLSAH芯片,CFI卡等,MTD同时提供通过字符设备方式和块设备方式来管理控制MTD设备的机制.MTD核心层分为:用户模块接口层,MTD抽象层和MTD设备驱动模块层.MTD核心层通过设备驱动模块实现对存储设备的物理访问功能,通过用户模块提供用户空间直接访问的接口.MTD设备驱动模块层负责驱动FLASH硬件,只需实现实际设备上的访问控制,与内核交互的复杂工作则由MTD抽象层完成.其中也对NAND的驱动实现了抽象,还实现了错误检测与纠错和坏快处理等用户模块层提供从用户空间直接访问的接口.上层应用只需通过MTD抽象层提供的字符设备方式或块设备方式来访问MTD抽象设备.然后通过MTD的内部机制把这些请求交给实际的驱动模块去执行.MTD抽象层定义了抽象的MTD设备机构,对于具体设备的驱动模块,需要设计好公共函数的实际内容,并在检测到实际设备后注册一个MTD设备,然后就可通过MTD提供的字符设备访问方式或块设备访问方式直接使用具体的硬件设备.
硬件电路的设计.
NOR用于存放系统代码,NAND主要用于存放用户信息.
NOR的设计.
系统所用的NOR是INTEL公司的E28F128J3 FLASH , 128M bit的存储空间由128个128KB的擦除块组成.擦除块是相互独立的,每一块的擦触操作都可以在1S内完成.每一块可以被独立地擦出1000000次.这些块可以分别设定为是可锁的或者是非可锁的,由一个锁定位来控制. 还有一个128bit的保护寄存器可以复用.
该FLASH采用25根地址线和16位数据线,可以通过nBYTE这个信号来选择是8位还是16位方式访问.该系统是采用16位方式访问的,因此该信号线接高电平,同时A0地址不起作用,一同接高.nOE/nWE是读写信号,由EP7312的读写控制线直接控制.FLASH的片选信号有三个,它们组合后的结果如下图示.
NAND-FLASH设计
系统中所用的NAND芯片是SAMSUNG的K9F2808U,该器件存储容量为16M*8位,除此之外还有512K*8位的空闲存储区.该器件采用TSSOP48的封装,工作电压为2.7V~3.6V,8位I/O口采用地址,数据,命令复用的方式,这样既可减少引脚数量,又可使接口电路简捷.由于ARM系统没有NAND控制所需要的CLE,ALE等信号,因此需要利用ARM的通用I/O口.
文章评论(0条评论)
登录后参与讨论