――Block address――page address――column address
對於NANDFLASH來說,地址,命令和數據都只能在I/O[7:0]上傳遞,數據寬度為8bits或16bits。
下面解釋一下塊地址,列地址,行地址,還有頁寄存器(page Register)的含義:
在擦除數據的時候塊地址會被用到。
對Nand flash的訪問中,地址由列地址和行地址兩部分組成。
列地址(column address):列地址表示在頁內以byte(如果是X16,則以word)為單元的頁內偏移量;
行地址(頁地址)(row address):指page在整個nand芯片中的索引。
以下列舉3個不同大小型號的nand flash進行說明:
SAMSUNG_K9F5608X0D(512Bytes(沒有包括16Bytes spare)*32pages*2048blocks=32Mbytes)需要3個地址周期
列地址:A[7:0] 第一個地址周期發出,對於X8的nandflash來說,如果要把A[8]也編進列地址裡面去,那麼整個地址傳輸需要4個周期完成,所以為了節省一個周期,K9F5608X0D把頁內分為A(1 half array)區,B(2 half array)區。A區0-255字節,B區256-511字節。訪問某頁時必須通過A[8]選定特定的區,A[8]則由操作指令決定的,00h,在A區;01h在B區。所以傳輸地址時A[8]不需要傳輸。對於X16的nand flash來說,由於一個page 的main area 的容量為256word,仍相當於512byte。但是,這個時候沒有所謂的1st halfpage 和2nd halfpage 之分了,所以,bit8就變得沒有意義了,也就是這個時候 A8 完全不用管,地址傳遞仍然和x8 器件相同。除了這一點之外,x16的NAND使用方法和 x8 的使用方法完全相同。
行地址:A[24:9]由第2,3個地址周期發出;
SAMSUNG_K9F1208(512Bytes(不包括16Bytes spare)*32pages*4096blocks=64MBytes)需要4個地址周期
列地址:A[7:0] 第一個地址周期發出,同上;
行地址:A[25:9]由第2,3,4個地址周期發出,A[25]以上的各位必須被設置為L;
SAMSUNG_K9F1G08U0B(2048Bytes(不包括64Bytes spare)*64pages*1024blocks=128MBytes)需要4個地址周期
這裡有個問題2048不是用11bits就可以表示了嗎?為什麼還要用到A[11:0]這12bits?????此處求解
列地址:A[11:0] 第1,2個地址周期發出,如圖*L位要置為low;
行地址:A[27:12]由第3,4個地址周期發出;
④頁寄存器:由於對nand flash讀取和編程操作,一般最小單位是page。所以nand在硬件設計時候,對每一片都有一個對應的區域用於存放將要寫入到物理存儲單元中區的或者剛從存儲單元中讀取出來的一頁的數據,這個數據緩存區就是頁緩存,也叫頁寄存器。所以實際上寫數據只是寫到這個頁緩存中,只有等你發了對應的編程第二階段的確認命令0x10之後,實際的編程動作才開始把頁緩存一點點的寫到物理存儲單元中去,這也就是為什麼發完0x10之後需要等待一段時間的原因。