1. 程式人生 > >NAND FLASH 讀寫操作 簡介

NAND FLASH 讀寫操作 簡介

NAND FLASH 記憶體詳解與讀寫定址方式

一、記憶體詳解

NAND快閃記憶體陣列分為一系列128kB的區塊(block),這些區塊是 NAND器件中最小的可擦除實體。擦除一個區塊就是把所有的位(bit)設定為"1"(而所有位元組(byte)設定為FFh)。有必要通過程式設計,將已擦除 的位從"1"變為"0"。最小的程式設計實體是位元組(byte)。一些NOR快閃記憶體能同時執行讀寫操作(見下圖1)。雖然NAND不能同時執行讀寫操作,它可以 採用稱為"對映(shadowing)"的方法,在系統級實現這一點。這種方法在個人電腦上已經沿用多年,即將BIOS從速率較低的ROM載入到速率較高 的RAM上。

NAND的效率較高,是因為NAND串中沒有金屬觸點。NAND快閃記憶體單元的大小比NOR要小(4F2:10F2)的原因,是NOR的每一個單元都需 要獨立的金屬觸點。NAND與硬碟驅動器類似,基於扇區(頁),適合於儲存連續的資料,如圖片、音訊或個人電腦資料。雖然通過把資料對映到RAM上,能在 系統級實現隨機存取,但是,這樣做需要額外的RAM儲存空間。此外,跟硬碟一樣,NAND器件存在壞的扇區,需要糾錯碼(ECC)來維持資料的完整性。

儲存單元面積越小,裸片的面積也就越小。在這種情況下,NAND就能夠為當今的低成本消費市場提供儲存容量更大的快閃記憶體產品。NAND快閃記憶體用於幾乎所 有可擦除的儲存卡。NAND的複用介面為所有最新的器件和密度都提供了一種相似的引腳輸出。這種引腳輸出使得設計工程師無須改變電路板的硬體設計,就能從 更小的密度移植到更大密度的設計上。

NAND與NOR快閃記憶體比較

NAND快閃記憶體的優點在於寫(程式設計)和擦除操作的速率快,而NOR的優點是具有隨機存取和對位元組執行寫(程式設計)操作的能力(見下圖圖2)。NOR的隨 機存取能力支援直接程式碼執行(XiP),而這是嵌入式應用經常需要的一個功能。NAND的缺點是隨機存取的速率慢,NOR的缺點是受到讀和擦除速度慢的性 能制約。NAND較適合於儲存檔案。如今,越來越多的處理器具備直接NAND介面,並能直接從NAND(沒有NOR)匯入資料。

NAND的真正好處是程式設計速度快、擦除時間短。NAND支援速率超過5Mbps的持續寫操作,其區塊擦除時間短至2ms,而NOR是750ms。顯然,NAND在某些方面具有絕對優勢。然而,它不太適合於直接隨機存取。

對於16位的器件,NOR快閃記憶體大約需要41個I/O引腳;相對而言,NAND器件僅需24個引腳。NAND器件能夠複用指令、地址和資料匯流排,從而 節省了引腳數量。複用介面的一項好處,就在於能夠利用同樣的硬體設計和電路板,支援較大的NAND器件。由於普通的TSOP-1封裝已經沿用多年,該功能 讓客戶能夠把較高密度的NAND器件移植到相同的電路板上。NAND器件的另外一個好處顯然是其封裝選項:NAND提供一種厚膜的2Gb裸片或能夠支援最 多四顆堆疊裸片,容許在相同的TSOP-1封裝中堆疊一個8Gb的器件。這就使得一種封裝和介面能夠在將來支援較高的密度。

圖2 NOR快閃記憶體的隨機存取時間為0.12ms,而NAND快閃記憶體的第一位元組隨機存取速度要慢得多

NOR快閃記憶體的隨機存取時間為0.12ms,而NAND快閃記憶體的第一位元組隨機存取速度要慢得多

NAND基本操作

以2Gb NAND器件為例,它由2048個區塊組成,每個區塊有64個頁(見下圖):

每一個頁均包含一個2048位元組的資料區和64位元組的空閒區,總共包含2,112位元組。空閒區通常被用於ECC、耗損均衡(wear leveling)和其它軟體開銷功能,儘管它在物理上與其它頁並沒有區別。NAND器件具有8或16位介面。通過8或16位寬的雙向資料匯流排,主資料被 連線到NAND儲存器。在16位模式,指令和地址僅僅利用低8位,而高8位僅僅在資料傳輸週期使用。

擦除區塊所需時間約為2ms。一旦資料被載入暫存器,對一個頁的程式設計大約要300μs。讀一個頁面需要大約25μs,其中涉及到儲存陣列訪問頁,並將頁載入16,896位暫存器中。

除了I/O匯流排,NAND介面由6個主要控制訊號構成:

1.晶片啟動(Chip Enable, CE#):如果沒有檢測到CE訊號,那麼,NAND器件就保持待機模式,不對任何控制訊號作出響應。

2.寫使能(Write Enable, WE#): WE#負責將資料、地址或指令寫入NAND之中。

3.讀使能(Read Enable, RE#): RE#允許輸出資料緩衝器。

4.指令鎖存使能(Command Latch Enable, CLE): 當CLE為高時,在WE#訊號的上升沿,指令被鎖存到NAND指令暫存器中。

5.地址鎖存使能(Address Latch Enable, ALE):當ALE為高時,在WE#訊號的上升沿,地址被鎖存到NAND地址暫存器中。

6.就緒/忙(Ready/Busy, R/B#):如果NAND器件忙,R/B#訊號將變低。該訊號是漏極開路,需要採用上拉電阻。

資料每次進/出NAND暫存器都是通過16位或8位介面。當進行程式設計操作的時候,待程式設計的資料進入資料暫存器,處於在WE#訊號的上升沿。在暫存器內隨機存取或移動資料,要採用專用指令以便於隨機存取。


資料暫存器輸出資料的方式與利用RE#訊號的方式類似,負責輸出現有的資料,並增加到下一個地址。WE#和RE#時鐘執行速度極快,達到30ns的水準。 當RE#或CE#不為低的時候,輸出緩衝器將為三態。這種CE#和RE#的組合使能輸出緩衝器,容許NAND快閃記憶體與NOR、SRAM或DRAM等其它型別 儲存器共享資料匯流排。該功能有時被稱為"無需介意晶片啟動(chip enable don't care)"。這種方案的初衷是適應較老的NAND器件,它們要求CE#在整個週期為低(譯註:根據上下文改寫)。


圖4 輸入暫存器接收到頁程式設計(80h)指令時,內部就會全部重置為1s,使得使用者可以只輸入他想以0位程式設計的資料位元組


圖5 帶有隨機資料輸入的程式設計指令。圖中加亮的扇區顯示,該指令只需要後面跟隨著資料的2個位元組的地址

所有NAND操作開始時,都提供一個指令週期(表1)。

當輸出一串WE#時鐘時,通過在I/O位7:0上設定指令、驅動CE#變低且CLE變高,就可以實現一個指令週期。注意:在WE#訊號的上升沿上, 指令、地址或資料被鎖存到NAND器件之中。如表1所示,大多數指令在第二個指令週期之後要佔用若干地址週期。注意:復位或讀狀態指令例外,如果器件忙, 就不應該傳送新的指令。
以2Gb NAND器件的定址方案為例,第一和第二地址週期指定列地址,該列地址指定頁內的起始位元組表:

注意:因為最後一列的位置是2112,該最後位置的地址就是08h(在第二位元組中)和3Fh(在第一位元組中)。PA5:0指定區塊內的頁地 址,BA16:6指定區塊的地址。雖然大多程式設計和讀操作需要完整的5位元組地址,在頁內隨機存取資料的操作僅僅用到第一和第二位元組。塊擦除操作僅僅需要三個 最高位元組(第三、第四和第五位元組)來選擇區塊。

總體而言,NAND的基本操作包括:復位(Reset, FFh)操作、讀ID(Read ID, 00h)操作、讀狀態(Read Status, 70h)操作、程式設計(Program)操作、隨機資料輸入(Random data input, 85h)操作和讀(Read)操作等。


選擇內建NAND介面的處理器或控制器的好處很多。如果沒有這個選擇,有可能在NAND和幾乎任何處理器之間設計一個"無粘接邏輯(glueless)" 介面。NAND和NOR快閃記憶體的主要區別是複用地址和資料匯流排。該匯流排被用於指定指令、地址或資料。CLE訊號指定指令週期,而ALE訊號指定地址週期。利 用這兩個控制訊號,有可能選擇指令、地址或資料週期。把ALE連線到處理器的第五地址位,而把CLE連線到處理器的第四地址位,就能簡單地通過改變處理器 輸出的地址,任意選擇指令、地址或資料。這容許CLE和ALE在合適的時間自動設定為低。

為了提供指令,處理器在資料匯流排上輸出想要的指令,並輸出地址0010h;為了輸出任意數量的地址週期,處理器僅僅要依次在處理器地址0020h之 後輸出想要的NAND地址。注意,許多處理器能在處理器的寫訊號周圍指定若干時序引數,這對於建立合適的時序是至關重要的。利用該技術,你不必採用任何粘 接邏輯,就可以直接從處理器存取指令、地址和資料。

多級單元

多級單元(MLC)的每一個單元儲存兩位,而傳統的SLC僅僅能儲存一位。MLC技術有顯著的密度優越性,然而,與SLC相比(下表),其速度或可靠性稍遜。因此,SLC被用於大多數媒體卡和無線應用,而MLC器件通常被用於消費電子和其它低成本產品。

如上所述,NAND需要ECC以確保資料完整性。NAND快閃記憶體的每一個頁面上都包括額外的儲存空間,它就是64個位元組的空閒區(每512位元組的扇區 有16位元組)。該區能儲存ECC程式碼及其它像磨損評級或邏輯到物理塊對映之類的資訊。ECC能在硬體或軟體中執行,但是,硬體執行有明顯的效能優勢。在編 程操作期間,ECC單元根據扇區中儲存的資料來計算誤碼校正程式碼。資料區的ECC程式碼然後被分別寫入到各自的空閒區。當資料被讀出時,ECC程式碼也被讀 出;運用反操作可以核查讀出的資料是否正確。

有可能採用ECC演算法來校正資料錯誤。能校正的錯誤的數量取決於所用演算法的校正強度。在硬體或軟體中包含ECC,就提供了強大的系統級解決方案。最 簡單的硬體實現方案是採用簡單的漢明(Simple Hamming)碼,但是,只能校正單一位錯誤。瑞德索羅門(Reed-Solomon)碼提供更為強大的糾錯,並被目前的控制器廣為採用。此外,BCH 碼由於比瑞德索羅門方法的效率高,應用也日益普及。

要用軟體執行NAND快閃記憶體的區塊管理。該軟體負責磨損評級或邏輯到物理對映。該軟體還提供ECC碼,如果處理器不包含ECC硬體的話。

程式設計或擦除操作之後,重要的是讀狀態暫存器,因為它確認是否成功地完成了程式設計或擦除操作。如果操作失敗,要把該區塊標記為損壞且不能再使用。以前已 編寫進去的資料要從損壞的區塊中搬出,轉移到新的(好的)儲存塊之中。2Gb NAND的規範規定,它可以最多有40個壞的區塊,這個數字在器件的生命週期(額定壽命為10萬次程式設計/擦除週期)內都適用。一些有壞塊的NAND器件能 夠出廠,主要就歸根於其裸片面積大。管理器件的軟體負責對映壞塊並由好的儲存塊取而代之。

利用工廠對這些區塊的標記,軟體通過掃描塊可以確定區塊的好壞。壞塊標記被固定在空閒區的第一個位置(列地址2048)。如果在0或1頁的列地址2048上的資料是"non-FF",那麼,該塊要標記為壞,並映射出系統。初始化軟體僅僅需要掃描所有區塊確定以確定哪個為壞,然後建一個壞塊表供將來 參考。


小心不要擦除壞塊標記,這一點很重要。工廠在寬溫和寬電壓範圍內測試了NAND;一些由工廠標記為壞的區塊可能在一定的溫度或電壓條件下仍然能工作,但是,將來可能會失效。如果壞塊資訊被擦除,就無法再恢復。

二、NAND FLASH讀寫定址方式

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+512kbyte的NAND器件為例:
因為,
     1 block=16kbyte,
     512Mbit=64Mbyte,
     Numberof(block)=1024
     1block=32page,
     1page=528byte=512byte(Main Area)+16byte(Spare Area)
使用者資料儲存在main area中。
     512byte需要9bit來表示,對於528byte系列的NAND,這512byte被分成1st half和2nd half,各自的訪問由所謂的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,共8192個block,則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步。

Nand Flash結構與讀寫分析及Nand Flash定址方式【ZZ

看vivi程式碼的head.S的時候,看到copy_myself的部分,尤其nand_read_ll函式,看不太明白,不瞭解nand flash原理,結合nand flash的datasheet和網上的文章,對那個函式就大概瞭解一點了

Nand Flash結構與讀寫分析

NAND Flash 的資料是以bit 的方式儲存在memory cell,一般來說,一個cell 中只能儲存一個bit。這些cell 以8 個或者16 個為單位,連成bit line,形成所謂的byte(x8)/word(x16),這就是NAND Device 的位寬。這些Line 會再組成Page,(Nand Flash 有多種結構,我使用的Nand Flash是K9F1208,下面內容針對三星的K9F1208U0M),每頁528Byte,每32 個page 形成一個Block, Sizeof(block)=16kByte 。1 block=16kbyte,512Mbit=64Mbyte,Numberof(block)=1024 1block=32page, 1page=528byte=512byte(Main Area)+16byte(Spare Area)


Nand flash 以頁為單位讀寫資料,而以塊為單位擦除資料。按照這樣的組織方式可以形成所謂的三類地址: --Block Address -- Page Address   --Column Address(即為頁內偏移地址)


對於NAND Flash 來講,地址和命令只能在I/O[7:0]上傳遞,資料寬度是8 位。


512byte需要9bit來表示,對於528byte系列的NAND,這512byte被分成1st half和2nd half,各自的訪問由地址指標命令來選擇,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 的使用方法完全相同。


norflash和nandflash的區別
norflash中可以執行程式,nandflash不可以
Nor flash按sector可擦除,按bit可讀寫。Nand Flash按Block可擦除,按Page可讀寫。
最主要是定址方式不同

*********************************************************************************************************************************

Nand Flash 定址方式

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+512kbyte的NAND器件為例:
因為,
     1 block=16kbyte,
     512Mbit=64Mbyte,
     Numberof(block)=1024
     1block=32page,
     1page=528byte=512byte(Main Area)+16byte(Spare Area)
使用者資料儲存在main area中。

     512byte需要9bit來表示,對於528byte系列的NAND,這512byte被分成1st half和2nd half,各自的訪問由所謂的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,共8192個block,則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步。

NAND Flash Architecture

Architecture
NAND Flash是由4096個Blocks所組成的,每個Block是由128個Pages所組成的,而每個Page是由4KBytes的User Data加上128Bytes的Spare Data所構成的,故每個Block的容量為528Kbytes,每個Page的容量為4224Bytes。其中,Spare Data主要是用來存放ECC(Error Correcting Code)、Bad Block Information和File System的資料。

Figure 1.Flash Memory Geometry 
NAND Flash的操作特點為:抹除(Erase)的最小單位是Block,而讀取(Read)和寫入(Write)則是以Page為單位。因NAND Flash的每個bit只能由1變為0,而不能從0變為1,所以對Flash做寫入時一定要將其對應的Block先抹除掉,才能做寫入的動作,也因此同樣 一個page只能夠寫入一次。


Constraints and Functionalities

Constraints

Sequential Page program
在一個Block裡,Page必須從LSB(least significant bit) Page依序寫到MSB(most significant bit) Page,隨意不照Page address來寫入是禁止的。另外,LSB是寫入的Pages中最小的位址,不一定是Page 0。

 
Figure 2.Sequential Page program [1]


Partial Page program
在NAND Flash中,存取資料的最小單位是Page。在SLC Flash中,若想修改Page中的Data時可以更改部分的Bit而不需要將整個Page抹除後才更改。例如Page中的Data為1001011101,若想將Data改成1001010001,只需將其中的2個Bit更改為0即可,不用抹除後寫入。但之後的MLC Flash,已經不允許此功能了。


Performance-Improving Commands

Copy Back Program
Copy Back Program可以快速地將1頁的資料複製(Copy)到另1個指定的頁中,也對於垃圾收集(Garbage Collection)非常的有用。例如當1頁裡的資料壞掉造成整個區塊(Block)為損壞區塊(Bad Block, or Worn-Out Block)時,Copy Back Program可以有效率地將所有有效頁(Valid Page)的資料複製到指定的區塊中。

Copy Back Program是將1整頁的資料(來源Page)讀取且複製到內部頁緩衝器(Internal Page Buffer)中,再將它寫到另1整頁中(目標Page)。因為它不像一般的讀取、寫入指令將資料存取到外部記憶體(Memory),而是將資料存在內部 頁緩衝器中,所以會比一般的讀取加上寫入少了將資料讀寫到外部記憶體的時間,執行上也更快且更有效率。


Figure 3.Copy Back Program [1]


Random data input/output
當對Page的資料做讀寫時,必須將1整頁的所有資料都存在於外部記憶體中,當外部的RAM不夠大時,無法一次存放整個頁的資料,故利用NAND Flash的Internal Page Buffer來存放整個頁的資料,並使用Random Data Input/Output就可以對頁中任意位址的資料做存取。

對1頁裡的資料做一般的讀寫時,資料都是Sequential的,但若想要隨意存取1頁裡的資料,如想要存取ECC的資料,便可使用Random data input/output跳至User Data的尾端去存取ECC的資料。


-Plane program
NAND Flash Vendor將Memory Array分成2個Plane,可以同時對2個不同Block addresses做Read/Write/Erase的操作。

 
Figure 4.2-Plane Program [6]


NAND-flash Management Issues

Address Translation
NAND Flash Memory的同1個page不能做重覆寫入的行為。再者,在寫入1個sector資料之前,必須要有抹除1個Block的資料才能做寫入的動作,但抹除1個Block的動作需要耗費相當多的時間,此舉造成了NAND Flash效能下降的最大原因。為了改善效能,最有效的方法就是減少Erase的次數,因此有了Mapping Table。

Mapping Table的管理分為Block level、Sector level以及改良的Hybrid level。

Block level的address mapping是指1個Logical Block對應到1個Physical Block,它的mapping table相對於sector-level的mapping table來的小,能夠節省mapping table所佔RAM的使用量。但當Logical Block的個數少於Physical Block個數時,會發生Logical Block時常被overwrite的狀況,選定要overwrite的Logical block和它mapping的Physical Block都要將資料更新到新的Physical Block上,且做erase-before-write的動作,而造成效能的下降,此外轉換單位大,每次寫入的單位也大,因此會帶來額外的資料寫入成 本。

而Sector-Level的address mapping是1個Logical Sector可以對應到任1個Physical Block裡的Sector,雖然這種mapping的方式彈性佳,可以減少因轉換單位大而帶來額外的資料寫入成本,但是mapping table的Size過大,例如1GB的Flash,1個sector的大小為512byte的話,RAM就要維護二百萬筆的sector資訊。

 
Figure 5. 資料區塊,紀錄區塊,以及備用區塊的使用。

(a)完整的資料區塊(b)資料依序寫入紀錄區塊的可寫頁中(c)區塊鏈的Merge

改良的Hybrid level,擷取Block level和Sector level的優點,採用Block level的方式,再加上有限數量的Block做為Sector level的mapping,除了讓mapping table的size限制住不至於龐大,也減少了erase-before-write的動作。Hybrid level中,將Physical Block取名為資料區塊(Data Block),因為資料不能直接更新於資料區塊裡,我們找了一段可寫的Block來紀錄更新的資料,並將它取名為紀錄區塊(Log Block)。經過一段時間的寫入,一個LBA(Logical Block Address)對應會對應一個資料區塊,而此資料區塊會跟著數個紀錄區塊,整個形成一個區塊鏈(Block Chain),如圖5(b)所示。

 
Figure 6.Hybrid Level mapping table [7]

Hybrid Level在做write的時候,在寫第1、2筆資料時(sector 4,5),會由block level的mapping table找出Data Block 10,因為對應sector裡內容是空的,因此就直接寫入Data Block 10裡。而寫第3筆資料時(sector 4),由Block level的mapping table找到Data Block 10,但裡面已有寫入的資料,故改由sector level的mapping table找尋空的Log Block,寫入第3筆資料。在寫第4筆資料時(sector 4),因為sector level的mapping table裡已有mapped的Log Block,故將第4筆資料依序寫入對映的Log Block裡。

而在讀取時,會先由Sector level的mapping table裡,找出最新的資料,而Log Block裡沒有的資料,則由Block Level mapping table裡找到的Data Block裡。


Garbage Collection
主要是用於將不必要存在且浪費空間的Block做回收,來增加可用的Block數。當需要新 的Log Block時,會從已經使用的Log Block裡選取符合回收條件的Block來做Garbage Collection,如free sector低於threshold值。

被選定要回收的Log Block,會和它的Data Block做merge的動作,意即選取新的Data Block,將Log Block中sector資料copy到此新的Data Block中,再將原先Data Block中剩餘的sector資料複製到此新的Data Block中。

更新block-level table對應到新的Data Block,並將sector-level table裡將剛才回收的Log Block移除。原先的Log Block和Data Block做抹除的動作,即完成Garbage Collection了。

例如Figure 4中,要將Log block(pbn=20)做回收時,會將此log block中最新的資料(sector 4)複製到新的Data Block中(假設為pbn=12),再將它的Data block(pbn=10)中,其餘的資料(sector 5)複製到新的Data Block(pbn=12)中。並將block level table中對應到pbn=20的資料改為對應到pbn=12,即新的data block,再將sector level table中pbn=20(回收的log block)這筆資料刪除。最後將pbn=20,pbn=10舊的block做抹除的動作即可。

Merge在一種特殊情況下,可以做switch的動作,例如像Figure 4中,Log Block(pbn=30)裡是照sector的順序寫入,因此它的Data Block(pbn=11)裡的資料都是不需要使用的舊資料,要做Garbage Collection,只需要將Log Block和Data Block對調即可,即block-level table裡對應到pbn=11這筆資料改為對應到pbn=30,而sector-level table裡對應到pbn=30這筆刪除,然後將舊的Data Block(pbn=11)抹除就達到Garbage Collection了。


Figure 7.Garbage Collection Operation [3]

當在做Garbage Collection時,會希望用最少的cleaning work來獲得最多的free space,因此會選擇最多garbage的segment來做回收。另外,將資料的型態分為靜態和動態的資料。其中,Read-only data屬於靜態資料,即一旦創造就不會去修改它,而動態資料是會被修改的。動態資料依其資料修改頻率分為cold data(較少修改的資料)和hot data(修改頻繁的資料)。

依不同的資料型態,做資料搬移時的方式也分為三種:


Read-only Data mix with dynamic data
當要被回收的segment中有read-only data時,會先將所有的read-only data搬到新的segment裡。若此新的segment又會被回收時,之前搬移過的read-only data仍然會再被搬移一次。另外,當一個segment中的資料都為read-only data時,則此segment永遠不會被回收的。

 
Figure 8.Repeatedly migrating read-only data when they are mixed with dynamic data [9]


Cold data mix with hot data
當要被回收的segment中有cold data和hot data時,因cold data更改的頻率較少,在cleaning的期間cold data有較高的可能性為valid的,因此會將cold data搬移到新的segment裡。

 
Figure 9.Migrating cold data when they are mixed with hot data [9]


Data have high locality of reference
當要被回收segment中的data是有高度被參考性的,這些hot data在cleaning的過程中仍可能是valid,但在被搬移到新的segment時,hot data又被更新一次而成為garbage,這類的搬移即稱為useless migration。


Figure 10.Useless migration when hot data are updated soon after being migrated [9]


Wear-Leveling
當在使用Flash時,常會對某個檔案做修改的動作,當此時檔案變動而要用到更多的Page且 Flash中仍有空的Block時,會將空的 Block配置給此檔案來使用,若Flash中已經沒有空的Block時,則會執行Garbage Collection來清出空的Block以供使用。在挑選空的Block或執行Garbage Collection清出空的Block時,可能會造成部分的Block時常被挑選,這些Block可能因為被過度使用而造成損毀。為了避免這種情況發 生,會使用Wear-Leveling,讓大部分Block的存取次數平均,而不會常常挑選到某些固定的Block上,造成Block的過度存取而損毀。

再者,NAND Flash抹除和寫入的reliability有使用的次數(100,000次),使用wear-leveling可以紀錄並平均每個block被使用的次數。

Wear-Leveling有兩種方式來實現,一種是在FileSystem和NAND Flash中間的FTL(Flash Translation Layer)裡實現的。FTL可以讓上層的OS透過FTL以disk的方式去讀寫下層的NAND Flash,另外也提供了virtual address和physical address的轉換。

 
Figure 11. Wear Leveling in the FTL [4]

另一種的實現方法為Wear Leveling直接在FileSystem裡實現,OS直接透過HAL和NAND Flash溝通。

 
Figure 12.Wear Leveling in the File System [4]


Flow Chart

Read
 
Figure 13 Read Operation Flow Chart


Erase
 
Figure 14 Erase Operation Flow Chart


Write
 
Figure 15 Write Operation Flow Chart


Timing/Power

Timing

Read Operation
 
BandWidth:39.82MB/s


Write Operation
 
BandWidth:4.66MB/s~1.36MB/s


Erase Operation
 

Power
P(typ)=3.3V*15mA=49.5mW 
P(max)=3.6V*30mA=108mW


Read Operation
E(typ)=49.5mW*(195+180+4224*25+100)ns=49.5mW*106075ns

=

 
J

E(max)=108mW*(195+180+4224*25+100)ns=108mW*106075ns

=

 
J


Write Operation
E(typ)=49.5mW*(295+4224*25+100+

 
+200)ns

=49.5mW*906195ns

=

 
J

      E(max)=108mW*(295+4224*25+100+ 
 
+200)ns 
 

=108mW*3106195ns

=

 
J


Erase Operation
E(typ)=49.5mW*(245+

 
+200)ns=49.5mW*1500445ns

=

 
J

E(max)=108mW*(245+

 
+200)ns=108mW*10000445ns

=

 
J


Reference
Samsung Electronics, "K9GAG08UXM Specification" 
Alex Kuo, "Application Note: Partial Page Program MirrorBit ORNAND with NAND interface", Spansion 
STMicroelectronics, "AN1821 Garbage Collection in Single Level Cell NAND Flash memories" 
STMicroelectronics, "AN1822 Wear Leveling in Single Level Cell NAND Flash memories" 
STMicroelectronics, "AN1728 How to use the Copy Back feature of ST Small Page NAND Flash memories" 
Amber Huffman, ONFI Technical Chair, "Flash Performance Enhancements through ONFI", Intel Corporation 
S.-W. Lee, D.-J. Park, T.-S. Chung, D.-H. Lee, S.-W. Park, H.-J. Song, "A Log Buffer-Based Flash Translation Layer Using Fully-Associative Sector Translation", ACM Transactions on Embedded Computing Systems, Vol.6,No.3,Article 18,Publication date: July 2007 
STMicroelectronics, "AN1820 How to use the FTL and HAL Software Modules to Manage Data in Single Level Cell NAND Flash Memories" 
Mei-Ling Chiang, Paul C. H. Lee, Ruei-Chuan Chang, "Cleaning Policies in Mobile Computers Using Flash Memory", Journal of Systems and Software, v.48 n.3, p.213-231, Nov. 1, 1999

的NAND Flash能達到200MB/s的讀取速度

      今天看到新聞Intel, Micron claim world’s fastest NAND flash,就直接到Micron的網站上瀏覽了一下。Micron的新產品分類為High Speed NAND Flash Products,用“High Speed”與原有NAND產品系列區分(估計ONFI 3.0相容的產品出來後,還要加上“Ultra”,才能再分出一個類別來)。 riple  
      Micron的High Speed系列目前按照容量分為8Gb、16Gb、32Gb三種,按照介面個數分為單埠(8Gb)和雙埠(16、32Gb)兩種。在Micron的網站上還看不到詳細的datasheet,只能看到一個Product BriefFlyer。 riple  
      通過Product Brief可以得到8Gb晶片的如下資訊:採用了50nm而不是72nm工藝生產;是SLC而不是MLC結構;BGA封裝取代了TSOP封 裝;4096Byte/Page,128Page/Block,512Block x 1/Plane,4Planes;I/O分為非同步和同步(DDR)兩種模式;速度最高的同步傳輸模式,讀寫I/O時間都是6ns/Toggle;讀 Array 30us/Page,寫Array 160us/Page,擦Array 3ms/Block。 riple 
      從上面的資訊可以看出,High Speed特性要歸功於6ns/Toggle的I/O時間,對於8bit的介面來說,相當於166MB/s的傳輸速度。 riple 
      但是,NAND Flash的訪問速度不僅僅取決於I/O速度,還和Array傳輸時間、晶片內部緩衝結構和Plane數量有關。 riple

〇、NAND Flash訪問時間分析 riple

      訪問操作 =  命令輸入 + I/O操作 + Array傳輸操作,第一項的操作時間所佔比例很小,在效能估算中可以忽略。 riple 
      訪問時間 = I/O時間 + Array傳輸時間,在上一代NAND Flash中,第一項佔的比例最大,是第二項的4-5倍。 riple

      Micron主要採用瞭如下的4種技術縮短了平均的訪問時間。其中第一種技術是第一次在NAND Flash上應用,也是這次“大提速”的核心技術。正是這項技術的採用,使上述公式中的第一項縮小到上一代的1/5,才使得其他3項技術發揮了最佳的效果。 riple

一、介面傳輸模式對I/O速度的影響 riple

      採用ONFi 2.0提出的DDR介面,提高了I/O資料傳輸速率:源同步(縮小了建立保持時間要求)、雙邊沿觸發(加倍了資料傳輸速率)。 riple

二、Block結構和生產工藝對Array傳輸速度的影響 riple

      與上一代NAND Flash相比,Page容量加倍,在Array傳輸時間基本不變的情況下,等效地加倍了Array傳輸速度。 riple 
      72nm到50nm的工藝改進,縮小了芯片面積,提高了晶片速度(讀Array速度提升不明顯,寫Array速度提升了1倍),降低了功耗。 riple

三、緩衝與快取對速度的影響 riple

      Micron的NAND Flash的一大特點是:每一個Plane對應一個Page大小的緩衝(data register)和一個Page大小的快取(cache register)。資料寫入的順序是:I/O -> cache register -> data register -> Plane,資料讀出的順序剛好相反。緩衝(data register)與快取(cache register)之間的資料傳輸速度很快,data register可以把I/O操作和Array操作分隔開,形成I/O操作和Array操作的“兩級流水線”。這種結構與上一代NAND Flash一樣。(其實,4個Plane對應4個data register和1個cache register即可) riple

四、多Plane操作對速度的影響 riple

      4個Plane對應4組緩衝與快取,每一組可以分別操作。2個Plane交替操作,可以實現“乒乓操作”,達到2倍的Array訪問頻寬。4個Plane 交替操作,可以實現“乒乒乓乓操作”,達到4倍的Array訪問頻寬。在上一代的NAND Flash晶片中,採用2Plane結構是比較常見的。 riple

五、200MB/s的讀速度和100MB/s的寫速度是怎樣得到的 riple

      讀I/O時間:1Toggle/Byte x 6ns/Toggle x 4096Byte/Page = 24.6us/Page,與讀Array時間30us/Page近似。在採用cache模式的讀操作下,兩級流水線的速度取決於“I/O速度”和“讀 Array速度”中較慢的一個,不採用多Plane操作,平均速度只能達到讀Array速度,即4096Byte/30us =136MB/s;在2Plane模式下,讀Array時間縮短至15us/Page,小於讀I/O時間24.6us/Page,兩級流水線的速度取決於 “I/O速度”,平均速度達到I/O速度4096Byte/24.6us = 166MB/s,這與宣傳中200MB/s的速度還有些差距。我們採用的I/O週期值是資料手冊給出的,晶片實際能夠執行的I/O速度往往要略高一些:在 上面的分析中,只要I/O週期縮短至5ns/Toggle,“超頻”後的讀I/O時間就縮短至20us/Page,大於讀Array時間15us /Page,兩級流水線的速度仍然取決於“I/O速度”,這樣一來平均讀取速度就能達到4096Byte/20us =200MB/s。(從上面的分析看,如果不對I/O速度進行“超頻”,平均讀取速度是達不到200MB/s的,看來宣傳還是略有誇張的) riple 
      寫I/O時間:1Toggle/Byte x 6ns/Toggle x 4096Byte/Page = 24.6us/Page,與寫Array時間160us/Page相差很多,單獨採用cache模式不夠,還要採用4Plane的“乒乒乓乓操作”,縮短 寫Array時間,儘量均衡流水線的兩級操作時間。4Plane模式平均Array寫操作時間為一次Array寫操作時間的1/4,40us/Page。 所以在cache模式配合4Plane模式的寫操作下,流水線的速度等於流水線兩級中最慢的“平均Array寫速度”,可以近似 為:4096Byte/40us = 102MB/s。 riple

      從上面的分析可以看出,I/O速度限制了讀取速度的最大值,在ONFi 3.0預計的400MB/s的I/O速度實現後,NAND Flash的平均讀取速度也能夠達到400MB/s(這回就要採用4Plane模式了);Array傳輸速度限制了寫入速度的最大值,如果不對晶片的內部 結構和生產工藝進行改進的話,NAND Flash的平均寫入速度很難進一步提高。 riple

nand flash 總結

flash 2009-12-09 13:21:37 閱讀118 評論0   字號:大中小 訂閱

NAND Flash產品可以分為三大架構,分別是Single Level Cell;SLC,包括三星電子、Hynix、Micron以及東芝都是此技術使用者,第二種則是Multi Level Cell;MLC,目前有東芝、Renesas使用,不過三星電子將在2005第四季推出相關產品,最後則是Infineon與Saifun Semiconductors合資利用NROM技術所共同開發的Multi Bit Cell;MBC。

MLC是Intel在1997年9月最先開發成功的,其作用是將兩個位的資訊存入一個 Floating Gate(NADA Flash儲存單元中存放電荷的部分),然後利用不同Level的電荷,透過記憶體儲存格的電壓控制精準讀寫,假設以4種電壓控制、1個電晶體可存取2 bits 的資料,若是控制8種電壓就可以存取3 bits 的資料,使Flash 的容量大幅提升,類似Rambus的QRSL技術,通過精確控制浮動柵上的電荷數量,使其呈現出4種不同的儲存狀態,每種狀態代表兩個二進位制數值(從00 到11)。

當然不光是NOR型NAND Flash在使用,東芝在2003年2月推出第一款MLC型的NAND Flash,並接續2004年4月推出採用MLC技術的4Gbit與8Gbit NAND Flash,顯然這對於本來就以容量見長的NAND Flash更是如虎添翼。根據Semiconductor Insights研究,東芝利用90nm MLC技術所開發出來的4Gb,其die面積為144 mm2。

至於SLC技術與EEPROM相同,但在Floating gate與Source gate之中的氧化薄膜更薄,其資料的寫入是透過對浮置閘極的電荷加電壓,然後可以透過源極,即可將所儲存的電荷消除,藉由這樣的方式,便可儲存1個個信 息位,這種技術的單一位細胞方式能提供快速的程式程式設計與讀取,不過此技術受限於Silicon efficiency的問題,必須要藉由較先進的流程強化技術Process enhancements,才能向上提升SLC製程技術。

將上述所言,做一個比較,SLC架構是0和1兩個充電值,而MLC架構可以一次儲存4個以上的充電值,因此MLC架構可以有比較好的儲存密度,再加上可利用比較老舊的生產裝置來提高產品的容量,而無須額外投資生產裝置,可以享有成本與良率的優勢。

不過MLC架構有著讓使用者很難容忍的缺點,就是使用壽命較短,其次MLC架構只能承受約1 萬次的存取,遠低於SLC架構的10萬次。至於存取速度,SLC架構比MLC架構要快速三倍以上,加上MLC架構對於電力的消耗較多,因此使用者若是考慮 長久使用、安全儲存資料以及高速的存取速度等要求,恐怕會改採用SLC架構。

其實在NAND Flash市場中,若以理論資料比較,Renesas的AG-AND技術或是Infineon的MBC技術,其實並不遜於三星電子、東芝或是其它業者,甚 至於有過之而無不及,不過這兩家業者因為產能、技術開發等問題造成延遲擴大市場佔有率時機,這也印證商場中的一句話,任何東西都必須要能夠適時適地推出, 否則只是將市場拱手讓給對方。

Nand Flash結構與讀寫分析

NAND Flash 的資料是以bit 的方式儲存在memory cell,一般來說,一個cell 中只能儲存一個bit。這些cell 以8 個或者16 個為單位,連成bit line,形成所謂的byte(x8)/word(x16),這就是NAND Device 的位寬。這些Line 會再組成Page,(Nand Flash 有多種結構,我使用的Nand Flash是K9F1208,下面內容針對三星的K9F1208U0M),每頁528Byte,每32 個page 形成一個Block, Sizeof(block)=16kByte 。1 block=16kbyte,512Mbit=64Mbyte,Numberof(block)=1024 1block=32page, 1page=528byte=512byte(Main Area)+16byte(Spare Area)

Nand flash 以頁為單位讀寫資料,而以塊為單位擦除資料。按照這樣的組織方式可以形成所謂的三類地址 --Block Address -- Page Address   --Column Address(即為頁內偏移地址)

對於NAND Flash 來講,地址和命令只能在I/O[7:0]上傳遞,資料寬度是8 位。

512byte需要9bit來表示,對於528byte系列的NAND,這512byte被 分成1st half和2nd half,各自的訪問由地址指標命令來選擇,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 的使用方法完全相同。

norflash和nandflash的區別

norflash中可以執行程式,nandflash不可以

Nor flash按sector可擦除,按bit可讀寫。Nand Flash按Block可擦除,按Page可讀寫。

最主要是定址方式不同

*********************************************************************************************************************************

Nand Flash 定址方式

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+512kbyte的NAND器件為例:

因為,

     1 block=16kbyte,

     512Mbit=64Mbyte,

     Numberof(block)=1024

     1block=32page,

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

使用者資料儲存在main area中。

     512byte需要9bit來表示,對於528byte系列的NAND,這512byte被分成1st half和2nd half,各自的訪問由所謂的pointer operation命令來選擇,也就是選擇了bit8的高低。因此A8就是halfpage pointer,A[7:0]就是所謂的column address。(頁內偏移地址4.2:james)

     32個page需要5bit來表示,佔用A[13:9],即該page在塊內的相對地址。Block的地址是由A14以上的bit來表示,例如512Mb 的NAND,共4096block,因此,需要12個bit來表示,即A[25:14],如果是1Gbit的528byte/page的NAND Flash,共8192個block,則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。