Serial Nand Flash

本文以旺宏 MX35LF2GE4AB 芯片为例加以说明,该芯片为2Gb SCL serial nand flash。理解本文时可能需要对照其datasheet,

一、名词解释

SCL: Single Level Cell,单层式储存,与MCL多层式储存相对而言。

Serial: 相对parallel而言,只有#CE、SCLK、DI、DO、#WP、#HOLD等信号线。

Nand: Not and,与非,与Nor相对的flash的架构,基本结构如下图所示。


二、器件操作

在SCLK上升沿采数据SI,在SCLK下降沿推数据SO。

mode 0:idle时SCLK低电平。mode 3:idle时SCLK高电平。

备注:SPI有4中mode,0~3。 



三、地址映射

CA: Column Address,11~0,实际寻址为0~2111。

RA: Row Address,16~0。


上图来自网络(经修改后符合MX35LF2GE4AB地址映射)


四、操作命令

Nand flash的读、写、擦都是以整个page(2112 Byte)来操作的。

1、Read Operation(读)

需要将Array中的data通过PAGE READ命令搬进cache中,再通过READ FROM CACHE命令通过SO信号线传输出来。

A、PAGE READ(13h)

24 bit address:bit24~17为dummy,bit16~0为RA[16:0],其中RA[16:6]是block address,RA[5:0]是page address。

在PAGE READ命令下完之后,有一段tRD的时间处理busy状态来把data从array中搬进cache,此时SO信号线是没有data出来的,可通过GET FEATURES命令来看status寄存器C0h中的OIP(bit0=1,busy)。


B、READ FROM CACHE (03h or 0Bh),又名RANDOM DATA READ

Wrap[1:0]: 1Gb的MX35LF1GE4AB才有,用来规定wrap长度。规定wrap长度后,只要#CS为低,data out就会回到12 bit address规定的起始地址重复循环输出。

Plane select: 2Gb的MX35LF2GE4AB才有,用来选择plane(参见地址映射的图)。

12 bit Address: column address,即cache中的地址,用来选择cache中data的起始地址(只能是0~2111)。

Dummy cycle: 固定8 bit。

Data Out: 将cache中的data输出,READ FROM CACHE命令data只在SO信号线上输出,READ FROM CACHE x2命令data在SI(SIO0)和SO(SIO1)信号线上输出,READ FROM CACHE x4命令data在SI(SIO0),SO(SIO1),#WP(SIO2)和#HOLD(SIO3)信号线上输出。

疑问1: 输出的data未满2112 Byte,但是cache地址已经到了2111,此时是停止输出data还是回到地址0再往后输出data?

==>是的,原文“The data will be output from the starting address, once it reaches the end of the boundary of wrap length, the data will be wrap around the beginning starting wrap address until CS# goes high

疑问2: 输出data的过程可以将#CS拉高停止输出吗?

==>可以,原文“The data will be output from the starting address, once it reaches the end of the boundary of wrap length, the data will be wrap around the beginning starting wrap address until CS# goes high


2、Program Operation(写)

写操作需要WRITE ENABLE (06h)命令将WEL bit置起来,然后PAGE PROGRAM (02h) 将data经过SI信号线写入cache中,如果需要的话改成PROGRAM LOAD RANDOM DATA (84h)来随机地址写入,最后PROGRAM EXECUTE (10h) 将cache中的data搬入array。

A、PAGE PROGRAM(02h)

疑问1: PAGE PROGRAM和 PROGRAM LOAD RANDOM DATA两条命令的区别在于12 bit Address一个从0开始,一个从任意地址(0~2111)开始? 

疑问2: 一次必须2112 Byte的data写入吗?#CS能提前拉高结束吗?

==>可以,原文“ When CS goes high, the "PROGRAM LOAD" or "PROGRAM LOAD RANDOM DATA" operation"
terminates. ”

疑问3: PROGRAM LOAD RANDOM DATA命令的时候,2112 Byte的data是怎么写入的?是写到地址2111后回到地址0吗?

==>超过地址2111的data会被丢弃,原文“Exceeded bytes (Page address is
larger than 2112) for "PROGRAM LOAD" or "PROGRAM LOAD RANDOM DATA", the exceeding bytes will
be ignored.”


B、PROGRAM EXECUTE (10h) 

将data从cache搬入array,SI信号线上没有data信号,需要tWD的时间来完成操作,可以通过GET FEATURE命令来查看status寄存器C0h中的OIP(bit0=1,busy)。



3、Block Erase(擦)

先将#CS拉低,然后下命令和24 bit address(16:0为block address),最后将#CS拉高。

总结:

1、Nand flash的read和write(program)的操作都要比Nor flash的操作要复杂,对Nand flash的array操作只能是整个page,而不能像Nor flash一样对单个Byte操作。

2、Nand flash本身还有很多其他操作,本文没有涉及到,需要查看其datasheet。