知了博客

集天地之精华,吸日月之灵气

« Foxyspider 1.3Ubuntu 11.04(64-bit)安装flash player »

如何给WinCE选择合适的FLASH存储器?

随着嵌入式系统产品的迅速发展,对大容量低功耗存储器 需求也正日益增强。存储器件不但是嵌入式系统必不可少的一部分,而且嵌入式系统的存储设备的性能也是决定整体系统性能的核心环节之一。在我负责的一个 WinCE平台的智能移动设备开发项目中,由于我只是片面的想当然地考虑速度或大容量,使我在选择合适的Flash存储器上吃尽苦头。
  实际上,选择一款合适的Flash存储器是Windows CE开发中最具有挑战性的内容之一,因为它不但要求开发人员要具备硬件接口知识,清晰了解Windows CE 下驱动程序的架构,还要具备驱动程序开发的相关知识。本文通过分析WinCE平台下两种Flash的速度、接口、可靠性和寻址方式的比较,然后给出我在WinCE系统下选择合适的闪存方案的经验和建议。

1.NOR和NAND Flash综合比较
  闪速存储器(Flash Memory)是一种在不加电的情况下能长期保持存储的设备。由于Flash存储器具有存储容量大、掉电数据不丢失以及可多次擦写等许多优点,正逐步取代 其他半导体存储器件而广泛应用于嵌入式便携电子产品中。其中NOR Flash和 NAND Flash是目前两种主要的非易失闪存技术,这两种闪存在WinCE平台下如何选择也正困惑着许多初入门的开发人员。
(1)NOR和NAND Flash的速度比较
  NOR Flash存储器的特点是容量较小、写入速度较慢,但它的随机读取速度却很快,而且具有嵌入式应用经常需要的一个功能XIP(eXecute In Place)特性。因此,在WinCE系统中常用于小容量的程序代码的存储。与NOR相比,NAND闪存的优点是容量大,目前最大容量己经达到8G,因此NAND较适合于存储文件,而且NAND的真正好处是写速度快、擦除时间短。
  例如,在写数据和擦除数据时,NAND由于支持整块擦写操作,速度比NOR要快近千倍,NAND支持速率超过5Mbps的持续写操作,其区块擦除时间短至2ms,而NOR是750ms。
  但NAND的缺点是其读取速度较慢,主要是因为它的I/O端口只有8或16个,要完成地址和数据的传输就必须让这些信号轮流传送。例如,在读取时NAND 要先向芯片发送地址信息进行寻址才能开始读写数据,而它的地址信息包括块号、块内页号和页内字节号等部分,要按顺序才能定位到要操作的字节,这样每进行一 次数据访问就需要三次寻址,至少要三个时钟周期,然后才是读取数据的操作过程。而NOR Flash的操作则是以字或字节为单位进行直接读取数据。所以,在读取数据时,NOR有明显优势。
  简单的说,NAND的优点在于写和擦除操作的速率快,而NOR的优点是具有随机存取和对字节执行写操作的能力。NAND的缺点是随机存取的速率慢,NOR的缺点是受到读和擦除速度慢的制约。显然,NAND在某些方面具有绝对优势。然而,它不太适合于直接随机存取。
(2)硬件接口要求的比较
  对于16位的器件来说,NOR闪存大约需要41个I/O引脚,而NAND器件仅需24个引脚。NAND器件能够复用指令、地址和数据总线,从而节省了引脚 数量。复用接口的一项好处是在于能够利用同样的硬件设计和电路板,支持较大的NAND器件。因此,NAND器件的一个好处显然是其封装选项:NAND提供 一种厚膜的2Gb裸片或能够支持最多四颗堆叠裸片堆叠出一个8Gb的器件。
  这个特点对体积要求小型化的便携式移动设备是一个很重要的优势。而且,NAND的复用接口为所有最新的器件和密度都提供了一种相似的引脚输出,这种引脚输出使得设计工程师无须改变电路板的硬件设计,就能从更小的密度移植到更大密度的设计上。这对于要求快速开发的硬件工程师来说是一个很大的便利和福音。
  (3)读写操作和编址方式比较
  两种Flash具有相同的存储单 元,工作原理也一样。如为了缩短存取时间,它们并不是对每个单元进行单独的存取操作,而是对一定数量的存取单元进行集体操作。但它们对读写基本单位的方式 是不同的,如NAND Flash各存储单元之间是串联的,而NOR Flash各单元之间是并联的。因此,WinCE系统对NOR Flash操作以“字”为基本单位。为了方便对大容量NOR闪存的管理,通常将NOR闪存分成大小为128KB或者64KB的逻辑块,有时候块内还分成扇区。而WinCE系统对NAND Flash操作是以“块”为基本单位。
  NAND闪存的块比较小,一般是8KB,然后每块又分成页,页的大小一般是512字节。每页存储的数据正好跟硬盘的一个扇区存储的数据相同,这是设计时为了方便与磁盘进行数据交换而特意安排的。这些块类似于硬盘的簇,都是基于扇区(页)的,适合于存储连续的数据,如图片、音频或个人电脑数据。但也跟硬盘一样,NAND器件会存在坏的扇区,需要纠错码(ECC)来维持数据的完整性。
  NOR Flash闪存的数据线和地址线是分开的,而且NOR的每个存储单元是以并联的方式连接到位线,所以NOR可以像SRAM一样连在数据线上,方便对每一位 进行随机存取,另外还支持本地执行的XIP,使到WinCE系统可以直接在Flash内部运行。因此,在WinCE系统中经常将NOR芯片做启动芯片使 用,这样可以大大简化产品的设计。
  而NAND闪存因为共享地址和数据总线的原因,不允许对一个字节甚至一个块进行的数据清空,只能对一个固定大小的区域进行清零操作,而且还需要额外联结一些控制的输入输出。所以,在存放数据时NAND还需要使用算法来实现,这个模块一般是在驱动程 序的MTD(Memory Technology Drivers)模块中或在FTLZ (Flash Translation Layer)层内实现。因此,NAND FLASH必须通过驱动程序来进行数据存取,而且具体算法和芯片的生产厂商以及芯片型号有很大的关系。这不但增加了驱动程序开发的难度,而且直接将 NAND做启动芯片也比较难。
(4)可靠性和坏块管理的比较
  一般来说,NOR闪存的可靠性要高于NAND闪存,这是因为NOR闪存的接口简单,数据操作少,位交换操作少,因而一般用在对可靠性要求高的地方。相 反,NAND闪存接口和操作均相对复杂,位交换操作也很多,因而出现差错的几率会大很多,而且坏块是不可避免的,还有坏块都是随机分布的。因此,在使用 NAND Flash时意识到有坏块的可能性是非常重要的。为了检测数据的可靠性,在应用NAND Flash的系统中一般都会采用一定的坏区管理策略,而管理坏区的前提是能比较可靠地进行坏区检测。
  所以,为防止使用时向坏块写入数据,在编写和开发驱动程序的时候,必须要配合EDC/ECC(错误探测/错误更正)和BBM(坏块管理)等措施来保障数据的可靠性,这就对开发人员的驱动开发能力提出了一个很高的要求。
通过以上的比较可以发现,NAND更适用于复杂的文件应用,但是由于NAND的使用相对复杂,所以对驱动程序的开发能力有较高的要求。简单的说,就是NOR闪存是随机存储介质,用于数据量较小的场合;NAND闪存是连续存储介质,适合存放大的数据,但需要驱动程序和坏块管理优化等开发能力。

2.在WinCE下如何选择合适的Flash闪存?
  NAND Flash具有存取速度快、体积小、成本低的特点,适宜作为海量数据的存储设备。但大容量的NAND Flash的实现方案也必须要小心处理动态扇区分配、坏块管理。因此,如何做到“鱼与熊掌,两者兼得”,可以从以下几个角度进行考虑:
(1)从使用目的角度来选择

  在选择存储解决方案时,开发人员应该在多种因素之间进行权衡,以获得较高的性价比。一般的原则是:在大容量的多媒体应用中选用NAND闪存,而在数据/程 序存贮应用中选用NOR闪存。根据这一原则,设计人员也可以把两种闪存芯片结合起来使用,用NOR芯片存储程序,用NAND芯片存储数据,使两种闪存的优 势互补。
  以我所负责的这个智能手机的项目为例,对于追求小巧优雅的手机将 采用NOR+RAM的设计方案,因为采用支持XIP技术的NOR闪存能够直接运行OS,速度很快,既简化了设计又降低了成本。但NOR闪存的不足之处是存 储密度较低,所以在追求大存储容量的时候,我们是采用NAND+RAM的设计。对于这两种方案,很难说哪一种更好,因为我们不能离开具体的产品而从某一个 方面单纯地去评价。
而如果同时追求功能和速度的手机开 发时,我们则会采用NOR+NAND+RAM的设计,这种取长补短的设计能够发挥NOR和NAND各自的优势。NOR与NAND各有所长,但两种优势无法 在一个芯片上得到体现。所以,开发人员在选用Flash时,应该要趋其利而避其害,依照其使用目的在两者之间进行适当的选择。
  (2)从硬件接口因素上考虑
  除了速度、存储密度的因素,开发人员在选择闪存时,还需要考虑硬件上的接口设计、即插即用设计和驱动程序等诸多问题,因为两种类型的闪存在上述几个方面是有很多的不同。这些差异是与NOR和NAND自身的架构设计所决定的,例如在接口方面,NOR的设计有明显的传统闪存的特征,因此实际应用起来相对于NAND全新的、复杂的I/O设计要容易得多。
  (3)从是否具有强大的驱动开发能力上考虑
  在WinCE平台的驱动程序方面,NOR器件运行代码不需要任何的软件支持,而在NAND器件上进行同样操作时就需要存储技术驱动程序(MTD)的支持。虽然NAND和NOR器件在进行写入和擦除操作时都需要MTD,但使用NOR器件时所需要的MTD要相对少一些。
  一般来说,高效率和经过优化的NAND驱动程序是需要很高的技巧的,开发难度对初入门者也是很大,因为NAND闪存的纠错和坏块处理功能都需要通过驱动程 序来实现。还有由于串联的架构,NAND的晶体管之间很容易造成影响,使逻辑0变成逻辑1,并且也很难发现出问题的晶体管,这种现象称为位翻转(Bit- Flipping),这也需要动用EDC/ECC(错误检测码/错误修正码)来进行校正,而这方面的问题NOR则较少出现。

来源:http://bbs.msembed.com/archiver/showtopic-2685.aspx

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Arwen Build 90619 Code detection by Codefense  theme by BokeZhuti

Copyright know blog. Some Rights Reserved.站长(msn):webmaster#webgou.info(#换成@) 粤ICP备09183716号