NAND Flash使用8位数据线,同时作为地址线,命令线,数据线复用。类似于平时使用的点阵液晶显示器的操作方式。这里作为学习的记录,说一下nand flash 的地址的确定方式。nand flash 的内部分为 Block(块)、Page(页). 其中 一块nand flash 包含若干 Block,每个Block里包含若干Page.页是nand 的最小操作单元。
一下图片显示的是三星16Gbit的Nand Flash K9GAG08U0E 的结构图:
如图中所示,这款flash 共有2076个block(块),每个block有128个Page(页),每个页包含(8k+436)Bytes的数据,其中8k是数据区,436B是用作保存效验等一些特定用途的数据。由图中表格可以看出定位nand中的一个位置的时候需要知道是在哪个block,哪个page中的哪个字节就可以了。
首先我们把图中的数据列一下:
1 Page = (8K +436) Bytes = 8628 Byte = 0x21B4 Bytes = PS // 这个用PS代指页的字节大小
1 Block = 128 Pages = (1M + 54.5K) Bytes = 128 PS
假如我们需要访问第 5 Block ,第2页的第1077个字节。 (这里的block 、page 和页内地址均为从0开始计数)
当前如果我们知道具体的Block、Page 和页内位置,
我们可以直接将 block page 和页中的位置 三个参数组织后,分别传递给页地址 A14-A20,A21-A32,A0-A13.
同时我们也可以根据给出的地址的绝对值计算出相应的block page 和页内的位置。
上述的绝对位置用如果公式计算:
绝对地址 SUM = 块大小 * 块 + 页大小 * 页 + 页中的位置
= 128PS*5 + PS *2 + 1077
= (128*5 + 2)PS + 1077 = 5540253 = 0x
所以绝对地址必定为页大小的整数倍 + 在页内的位置大小。
确定 Column Address :页大小为0x21B4 (14位),即绝对地址 低14位为Column Address A0-A13。
A0-A13 = SUM%PS = 1077 = 0x435 A0-A7 = 0x35 , A8-A13 = 0x4 & (0x3f) = 0x4
低8位为第一个发送周期发送,剩余6位作为第二周期的高六位发送,另外高两位为低电平0。
确定Page Address: 每个Block 有128(0x80)个页。即值为 0-0x7F,占7个bit位。即 A14 - A20.
A14-A20 = (SUM / PS )%128 = 2
即SUm 的除去 上面的0x21B3所占用的bit位,接着的7个bit位应该表示的就是 Page Address 。
A21 - A32 = (SUM /PS ) /128 = 5.
所以第三周期发送的值为 (2 &0x7F)| ((5&0x1)<<7)
第四周期发送( 5>>1) & 0xFF
第五周期发送 (5 >>8) &0x7 | ( A33<<3)