嵌入式Linux系统中nandflash的寻址方式(以k9f1208 nandflash---64M x 8 Bit NAND Flash Memory为参考说明)

1.NAND Flash的寻址方式:NAND Flash Addressing Mode

    NAND Flash的寻址方式和NAND Flash的memory组织方式紧密相关。NAND Flash的数据是以bit的方式保存在memory cell(存储单元),一般来说,一个cell中只能存储一个bit。这些cell以8个或者16个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device的位宽。这些Line会再组成Page,通常是528Byte/page或者264Word/page。然后,每32个page形成一个Block,Sizeof(block)=16kByte

 

Block是NAND Flash中最大的操作单元,擦除就是按照block为单位完成的,而写入/读取是按照page为单位完成的。

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

-Block Address

-Page Address

-Column Address

 

首先,必须清楚一点,对于NAND Flash来讲,地址和命令只能在I/O[7:0]上传递,数据宽度可以是8位或者16位,但是,对于x16的NAND Device,I/O[15:8]只用于传递数据。清楚了这一点,我们就可以开始分析NAND Flash的寻址方式了。

=>  以528Byte/page 总容量512Mbit的NAND器件为例:

    因为1 block=16kbyte,512Mbit=64Mbyte,Numberof(block)=4096

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

用户数据保存在main area中。

 

512byte需要9bit来表示,对于528byte系列的NAND,这512byte被分成1st half page和2nd half page,

各自的访问由所谓的pointer operation命令来选择,也就是选择了bit8的高低。因此A8就是

halfpage pointer(这是我给出的一个名字),A[7:0]就是所谓的column address。

 

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

Block的地址是由A14以上的bit来表示,例如512Mb的NAND,共4096block,因此,需要12个bit

来表示,即A[25:14],如果是1Gbit的528byte/page的NAND Flash,则block address用

A[26:14]表示。而page address就是blcok address|page address in block

 

NAND Flash的地址表示为:

Block Address|Page Address in block|halfpage pointer|Column Address

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

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

例如,对于512Mbit x8的NAND flash,地址范围是0~0x3FF_FFFF,只要是这个范围内的数值

表示的地址都是有效的。

 

以NAND_ADDR为例:

第1步是传递column address,就是NAND_ADDR[7:0],不需移位即可传递到I/O[7:0]上

而halfpage pointer即bit8是由操作指令决定的,即指令决定在哪个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的容量是256Mbit以下,那么,block adress最高位只到bit24,因此寻址

只需要3步。

下面,就x16的NAND flash器件稍微进行一下说明。

由于一个page的main area的容量为256word,仍相当于512byte。但是,这个时候没有所谓的1st halfpage和2nd halfpage之分了,所以,bit8就变得没有意义了,也就是这个时候

bit8完全不用管,地址传递仍然和x8器件相同。除了,这一点之外,x16的NAND使用方法和x8的使用方法完全相同。

 

Written on Mar 17,2004

Copyright by mYthorON

转载请注明作者和出处。

  

2.nandflash地址传递例子说明:

(1)对64MB,8位的nand flash来说 : (4096个块,需要12位来表示)


-Block Address         A[25:14]

-Page Address          A[13:9]

-Column Address        A[7:0]

 

故 : 第一次直接传A[7:0] ; 第二次将A[16:9]右移9位,再传它 ; 第三次将A[24:17]右移17位,再传它 ; 第四次将A[25]右移25位,再传它

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

             

(2)对32MB,8位的nand flash来说 : (2048个块,需要11位来表示)

-Block Address        A[24:14]

-Page Address         A[13:9]

-Column Address       A[7:0]

 

故 : 第一次直接传A[7:0] ; 第二次将A[16:9]右移9位,再传它 ; 第三次将A[24:17]右移17位,再传它

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

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sincethen/archive/2010/02/28/5333582.aspx

你可能感兴趣的:(linux,Flash,嵌入式,存储,byte,2010)