一、記憶體詳解
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步。