Flash存储器是一种非易失性存储设备,其类型包括:
NAND flash和NOR flash的比较:NOR Flash的特点是片内执行,即它的读取操作和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码。但是NORFlash比NAND Flash贵,一般适合用于存放系统的启动代码。NAND Flash不能片内执行,但它具有容量大,改写速度快的优点。且NAND Flash比较廉价,适合用于存放大量数据。但是NAND Flash比较容易出现位反转问题,在使用中一般需要进行ECC数据校验。
一、NAND Flash 组织结构
以下是K9K8G08U0A NAND Flash的组织图:
块:
块是NAND Flash擦除操作的最小单位。如上图所示,该NAND芯片中总共有8192个块,每个块中又包含64页。每个块大小为(128K+4K)Byte,所以总的芯片容量为8192*(128K+4K)Byte=8448Mbits。
页:
页是读写操作的最小单位。如上图所示,该芯片中每个块包含64页,总共有64*8192页。每个页大小为(2K+64)Bytes,其中2K是真正用于存放数据的区域,而64Bytes是OOB区域。
OOB区域:
00B区域是页中的空闲区,其作用是:1、存放坏块标记,2、存放ECC校验值,3、存储和文件系统相关的数据。一般的芯片中每512Bytes数据区会分配16Bytes的OOB区域,所以这里2K的数据区就分配了64Bytes的OOB区域。
常见的NAND Flash内部只有一个chip,每个chip只有一个plane。而有些复杂的容量更大的NAND Flash内部有多个chip,每个chip有多个plane。
二、NAND Flash引脚说明
2.CLE:Command Latch Enable,命令锁存使能,在输入命令之前,要先在模式寄存器中,设置CLE使能
3.ALE:Address Latch Enable,地址锁存使能,在输入地址之前,要先在模式寄存器中,设置ALE使能
4.CE#:Chip Enable,芯片使能,在操作Nand Flash之前,要先选中此芯片,才能操作
5.RE#:Read Enable,读使能,在读取数据之前,要先使CE#有效。
6.WE#:Write Enable,写使能,在写取数据之前,要先使WE#有效。
7.WP#:Write Protect,写保护
8.R/B#:Ready/BusyOutput,就绪/忙,主要用于在发送完编程/擦除命令后,检测这些操作是否完成,忙,表示编程/擦除操作仍在进行中,就绪表示操作完成.
9.Vcc:Power,电源
10.Vss:Ground,接地
11.N.C:Non-Connection,未定义,未连接。
三、NAND Flash命令
NAND Flash的操作都是通过发送命令来实现的,以下是某NAND Flash芯片的命令集。其中有的操作需要两个命令,如页编程操作(就是写操作),其中第一个命令实际上只是将数据写到NAND Flash的页缓冲区,需要发送第二个命令后,NAND Flash才会将数据真正的写入某个页中。
四、地址周期
NAND Flash的地址周期需要根据具体的NAND芯片来决定,现在大的NAND Flash一般有5个地址周期,以前小的可能只有4个地址周期。物理地址=块大小*块号+页大小*页号+页内地址。如下为某NAND芯片的地址周期,其中前两个地址周期称为列地址,表示页内地址。后3个地址周期称为行地址,A12~A17为页号,A18~A30为块号(具体的范围需要根据NAND 芯片决定)。
五、坏块
坏块种类:
第一种是出厂时就有的坏块,称为factory bad block,在出厂前就会对其做标记。
第二种是在使用过程中产生的坏块,称为worn-out bad block。在使用过程中进行块擦除时出错了,说明这个块坏了,这个时候就需要将这个块标记为坏块。
坏块标记:
NAND Flash坏块标记的位置三种情况:每个块的第1页、第1页和第2页、最后1页。对于小页(512Bytes大小),坏块标记是在OOB区域的第6个字节。对于大页(如2K大小),坏块标记是在OOB区域的第1个字节。如果坏块标记字节是0xff,则说明这个块是好块,否则就是坏块。
坏块管理:
没有什么可凭仗,只有他的好身体,没有地方可去,只想到处流浪。