2009年7月18日星期六

NandFlash驱动超详细分析(三)(转)





NandFlash驱动超详细分析(三)(转)



2410NandFlash控制器


管脚配置


D[7:0]: DATA0-7 数据/命令/地址/的输入/输出口(与数据总线共享)


CLE : GPA17  命令锁存使能 (输出)


ALE : GPA18  地址锁存使能(输出)


nFCE : GPA22 NAND Flash 片选使能(输出)


nFRE : GPA20 NAND Flash 读使能 (输出)


nFWE : GPA19 NAND Flash 写使能 (输出)


R/nB : GPA21 NAND Flash 准备好/繁忙(输入)


 


相关寄存器:


NFCONF   NandFlash控制寄存器


 [15]NandFlash控制器使能/禁止     0 = 禁止   1 = 使能


 [14:13]保留


 [12]初始化ECC解码器/编码器    0 = 不初始化   1 = 初始化


 [11]芯片使能  nFCE控制        0 = 使能       1 = 禁止


 [10:8]TACLS   持续时间 = HCLK*(TACLS+1)


 [6:4] TWRPH0


 [2:0] TWRPH1


 


NFCMD  命令设置寄存器


 [7:0] 命令值


NFADDR 地址设置寄存器


 [7:0] 存储器地址


NFDATA 数据寄存器


 [7:0] 存放数据


NFSTAT 状态寄存器


 [0]    0 = 存储器忙     1 = 存储器准备好


NFECC  ECC寄存器


 [23:16]ECC校验码2


 [15:8] ECC校验码1


 [8:0]  ECC校验码0


 


写操作:


写入操作以页为单位。写入必须在擦除之后,否则写入将出错。


页写入周期中包括以下步骤:


写入串行数据输入指令(80h)。然后写入4个字节的地址,最后串行写入数据(528Byte)。串行写入的数据最多为528byte。


串行数据写入完成后,需要写入“页写入确认”指令10h,这条指令将初始化器件内部写入操作。


10h写入之后,nand flash的内部写控制器将自动执行内部写入和校验中必要的算法和时序,


系统可以通过检测R/B的输出,或读状态寄存器的状态位(I/O 6)来判断内部写入是否结束


 


擦除操作:


擦除操作时以块(16K Byte)为单位进行的


擦除的启动指令为60h,随后的3个时钟周期是块地址。其中只有A14到A25是有效的,而A9到A13是可以忽略的。


块地址之后是擦除确认指令D0h,用来开始内部的擦除操作。


器件检测到擦除确认命令后,在/WE的上升沿启动内部写控制器,开始执行擦除和擦除校验。内部擦除操作完成后,应该检测写状态位(I/O 0),从而了解擦除操作是否成功完成。


 


读操作有两种读模式:


读方式1用于读正常数据;


读方式2用于读附加数据


在初始上电时,器件进入缺省的“读方式1模式”。在这一模式下,页读取操作通过将00h指令写入指令寄存器,接着写入3个地址(一个列地址和2个行地址)来启动。一旦页读指令被器件锁存,下面的页操作就不需要再重复写入指令了。


写入指令和地址后,处理器可以通过对信号线R//B的分析来判断该才作是否完成。


外部控制器可以再以50ns为周期的连续/RE脉冲信号的控制下,从I/O口依次读出数据


备用区域的从512到527地址的数据,可以通过读方式2指令进行指令进行读取(命令为50h)。地址A0~A3设置了备用区域的起始地址,A4~A7被忽略掉


 


时序要求:


写地址、数据、命令时,nCE、nWE信号必须为低电平,它们在nWE信号的上升沿被锁存。命令锁存使能信号CLE和地址锁存信号ALE用来区分I/O引脚上传输的是命令还是地址。


 


寻址方式:


NAND Flash的寻址方式和NAND Flashmemory组织方式紧密相关。NAND Flash的数据以bit的方式保存在memory cell,一个cell中只能存储一个bit。这些cell8个或者16个为单位,连成bit line,形成byte(x8)/word(x16),这就是NAND的数据宽度。


      


       这些Line会再组成Page典型情况下:通常是528Byte/page或者264Word/page。然后,每32page形成一个BlockSizeof(block)=16.5kByte。其中528Byte = 512Byte+16Byte,前512Byte为数据区,后16Byte存放数据校验码等,因此习惯上人们称1page512个字节,每个Block16Kbytes


      现在在一些大容量的FLASH存贮设备中也采用以下配置:2112 Byte /page 1056 Word/page64page/BlockSizeof(block) = 132kByte;同上:2112 = 2048 +64,人们习惯称一页含2k个字节,一个Block含有64个页,容量为128KB


 


       BlockNAND Flash中最大的操作单元,擦除可以按照blockpage为单位完成,而编程/读取是按照page为单位完成的



       所以,按照这样的组织方式可以形成所谓的三类地址:


         -Block  Address   块地址


         -Page   Address   页地址


         -Column Address  列地址


      首先,必须清楚一点,对于NAND Flash来讲,地址和命令只能在I/O[7:0]上传递,数据宽度可以是8位或者16位,但是,对于x16NAND DeviceI/O[15:8]只用于传递数据。


    清楚了这一点,我们就可以开始分析NAND Flash的寻址方式了。


528Byte/page 总容量64M Byte+512kbyteNAND器件为例:


因为


1page=528byte=512byte(Main Area)+16byte(Spare Area)


1block=32page = 16kbyte


64Mbyte = 4096 Block


 


用户数据保存在main area中。


512byte需要9bit来表示,对于528byte系列的NAND,这512byte被分成1st half2nd half,各自的访问由所谓的pointer operation命令来选择,也就是选择了bit8的高低。因此A8就是halfpage pointerA[7:0]就是所谓的column address


 


32page需要5bit来表示,占用A[13:9]即该page在块内的相对地址。


Block的地址是由A14以上的bit来表示,例如64MBNAND,共4096block,因此,需要12bit来表示,即A[25:14],如果是1Gbit528byte/pageNAND Flash,共8192block,则block addressA[30:14]表示。


 


NAND Flash的地址表示为:


Block Address  Page Address in block  |  half page pointer |  Column Address


地址传送顺序是Column Address , Page Address , Block Address


 


例如一个地址:0x00aa55aa


         0000 0000  1010  1010  0101  0101  1010  1010


 


由于地址只能在I/O[7:0]上传递,因此,必须采用移位的方式进行。


例如,对于64MBx8NAND flash,地址范围是0~0x3FF_FFFF,只要是这个范围内的数值表示的地址都是有效的。


      


       NAND_ADDR为例:


       1步是传递column address,就是NAND_ADDR[7:0],不需移位即可传递到I/O[7:0]上, halfpage pointerbit8是由操作指令决定的,即指令决定在哪个halfpage上进行读写,而真正的bit8的值是don't care的。


       2步就是将NAND_ADDR右移9位,将NAND_ADDR[16:9]传到I/O[7:0];


       3步将NAND_ADDR[24:17]放到I/O;


       4步需要将NAND_ADDR[25]放到I/O;


       因此,整个地址传递过程需要4步才能完成,即4-step addressing


       如果NAND Flash的容量是32MB以下,那么,block adress最高位只到bit24,因此寻址只需要3步。




没有评论:

发表评论