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)