Nand Flash 介绍及高通nand flash驱动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Nand Flash 介绍及高通nand flash驱动
1. Nand Flash 相关概念
1.1 NOR flash与nand flash
1) Nor flash 写速度要比Nand flash 慢得多,Nor flash的读速度比Nand flash快得多。
2.)Nor flash 可以挂上CPU 芯片的地址线,不需要额外的sdram 就可直接在Nor flash 中直接运行,而Nand flash 需要代码搬运到Ram中运行,所以需要Boot loader,需要额外的sdram 的开销。
3)Nandflash需要做badblock检测和ecc校验;每个page中需有一块区域标识坏块信息,而 Nor flash 没有badblock 和ecc 校验的概念。
4)Nand flash最小的program单位为page,而Nor flash 可以对bit进行
1.2 什么是SLC和MLC
SLC,Single Level Cell:单个存储单元,只存储一位数据,表示成1或0.
对于数据的表示,单个存储单元中内部所存储电荷的电压,和某个特定的阈值电压Vth,相比,如果大于此Vth值,就是表示1,反之,小于Vth,就表示0.
MLC,Multi Level Cell:与SLC相对应,就是单个存储单元,可以存储多个位,比如2位,4位等。其实现机制,就是,通过控制内部电荷的多少,分成多个阈值,通过控制里面的电荷多少,而达到我们所需要的存储成不同的数据。比如,假设输入电压是Vin=4V那么,可以设计出2的2次方=4个阈值, 1/4 的Vin=1V,2/4的Vin=2V,3/4的Vin=3V,Vin=4V,分别表示2位数据00,01,10,11。对于写入数据,就是充电,通过控制内部的电荷的多少,对应表示不同的数据。
另,nand flash:
页大小是512+16=528的称为small page
页大小是2048+64=2112的称为large page
1.3 Nand flash的组成结构
图2 Nand flash 物理存储单元的阵列组织结构
NAND Flash 的数据是以bit 的方式保存在memory cell,一般来说,一个cell 中只能存储一个bit。这些cell 以8 个或者16 个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device 的位宽。这些Line 会再组成Page。
如上图flash的结构,每个page包含2012Byte,每64 个page 形成一个Block, 8192个block形成整个flash。 page=2012Byte=2048(Main
Area)+64byte(Spare Area)
2 .Nand flash 命令及寻址方式:
Nand flash的操作,一般都用通用的命令。如下图表示nand flash操作的相关命令。
图3 Nand flash 相关操作命令
2.1 Nand Flash 寻址方式
Block是NAND Flash中最大的操作单元,擦除就是按照block为单位完成的而编程/读取是按照page为单位完成的。
所以,按照这样的组织方式可以形成所谓的三类地址:
-Block Address 块地址
-Page Address 页地址
-Column Address 页内偏移地址
图4 Nand flash的地址周期组成
NAND Flash的地址表示为:
Block Address|Page Address in block|Column Address
地址传送顺序是Column Address,Page Address,Block Address。
由于地址只能在I/O[7:0]上传递,因此,必须采用移位的方式进行。
Column address就是表示页内的地址
如上flash的读看,此nand flash地址周期共有4个,2个列(Column)周期,2个行(Row)周期。而对于对应地,我们可以看出,实际上,列地址A0~A10,就是页内地址,地址范围是从0到2047,而对出的A11,理论上可以表示2048~4095,但是实际上,我们最多也只用到了2048~2011,用于表示页内的oob区域,其大小是64字节
Row address 表示页号即页地址:
A12~A30,称作页号,页的号码,可以定位到具体是哪一个页。而其中,A18~A30,表示对应的块号,即属于哪个块。由于共有8192块故用13位表示
A12~A17,表示块中的那一页,由于1块有64个页故用6位表示。
2.2 操作过程的解释
下面以nand flash的读操作来解释nand flash的工作过程及相关时序。
图5 Nand flash 读操作时序
对于读操作的,上面图中标出来的,1-6个阶段,具体是什么含义。
(1)操作准备阶段:此处是读(Read)操作,所以,先发一个图5中读命令的第一个阶段的0x00,表示,让硬件先准备一下,接下来的操作是读。
(2)发送两个周期的列地址。也就是页内地址,表示,我要从一个页的什么位
置开始读取数据。
(3)接下来再传入三个行地址。对应的也就是页号。
(4)然后再发一个读操作的第二个周期的命令0x30。接下来,就是硬件内部自
己的事情了。
(5)Nand Flash内部硬件逻辑,负责去按照你的要求,根据传入的地址,找到哪个块中的哪个页,然后把整个这一页的数据,都一点点搬运到页缓存中
去。而在此期间,你所能做的事,也就只需要去读取状态寄存器,看看对
应的位的值,也就是R/B#那一位,是1还是0,0的话,就表示,系统是busy,仍在”忙“(着读取数据),如果是1,就说系统活干完了,忙清
了,已经把整个页的数据都搬运到页缓存里去了,你可以接下来读取
你要的数据了。
(6)通过Nand Flash的控制器中的数据寄存器中写入你要读取多少个字节(by te)/字(word),然后就可以去Nand Flash的控制器的FIFO中,一点点读取你要的数据了。至此,整个Nand Flash的读操作就完成了。
3 Nand flash 坏块及ECC校验
Nand flash 中都会存在坏块,管理坏块是nand flash的重要工作,如果有文件系统,则文件系统会管理flash的坏块,如果没有则我们需要自己管理flash 的坏块。
3.1 bad block及其标记
在一个block里有1个或多个bit的状态不能稳定的编程,就没法使用它。如果一个block(128KByte)有一个Bit是坏的,那么整个block放弃使用。一般整个nand flash的最大坏块率为2%。
编程或擦除操作之后,重要的是读状态寄存器,因为它确认是否成功地完成了编程或擦除操作。如果操作失败,要把该区块标记为损坏且不能再使用。以前已编写进去的数据要从损坏的区块中搬出,转移到新的(好的)存储块之中。管理器件的软件负责映射坏块并由好的存储块取而代之。初始化软件仅仅需要扫描所有区块确定以确定哪个为坏,然后建一个坏块表供将来参考。
bad block有2种,一种是initial bad block,另一种是runtime bad block。所谓initial bad block就是出厂时就是坏块的
1) initial bad block:initial bad block的标记是保证坏块的前2个page 里的spare area里的第一个字节的内容不会是0xFF。已page为2K为例,如果前2个page其中一个的2048地址(从0开始计数,以后都是这种计数方式)上的数据(就是spare area的第一个字节)是0xFF,那么这个块不是initial bad block。值得注意的一点是bad block的标记会被erase掉成0xFF,所以有可能会误被认为是good block。所以在对每一个block earse之前一定要判断是不