Flash编程原理都是只能将1写为0,而不能将0写成1.因此在Flash编程以前,必须将对应的块擦除,而擦除的过程就是将全部位都写为1的过程,块内的全部字节变为0xFF.所以能够说,编程是将相应位写0的过程,而擦除是将相应位写1的过程,二者的执行过程彻底相反.编程
(1)闪存芯片读写的基本单位不一样
应用程序对NorFlash芯片操做以“字”为基本单位.为了方便对大容量NorFlash闪存的管理,一般将NOR闪存分红大小为128KB或64KB的逻辑块,有时块内还分扇区.读写时须要同时指定逻辑块号和块内偏移.应用程序对NandFlash芯片操做是以“块”为基本单位.NAND闪存的块比较小,通常是8KB,而后每块又分红页,页大小通常是512字节.要修改NandFlash芯片中一个字节,必须重写整个数据块.缓存
(2)NorFlash闪存是随机存储介质,用于数据量较小的场合;NandFlash闪存是连续存储介质,适合存放大的数据.ide
(3)因为NorFlash地址线和数据线分开,因此NorFlash芯片能够像SDRAM同样连在数据线上.NOR芯片的使用相似于一般内存芯片,传输效率高,可执行程序能够在芯片内执行(XI P, eXecuteIn Place),这样应用程序能够直接在flash闪存内运行,没必要再把代码读到系统RAM中.因为NorFlash的这个特色,嵌入式系统中常常将NOR芯片作启动芯片使用.NandFlash共用地址和数据总线,须要额外联结一些控制的输入输出,因此直接将NAND芯片作启动芯片比较难.性能
(4)NandFlash闪存芯片由于共用地址和数据总线的缘由,不容许对一个字节甚至一个块进行的数据清空,只能对一个固定大小的区域进行清零操做;NorFlash芯片能够对字进行操做.因此在处理小数据量的I/O操做的时候的速度要快与NorFlash的速度.好比一块NorFlash芯片一般写一个字须要10us,在32位总线上写512字节须要1280us;NandFlash闪存写512字节须要的时间包括:512×每字节50ns+10us的寻页时间+200us的片擦写时间=234us.ui
(5)NandFlash闪存的容量比较大,最大容量己达到8G字节.为了方便管理,NandFlash的存储空间使用了块和页两级存储体系,也就是说它的存储空间是二维的,好比K9F5608UOA闪存块的大小为16K,每页大小是512字节,每页还16字节空闲区用来存放错误校验码空间(也称为out-of-band,OOB空间).在进行写操做时,NandFlash闪存每次将一个字节的数据放入内部的缓存区,而后再发出“写指令”进行写操做.因为对NandFlash闪存的操做都是以块和页为单位的,因此在向NandFlash闪存进行大量数据的读写时,NAND的速度要快于NOR闪存.spa
(6)NorFlash闪存的可靠性要高于NandFlash闪存,是由于NorFlash型闪存的接口简单,数据操做少,位交换操做少,所以可靠性高,极少出现坏区块,通常用在对可靠性要求高的地方.NandFlash型闪存接口和操做均相对复杂,位交换操做也不少,关键性数据更是需安错误探测/错误更正(EDC/ECC)算法来确保数据的完整性,所以出现问题的概率要大得多,坏区块也是不可避免的,并且因为坏区块是随机分布的,连纠错也没法作到..net
(7)NANDFlash通常地址线和数据线共用,对读写速度有必定影响;NORFlash闪存数据线和地址线分开,相对而言读写速度快一些.NANDFlash和NORFlash芯片的共性blog
首先表如今向芯片中写数据必须先将芯片中对应的内容清空,而后再写入,即先擦后写.只不过NORFlash芯片只用擦写一个字,而NAND须要擦写整个块.其次,闪存擦写的次数都是有限的.当闪存使用接近使用寿命时,常常会出现写操做失败;到达使用寿命时,闪存内部存放的数据虽然能够读,但不能再进行写操做了.因此为了防止上面问题的发生,不能对某个特定的区域反复进行写操做.一般NANDFlash可擦写次数高于NORFlash芯片,可是因为NANDFlash一般是整块擦写,块内的页面中若是有一位失效整个块就会失效,并且因为擦写过程复杂,失败的几率相对较高,因此从总体上来讲NOR的寿命较长.
另外一个共性是闪存的读写操做不只仅是一个物理操做,实际上在闪存上存放数据必须使用算法实现,这个模块通常在驱动程序的MTD'(MemoryTechnology Drivers)模块中或者在FTLZ (Flash Translation Layer)层内实现,具体算法和芯片的生产厂商以及芯片型号有关系.经过比较能够发现,NAND更适用于复杂的文件应用,可是因为NAND芯片的使用相对复杂,因此对文件系统有较高的要求.接口
(8)接口对比
NorFlash带有通用的SRAM接口,能够轻松地挂接在CPU的地址、数据总线上,对CPU的接口要求低。NorFlash的特色是芯片内执行(XIP,eXecute In Place),这样应用程序能够直接在flash闪存内运行,没必要再把代码读到系统RAM中.如uboot中的ro段能够直接在NorFlash上运行,只须要把rw和zi段拷贝到RAM中运行便可.
NandFlash器件使用复杂的I/O口来串行地存取数据,8个引脚用来传送控制、地址和数据信息。因为时序较为复杂,因此通常CPU最好集成NandFlash控制器.另外因为NandFlash没有挂接在地址总线上,因此若是想用NandFlash做为系统的启动盘,就须要CPU具有特殊的功能,如s3c2410在被选择为NandFlash启动方式时会在上电时自动读取NandFlash的4k数据到地址0的SRAM中.若是CPU不具有这种特殊功能,用户不能直接运行NandFlash上的代码,那能够采起其余方式,好比好多使用NandFlash的开发板除了使用NandFlash之外,还用上了一块小的NorFlash来运行启动代码.
(9)容量和成本对比
相比起NandFlash来讲,NorFlash的容量要小,通常在1~16MByte左右,一些新工艺采用了芯片叠加技术能够把NorFlash的容量作得大一些.在价格方面,NorFlash相比NandFlash来讲较高,如目前市场上一片4Mbyte的AM29lv320 NorFlash零售价在20元左右,而一片128MByte的k9f1g08 NandFlash零售价在30元左右. NandFlash生产过程更为简单,NAND结构能够在给定的模具尺寸内提供更高的容量,这样也就相应地下降了价格.
(10)可靠性性对比
NandFlash器件中的坏块是随机分布的,之前也曾有过消除坏块的努力,但发现成品率过低,代价过高,根本不划算.Nand器件须要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用.在已制成的器件中,若是经过可靠的方法不能进行这项处理,将致使高故障率。而坏块问题在NorFlash上是不存在的.
在Flash的位翻转(一个bit位发生翻转)现象上,NAND的出现概率要比NorFlash大得多.这个问题在Flash存储关键文件时是致命的,因此在使用NandFlash时建议同时使用EDC/ECC等校验算法.
(11)升级对比
NorFlash的升级较为麻烦,由于不一样容量的NorFlash的地址线需求不同,因此在更换不一样容量的NorFlash芯片时不方便.一般咱们会经过在电路板的地址线上作一些跳接电阻来解决这样的问题,针对不一样容量的NorFlash. 而不一样容量的NandFlash的接口是固定的,因此升级简单.
(12)读写性能对比
写操做:任何flash器件的写入操做都只能在空或已擦除的单元内进行.NAND器件执行擦除操做是十分简单的,而NOR则要求在进行擦除前先要将目标块内全部的位都写为1.擦除NOR器件时是以64~128KB的块进行的,执行一个擦除/写入操做的时间约为5s.擦除NAND器件是以8~32KB的块进行的,执行一个擦除/写入操做最多只须要4ms. 读操做:NOR的读速度比NAND稍快一些.
(13)文件系统比较
Linux系统中采用MTD来管理不一样类型的Flash芯片,包括NandFlash和NorFlash.支持在Flash上运行的经常使用文件系统有cramfs、jffs、jffs2、yaffs、yaffs2等.cramfs文件系统是只读文件系统.若是想在Flash上实现读写操做,一般在NorFlash上咱们会选取jffs及jffs2文件系统,在NandFlash上选用yaffs或yaffs2文件系统.Yaffs2文件系统支持大页(大于512字节/页)的NandFlash存储器.