nand flash 寻址

一些概念:

1、NandFlash的数据是以bit 的方式保存在memory cell里的,一般来说,一个cell 中只能存储一个bit,这些cell 以8 个或者16 个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device 的位宽。这些Line 组成Page, page 再组织形成一个Block。

2、对于NAND Flash 来讲,地址和命令只能在I/O[7:0]上传递,数据宽度是8 位。

3、NandFlash以页为单位读写数据,而以块为单位擦除数据。

 

一、以三星K9F1208 flash为例,总容量=4096blocks * 32(page/block)*512(byte/page) = 64M

即1block=32pages;1page=512byte(data area)+16bye(apare area)=528bye

读命令有两个,分别是 Read1,Read2其中Read1用于读取Data Field的数据,而Read2则是用于读取Spare Field的数据。对于Nand Flash来说,读操作的最小操作单位为Page,也就是说当我们给定了读取的起始位置后,读操作将从该位置开始,连续读取到本Page的最后一个 Byte为止(可以包括Spare Field)

要定位到flash中的某个byte地址要用到一下4个地址:

1、Column Address --  表示数据在半页中的地址 ,大小范围为0~255 ,用8位 可以表示 即 A[7:0]

2、halfpage pointer -- 表示半页在整页中的位置 ,即在0~255空间还是在256~511空间,用1位 即可表示,A[8]表示;

3、Page Address -- 表示页在块中的地址(即此页在此块中是第多少页,在0~31中选) ,大小范围0~31,用5位 表示,即A[13:9]表示;

4、Block Address -- 表示块在flash中的位置(即此块在flash中的位置--编号,在0~4095中选) ,大小范围0~4095,用12位 可以表示,即A[25:14] 表示;

综上,要想定位到flash上的某一个byte需要将上面的四种地址拼合在一起形成完整的地址,地址(NAND_ADDR)完整表示如下:

A[25:14] A[13:9] A[8] A[7:0]
Block Address Page Address halfpage pointer Column Address

 

由于地址只能在I/O[7:0]上传递,因此A[25:0]即26为地址只能分步顺序传入I/O[7:0]中,即串行方式一步一步传入。

第一步、传递Column Address,即NAND_ADDR[7:0]不需移位即可传递到I/O[7:0]上,而halfpage pointer 即bit8 是由操作指令决定的,即指令决定在哪个halfpage 上进行读写。而真正的bit8 的值是don't care 的。K9F1208提供了两个读指令,‘0x00’、‘0x01’。这两个指令区别在于‘0x00’可以将A[8]置为0,选中上半页;而‘0x01’可以将A[8]置为1,选中下半页。

第二步、将NAND_ADDR右移9位,即NAND_ADDR[16:9]传递到I/O[7:0]

第三步、将NAND_ADDR再右移8位,NAND_ADDR[24:17]放到I/O 上

第四步、将NAND_ADDR再右移8位,将NAND_ADDR[25]放到I/O上

四步后,整个地址传递完成,即4-step addressing---4个cycle

代码实现见 http://www.dzsc.com/data/html/2009-5-31/76525.html

http://blog.csdn.net/abc19842008/archive/2008/01/22/2059480.aspx

 

你可能感兴趣的:(html,.net,Blog,Flash,三星)