嵌入式开发之NorFlash 和NandFlash

转自:http://blog.csdn.net/tigerjb/article/details/9322035

[摘要]:作为一个嵌入式工程师,要对NorFlash 和NandFlash要有最起码的认知。本文通过从启动方式、读写方式、容量成本、可靠性、寿命以及是使用型上进行了全面的分析和对比。任何事物都两面性,因此其本身没有好坏之分,重要的是我们如何使用使其达到性能上的最佳,最后叙述了如何在NorFlash 和NandFlash上进行抉择。

前言:

目前,各类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便宜,接口简单点,但速度慢。

PS: 想了解flash与ROM、RAM之类的区别,可查看这篇文章:https://blog.csdn.net/u014470361/article/details/80100656

嵌入式开发之NorFlash 和NandFlash相关推荐

  1. 嵌入式linux基本指令,成都嵌入式开发之Linux常用命令大全

    原标题:成都嵌入式开发之Linux常用命令大全 Linux系统中有很多命令,使用Linux系统最常用的就是命令操作,而不是像Windows一样,使用鼠标操作.Linux中许多常用命令是必须掌握的,也有 ...

  2. 视频教程-物联网嵌入式开发之STM32 和 RT-thread-物联网技术

    物联网嵌入式开发之STM32 和 RT-thread 我叫连志安,现任职广东长虹技术研究所(国企).之前在康佳集团(国企).CVTE(上市公司)等公司任职.负责过Android TV.智能网关.路由器 ...

  3. 嵌入式开发之zynqMp ---Zynq UltraScale+ MPSoC 图像编码板zcu102

    嵌入式开发之zynqMp -Zynq UltraScale+ MPSoC 图像编码板zcu102 1.1 xilinx zynqMp 架构 1.1.1 16nm 级别工艺 Zynq UltraScal ...

  4. 嵌入式开发之Qt-5.9.6应用程序开发环境搭建

    参考文档 嵌入式开发之Qt-5.9.6交叉编译(带WebEngine) Qt-5.9.6 linux安装包官方下载地址 Qt-5.9.6 linux安装包百度云下载地址 开发环境介绍 主机操作系统:U ...

  5. 专科生的嵌入式开发之路

    俗话说的好,高中不努力,大学指定没戏,哈哈,谁说的,当然是我说的.高考结束了,我成功以320分的优异成绩成为了一个地道的专科生,高中玩嗨了,这回选志愿就傻眼了,这点分可选的学校并不多,要不再复习一年? ...

  6. 嵌入式开发之davinci--- DVRRDK, EZSDK和DVSDK这三者有什么区别

    下载的时候选择信息要避免security类型的产品,这个是要审查的. DVRRDK是专门针对DVR的开发包是非公开的,针对安防的客户定制的,效率要高. EZSDK是开放的版本架构上使用openmax可 ...

  7. 毕业这几年的嵌入式开发之路

    大家好,我是写代码的篮球球痴 今天分享一篇文章,这篇文章的主人公总结了他这些年来的嵌入式之路,希望对大家的职业规划有所帮助. 在毕业即失业的年代,来看一位朋友是如何玩转嵌入式开发的,献给迷惘的你. 出 ...

  8. delphi中richedit中光标如何定位到最后_嵌入式开发之Linux系统中Vi编辑器的使用

    请大家关注点赞,已经完成物联网相关开发,会从硬件层,硬件中间层,传输层,软件中间件(物联网云平台),APP开发相关博文.首先从嵌入式开发博文开始!上一节关于<>.本节关于Linux系统中V ...

  9. 嵌入式开发之路,从51单片机开始

    关注.星标公众号,直达精彩内容 来源:技术让梦想更伟大 作者:李肖遥 嵌入式开发入门之路 我相信很多朋友第一次接触的单片机应该就是51单片机,8位的mcu,丰富的教程,可以做很多小玩意,让初学者基本掌 ...

最新文章

  1. LiveVideoStackCon 专题评审团招募进行中
  2. 【牛客 - 330C】Applese 走迷宫(bfs)
  3. MySQL兼容服务器_服务器不支持 MySql 数据库的解决方法
  4. 细数被程序员吐糟的9大困难(转)
  5. Linux 操作系统原理 — 操作系统的本质
  6. C语言程序设计---跟随Frank-FuckPPT
  7. 基于Android的五子棋 开题报告,毕业论文 基于Android的五子棋设计.doc
  8. java 流 flush,在Java流中flush()的目的是什么?
  9. 【计算机架构】什么是云原生?云原生如何解释?What is cloud native?通俗解释云原生
  10. java拼音汉字转换
  11. arcgis统计矢量面内栅格数据像元值个数
  12. java判断点与线与面的关系_高中数学必修二点线面的位置关系与线面平行判定及其性质(精华试题版)...
  13. Java基础——匿名内部类详解及举例
  14. 适合空间受限能量收集应用的高度集成电源 IC
  15. python-网页请求返回状态码429
  16. 介孔二氧化硅纳米球 Mesoporous silica nanosphere 的介孔二氧化硅纳米球
  17. 易经的奥秘》笔记--台湾师范大学曾仕强
  18. 【K8S专栏】Kubernetes工作负载管理
  19. 物联网安全与隐私保护之物联网安全体系
  20. 在线获取外链的php源码,y.qq.com-php获取QQ音乐外链源码

热门文章

  1. 天道酬勤系列之AC620简介
  2. 【重大突破】——移动端——如何手机端屏蔽掉网站,【小技巧】戒应用AppDetox,一个可以屏蔽管理APP的自律软件,马克保存
  3. 从零开始的微信小程序入门教程(一)
  4. 黑莓java文件怎么安装程序_黑莓开发环境搭建windows7+eclipse+BlackBerry Java Plug+JDK6...
  5. 我和世界杯的‘恩怨情仇’
  6. 【笔试or面试】3G门户校园招聘
  7. c语言双胞胎素数,征求好的算法:输出十万以内的双胞胎素数
  8. 网页中怎样在线播放音乐和视频
  9. java echarts 生成图片_java如何在后台生成echarts图表?实际代码展示
  10. 汇编语言_实验12_编写0号中断处理程序