目录1.概述 (2)2.功能框图 (3)3.管脚 (3)4.寻址 (4)5.总线操作 (5)6.命令表 (6)7.PAGE READ,0x00-0x30 (7)8.RANDOM DATA READ,0x05-0xE0 (7)9.PAGE READ CACHE MODE START,0x31;PAGE READ CACHE MODE START LAST,0x3F (8)10.READ ID,0x90 (8)11.READ STATUS,0x70 (9)12.编程操作 (9)13.内部数据搬移 (11)14.块擦除操作,0x60-0xD0 (12)15.复位操作,0xFF (13)16.写保护操作 (13)17.错误管理 (14)以Micron公司的MT29F2G08为例介绍NAND Flash原理和使用。
1.概述MT29F2G08使用一个高度复用的8-bit总线(I/O[7:0])来传输数据、地址、指令。
5个命令脚(CLE、ALE、CE#、WE#)实现NAND命令总线接口规程。
3个附加的脚用作: 控制硬件写保护(WP#)、监视芯片状态(R/B#),和发起上电自动读特征(PRE-仅3V芯片支持)。
注意, PRE功能不支持宽温芯片。
MT29F2G08内部有2048个可擦除的块,每个块分为64个可编程的页,每个页包含2112字节(2048个字节作为数据存储区,64个备用字节一般作为错误管理使用)。
每个2112个字节的页可以在300us内编程,每个块(64x2112=132K)可以在2ms内被擦除。
片上控制逻辑自动进行PROGRAM和ERASE操作。
NAND的内部存储阵列是以页为基本单位进行存取的。
读的时候,一页数据从内部存储阵列copy到数据寄存器,之后从数据寄存器按字节依次输出。
写(编程)的时候,也是以页为基本单位的:起始地址装载到内部地址寄存器之后,数据被依次写入到内部数据寄存器,在页数据写入之后,阵列编程过程启动。
为了增加编程的速度,芯片有一个CACHE寄存器。
在CACHE编程模式,数据先写入到CACHE寄存器,然后再写入到数据寄存器,一旦数据copy进数据寄存器后,编程就开始。
在数据寄存器被装载及编程开始之后,CACHE寄存器变为空,可以继续装载下一个数据,这样内部的编程和数据的装载并行进行,提高了编程速度。
内部数据搬移命令(INTERNAL DATA MOVE)也使用内部CAHCE寄存器,通常搬移数据需要很长时间,通过使用内部CACHE寄存器和数据寄存器,数据的搬移速度大大增加,且不需要使用外部内存。
2.功能框图3.管脚4.寻址Block 地址和页地址 = 实际的页地址,希望通过这个图,我们能理解块、页、块地址,页地址,列地址,备份空间,备份地址名称 类型 描述ALEI地址锁存使能。
ALE 为高时,在WE#下降沿,地址信息通过I/O[7:0]锁存片内的地址寄存器。
如果传输的不是地址信息,ALE 应该为低。
CE# I 片选。
一旦器件进入PROGRAM 或ERASE 操作,CE#可以变无效。
CLEI命令锁存使能。
CLE 为高时,在WE#上升沿,命令通过I/O[7:0]锁存到命令寄存器,当不传输命令时,CLE 应该为低。
PRE I 上电读使能。
RE# I 读使能。
WE# I 写使能。
WP# I 写保护。
当为低时候,所有的PROGRAM 和ERASE 都被禁止。
I/O[7:0] I/O 数据输入/输出。
传输命令、数据、地址。
仅在读操作时,数据是输出。
R/B#, R /B2 O 准备好/忙。
集电极开路输出。
外部需要接上拉电阻,这个脚表示芯片正在进行PROGRAM 或ERASE 操作。
在读操作期间,表示数据正从阵列中传输到串行数据寄存器中,一旦这些操作完成,R/B#回到High-Z 状态。
Vcc 电源 电源 Vss地地Cycle I/O7 I/O6 I/O5 I/O4 I/O3 I/O2 I/O1 I/O01 CA7 CA6 CA5 CA4 CA3 CA2 CA1 CA02 LOW LOW LOW LOW CA11 CA10 CA9 CA83 RA19 RA18 RA17 RA16 RA15 RA14 RA13 RA124 RA27 RA26 RA25 RA24 RA23 RA22 RA21 RA205 LOW LOW LOW LOW LOW LOW LOW RA28 CAx:列地址;RAx=行地址5.总线操作CLE ALE CE# WE# RE# WP# PRE# MODEH L L 上升沿H X X读模式命令输入L H L 上升沿H X X 地址输入H L L 上升沿H H X写模式命令输入L H L 上升沿H H X 地址输入L L L 上升沿H H X 数据输入L L L H 下降沿X X 依次读和数据输出L L L H H X X 在读期间(忙)X X X X X H X 在编程期间(忙)X X X X X H X 在擦除期间(忙)X X X X X L X 写保护X X H X X 0V/Vcc 0V/Vcc 待机上电自动读:在上电期间,PRE为VCC,3V VCC器件自动传输第一页到数据寄存器,而无需要发布一个命令或地址锁存序列。
在VCC达到大约2.5V的时候,内部电压检测器触发上电自动读功能。
在第一页数据copy到数据寄存器过程中,R/B#为低,当copy结束后,R/B#变高,在RE#脉冲的作用下第一页数据可以依次输出。
6.命令表操作周期1 周期2 在忙期间有效PAGE READ 0x00 0x30 NO PAGE READ CACHE MODE START 0x31 - NO PAGE READ CACHE MODE START LAST0x3F - NO READ for INTERNAL DATA MOVE 0x00 0x35 NO RANDOM DATA READ 0x05 0xE0 NO READ ID 0x90 - NO READ STATUS 0x70 - NO PROGRAM PAGE 0x80 0x10 NO PROGRAM PAGE CACHE 0x80 0x15 NO PROGRAM for INTERNAL DATA MOVE 0x85 0x10 NO7.PAGE READ,0x00-0x305个地址周期,确定了读出的起始地址,数据才RE#脉冲的作用下,从这个起始地址开始依次输出,直到这一页的结束。
8.RANDOM DATA READ,0x05-0xE0随机数据读,是为了用户能够设定新的列地址,增加数据读出的灵活性,随即读模式在页读(0x00-0x30序列)后使能。
这个命令的发布次数是不受限制的。
但仅仅是当前页数据的读出。
9.PAGE READ CACHE MODE START,0x31;PAGE READ CACHE MODE START LAST,0x3F发布PAGE READ命令后,在R/B#变高后,在发送0x31命令,这时启动将数据寄存器的内容传给CACHE寄存器,然后就可以顺序从CACHE里读第一个P AGE READ命令获得数据,由于这是数据寄存器是没有用的,因此,芯片自动启动读下一页的PAGE READ命令,将下一页读到数据寄存器,可以看出这么做提高的读出的速度,除了第一个PAGE READ命令外,其他PAGE READ 命令都是后台自动进行的。
再最后一次使用0x3F命令,以便禁止芯片再次自动发布PAGE READ命令。
10.READ ID,0x90读出厂家的芯片标识。
11.READ STATUS,0x70读出芯片的8bit状态。
可以通过RE#脉冲,反复读。
12.编程操作PROGRAM PAGE 0x80-0x10:Micron NAND FLASH仅支持页的编程,在一个块以内,页必须从一个块的页最低位到这个块的页的最高位连续编程,禁止随机页地址的编程。
芯片也支持页的部分编程操作,这意味着任何单个位在需要一个擦除之前仅可以被编程一次,然而,这种页能被划分成在需要一个擦除之前允许最大8个编程操作。
SERIAL DATA INPUT 0x80:PAGE PROGRAM操作要求加载SERAIL DATA INPUT(0x80)命令进入命令寄存器,随着5个地址周期之后,串行数据通过连续的WE#周期加载到值得的起始地址,PROGRAM(0x10)命令在数据输入完成之后被写入,内部写状态周期自动执行合适的编程算法,并控制所有必要的定时编程和比较操作。
写比较仅仅检测“1”是否被成功地编程为“0”了。
R/B#在阵列编程期间(tPROG)为低,在编程操作期间,仅READ STATUS 和RESET命令有效,状态寄存器的Bit6反映R/B#的状态,当芯片准备好时,读Bit0的状态确定编程操作是否成功或失败,命令寄存器在新的有效命令写入之前,一直停留在读状态寄存器模式。
RANDOM DATA INPUT 0x85:在发起数据集输入之后,可以通过RANDOM DATA INPUT命令向新的列地址写入数据。
在发布0x10命令之前,可以对同一页多次使用0x85命令。
PROGRAM PAGE CACHE MODE 0x80-0x15:CACHE编程实际上是标准的页编程命令的带缓冲编程模式,编程开始是发布S ERIAL DATA INPUT(0x80)命令,随后是5个地址周期,以及页的全部或部分数据,数据copy到CACHE寄存器,然后发布CACHE WRITE(0x15)命令。
数据在WE#的上升沿锁存到数据寄存器,在这个锁存期间,R/B#为低,锁存结束之后,R/B#变高,编程开始。
当R/B#变高之后,新的数据可以通过发布另一个CACHE PROGRAM命令来写入,R/B#保持低的时候由实际的编程时间来控制,第一次等于数据从CACH E寄存器写入到数据寄存器需要的时间,之后,只有数据寄存器的内容被编程进阵列之后,CACHE寄存器才能锁存到数据寄存器,所有,以后的R/B#为低的实际应该更长一些。
状态寄存器中反映CACHE R/B#的Bit6可以通过READ STATUS命令读出,以便确定什么时候,CACHE寄存器准备好接受新的数据了。
状态寄存器中反映R/B#的Bit5可以被查询,以确定什么时候当前编程周期的实际阵列编程完成。
如果仅使用R/B#来确定编程是否完成,那么编程序列的最后一页必须使用PRO GRAM PAGE(0x10)来替代CACHE PROGRAM(0x15)。
如果CACHE PROGRAM命令每次都使用,状态寄存器的Bit5必须用来确定编程是否结束。
当状态寄存器的bit6为1时,状态寄存器Bit0返回前一页的编程是否成功,当前PROGRAM操作的成功与否的状态是:Bit5为“1”(准备好状态)时的Bit0状态。