广告

原创 嵌入式开发之NorFlash 和NandFlash

2015-1-24 19:46 535 0 分类: MCU/ 嵌入式 文集: BootLoader学习

目前,各类DDR,SDRAM或者RDRAM都属于 都 属于挥发性内存,只要停止电流供应内存中的数据便无法保持。Flash是一种非易失性( Non-Volatile )内存,在没有电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘,这项特性正是闪存得以成为各类便携型数字设备的存储介质的基础。

1. NorFlash和NandFlash启动方式

(1)NorFlash 有自己的数据和地址总线,因此可采用类似RAM的随机访问。NorFlash的特点是芯片内执行(XIP: eXecute In Place),这样应用程序应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。如果uboot中的ro段就可以直接在 NorFlash上运行,只需要把rw段和zi段拷贝到RAM中运行即可。

(2)Nand Flash器件使用复杂的I/O口来串行的存取数据,8个引脚用来传送控制,地址和数据信息。由于时序较为复杂,所以一般CPU最好集成NAND控制器。 另外由于NandFlash没有挂接在地址总线上,所以如果想用NandFlash作为系统的启动盘,就需要CPU具备特殊的功能。如s3c2410具有 一个stepping stone。

Note:

1>S3C2410 之所以可以将loader代码烧在NAND上从而boot,是由于s3c2410有一个内置的SRAM,叫做stepping stone.当加电后,可以自动将NAND的起始4K的内容拷贝到SRAM里,然后在RAM里执行,将NAND里的代码拷贝至SDRAM。也就是我们就可 以讲一个小于4K的loader烧至NAND Flash上就可以了。

2> NorFlash   随机存储介质,适合做代码存储并EIP,读取速度快。

NandFlash   连续型存储介质,适合用来做大量数据存储的。

2. NorFlash与NandFlash型读写的基本单位不同

NandFlash和NorFlash的共性首先表现在向芯片中写数据必须先将芯片中对应的内容清空,然后再写入,也就是通常说的先檫后写”。只不过NorFlash只用檫写一个字,而NandFlash需要擦写整个块

(1)应用程序对NorFlash操作以为基本单位。为了方便对大容量NOR闪存的管理,通常将NOR闪存分成大小为128KB或者64KB的逻辑块,有时候块内还分成扇区。读写时需要同时逻辑块号和块内偏移。

(2)应用程序对NandFlash操作是为基本单位。NandFlash的块比较小,一般是8KB,然后每块又分成页,页的大小一般是512字节。要修改NandFlash中一个字节,必须重写整个数据块

So:

1>NorFlash 可以对字进行操作,在处理小数据量的I/O操作的时候速度要比NandFlash快。

2>NandFlash只能对一个固定大小的区域进行清零操作。

3>NAND 器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为1。擦除NOR器件时是以64~128KB的块进行的,执行一个 擦除/写入操作的时间约为5s。擦除NAND器件是以8~32KB的块进行的,执行一个擦除/写入操作最多只需要4ms(此处是大数据情况下)。

3.NorFlash和NandFlash容量与成本对比

(1)NorFlash的容量相对要小,且成本较高。

(2)NandFlash的容量比较大,目前最大容量已经达到8G字节。为了方便管理,NandFlash的存储空间使用了块和页两级存储体。由于对NandFlash的操作都是以块和页为单位的,所以在向NandFlash进行大量数据读写时,NandFlash的速度要快于NorFlash闪存。并且NandFlash成本较低。

4.NorFlash和NandFlash可靠性对比

(1)NorFlash的可靠性要高于NandFlash,这主要是因为)NorFlash的接口简单,数据操作少,因此可靠性高,极少出现块区块,因而一般用在对可靠性要求高的地方。

(2)NandFlash接口和操作均相对复杂,位交换操作也很多,关键性数据更是需安错误探测/错误更正算法来确保数据的完整性,因此出现问题的几率要大的多,坏区块也是不可避免的,而且由于坏区块是随机分布的,连纠错也无法做到。

因此:建议在使用NandFlash时,要采用EDC/ECC等校验算法。

5. NorFlash和NandFlash寿命对比

Flash檫写的次数都是有限的,当Flash的使用接近使用寿命的时候,经常会出现些操作失败;到达使用寿命时,Flash内部存放的数据虽然可以读,但是不能再进行写操作,所以为了防止上面问题的发生,不能对某个特定的区域反复进行写操作。

通常NandFlash的可檫写次数高于NorFlash,但是由于NandFlash通常是整块檫写,块内的页面中如果有一位失效整个快就会失效,而且由于檫写过程复杂,失败的概率相对较高,所以从整体上来说NorFlash的寿命较长。

Note:

在NandFlash中每个块的最大擦写次数是一百万次,而NorFlash的擦写次数是十万次。Flash的使用寿命同时和文件系统的机制也有关,要求文件系统具有损耗平衡功能。

6.使用上差异

在使用性上体现出的差异也是与NOR和NAND自身的架构设计分不开的。

(1)接口方面:NOR的设计有明显的传统闪存的特征,因此实际应用起来相对于NAND全新的复杂I/O设计要容易的多。而且,在使用NAND闪存时,必须先写入驱动程序,才能继续执行其他操作

(2)NAND在使用中还存在者坏块管理的问题,在NAND闪存中,由于坏块是随机分布的,因此需要进行扫描并将坏块打上标记。坏块的存在使得向NAND闪存写入信息需要相当的技巧,因为绝不能向坏块写入,这意味着在NAND闪存上自始自终都必须进行虚拟映射

(3)在NOR闪存上运行代码不需要任何的软件支持,在NAND闪存上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD), NAND和NOR闪存在进行写入和檫除操作时都需要MTD。

(4)使用NOR闪存时所需要的MTD要相对少一些,许多厂商都提供用于NOR闪存的更高及软件,这其中包括M-System的TrueFFS驱动。

7.如何抉择:

(1)一般的原则是:在大容量的多媒体应用用选用NandFlash,而在数据/程序存储应用中选用NorFlash。

(2)我们一般用NorFlash存储程序,用NandFlash存储数据,使两种闪存的优势互补。

举例:

采 用支持XIP技术的NOR闪存能够直接运行OS,速度很快,既简化了设计,又降低了成本,所以许多手机都采用NOR+RAM的设计。NOR闪存的不足之处 是存储密度较低,所以也有采用NAND+RAM的设计。对于这两种方案,很难说哪一种更好,因为我们不能离开具体的产品而从某一个方面单纯地去评价。追求 小巧优雅的手机将需要NOR闪存支持;追求大存储容量的手机则将更多地选择NAND闪存;而同时追求功能和速度的手机则会采用NOR+NAND+RAM的 设计,这种取长补短的设计能够发挥NOR和NAND各自的优势。

(4) 除了速度、存储密度的因素,在选择闪存芯片时,还需要考虑接口设计、即插即用设计和驱动程序等诸多问题,因为两种类型的闪存在上述几个方面也有很多的不 同。比如在驱动程序方面,NorFlash运行代码不需要任何的软件支持,而在NandFlash上进行同样操作时就需要存储技术驱动程序(MTD)的支 持。虽然NAND和NOR器件在进行写入和擦除操作时都需要MTD, 但对于NAND来说驱动程序的开发难度更大,因为NAND闪存的纠错和坏块处理功能都需要通过驱动程序来实现

8补充知识点 SPI Flash

       SPI Flash即serial peripheral interface串行外围设备接口是一种常见的时钟同步串行通信接口,是NorFlash的一种。

      NorFlash根据数据传输的位数可以分为并行(Parallel)NorFlash和串行(SPI)NorFlash(即SPI Flash)。

      SPI NorFlash每次传输一个bit位的数据,parallel NorFlash每次传输多个bit位的数据(有x8和x16bit两种);SPI Flash便宜,接口简单点,但速度慢。

原文地址:
Blog:http://blog.csdn.net/tigerjb/article/details/9322035

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
潇洒哥 2015-07-08 16:01
位操作符的使用技巧
在C语言编程中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效...
潇洒哥 2015-04-04 17:39
finish shell分析之底层usart
rt_thread的finsh shell系统不愧是调试的一项利器,它可以除了完成一般shell的功能外,甚至还可以自定义命令。这个对功能单一的嵌入式系统来说是十分可贵的。在此我并不想对finsh...
潇洒哥 2015-04-01 21:29
__main() 和 main()
因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置...
潇洒哥 2015-03-26 22:54
RT-Thread学习之scons篇--解析rtconfig.py文件
rtconfig.py文件,主要用于指定编译器以及安装路径。除此之外,该文件中定义了大量的变量,这些变量包括编译选项,汇编选项,链接选项。   import os # toolchain...
潇洒哥 2015-03-26 22:53
RT-Thread学习之scons篇--SConsruct脚本文件解析
       scons的构建文件名称是统一的都称为SConstruct。其是scons所接受的编译脚本主文件。当然为了方便目录的组织,也允许在各个目录下面存放SConscript, 然后最上面S...
潇洒哥 2015-03-26 22:53
RT-Thread学习之scons篇--SConcript文件解析
SConscript文件是用来指定哪些文件会加入编译。先来分析下BSP主目录下的SConscript文件: import rtconfig Import('RTT_ROOT') fro...
我要评论
0
0
广告