Chinaunix首页 | 论坛 | 博客
  • 博客访问: 266906
  • 博文数量: 60
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 820
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-18 00:28
文章分类

全部博文(60)

文章存档

2010年(60)

我的朋友

分类:

2010-04-07 09:31:54

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控制寄存器

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

 1413]保留

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

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

 108TACLS   持续时间 = HCLK*TACLS+1

 64 TWRPH0

 20 TWRPH1

 

NFCMD  命令设置寄存器

 70] 命令值

NFADDR 地址设置寄存器

 70] 存储器地址

NFDATA 数据寄存器

 70] 存放数据

NFSTAT 状态寄存器

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

NFECC  ECC寄存器

 2316ECC校验码2

 158 ECC校验码1

 80  ECC校验码0

 

写操作:

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

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

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

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

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

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

 

擦除操作:

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

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

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

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

 

读操作有两种读模式:

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

读方式2用于读附加数据

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

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

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

备用区域的从512527地址的数据,可以通过读方式2指令进行指令进行读取(命令为50h)。地址A0A3设置了备用区域的起始地址,A4A7被忽略掉

 

时序要求:

写地址、数据、命令时,nCEnWE信号必须为低电平,它们在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步。

阅读(1202) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~