對于許多消費類(lèi)音視頻產(chǎn)品而言,NAND閃存是一種比硬盤(pán)驅動(dòng)器更好的存儲方案,這在不超過(guò)4GB的低容量應用中表現得猶為明顯。隨著(zhù)人們持續追求功耗更低、重量更輕和性能更佳的產(chǎn)品,NAND正被證明極具吸引力。 NAND閃存陣列分為一系列128kB的區塊(block),這些區塊是NAND器件中最小的可擦除實(shí)體。擦除一個(gè)區塊就是把所有的位(bit)設置為“1”(而所有字節(byte)設置為 FFh)。有必要通過(guò)編程,將已擦除的位從“1”變?yōu)椤?”。最小的編程實(shí)體是字節(byte)。一些NOR閃存能同時(shí)執行讀寫(xiě)操作(見(jiàn)下圖1)。雖然 NAND不能同時(shí)執行讀寫(xiě)操作,它可以采用稱(chēng)為“映射(shadowing)”的方法,在系統級實(shí)現這一點(diǎn)。這種方法在個(gè)人電腦上已經(jīng)沿用多年,即將 BIOS從速率較低的ROM加載到速率較高的RAM上。 NAND的效率較高,是因為NAND串中沒(méi)有金屬觸點(diǎn)。NAND閃存單元的大小比NOR要小(4F2:10F2)的原因,是NOR的每一個(gè)單元都需要獨立的金屬觸點(diǎn)。NAND與硬盤(pán)驅動(dòng)器類(lèi)似,基于扇區(頁(yè)),適合于存儲連續的數據,如圖片、音頻或個(gè)人電腦數據。雖然通過(guò)把數據映射到RAM上,能在系統級實(shí)現隨機存取,但是,這樣做需要額外的RAM存儲空間。此外,跟硬盤(pán)一樣,NAND器件存在壞的扇區,需要糾錯碼(ECC)來(lái)維持數據的完整性。 存儲單元面積越小,裸片的面積也就越小。在這種情況下,NAND就能夠為當今的低成本消費市場(chǎng)提供存儲容量更大的閃存產(chǎn)品。NAND閃存用于幾乎所有可擦除的存儲卡。NAND的復用接口為所有最新的器件和密度都提供了一種相似的引腳輸出。這種引腳輸出使得設計工程師無(wú)須改變電路板的硬件設計,就能從更小的密度移植到更大密度的設計上。 NAND 與NOR閃存比較 NAND閃存的優(yōu)點(diǎn)在于寫(xiě)(編程)和擦除操作的速率快,而NOR的優(yōu)點(diǎn)是具有隨機存取和對字節執行寫(xiě)(編程)操作的能力(見(jiàn)下圖圖2)。NOR的隨機存取能力支持直接代碼執行(XiP),而這是嵌入式應用經(jīng)常需要的一個(gè)功能。NAND的缺點(diǎn)是隨機存取的速率慢,NOR的缺點(diǎn)是受到讀和擦除速度慢的性能制約。NAND較適合于存儲文件。如今,越來(lái)越多的處理器具備直接NAND接口,并能直接從 NAND(沒(méi)有NOR)導入數據。 NAND的真正好處是編程速度快、擦除時(shí)間短。NAND支持速率超過(guò)5Mbps的持續寫(xiě)操作,其區塊擦除時(shí)間短至2ms,而NOR是750ms。顯然,NAND在某些方面具有絕對優(yōu)勢。然而,它不太適合于直接隨機存取。 對于16位的器件,NOR閃存大約需要41個(gè)I/O引腳;相對而言,NAND器件僅需24個(gè)引腳。NAND器件能夠復用指令、地址和數據總線(xiàn),從而節省了引腳數量。復用接口的一項好處,就在于能夠利用同樣的硬件設計和電路板,支持較大的NAND器件。由于普通的TSOP-1封裝已經(jīng)沿用多年,該功能讓客戶(hù)能夠把較高密度的NAND器件移植到相同的電路板上。NAND器件的另外一個(gè)好處顯然是其封裝選項:NAND提供一種厚膜的2Gb裸片或能夠支持最多四顆堆疊裸片,容許在相同的TSOP-1封裝中堆疊一個(gè)8Gb的器件。這就使得一種封裝和接口能夠在將來(lái)支持較高的密度。 ![]() 圖1 不同閃存單元的對比 ![]() 圖2 NOR閃存的隨機存取時(shí)間為0.12ms,而NAND閃存的第一字節隨機存取速度要慢得多 NAND基本操作 以2Gb NAND器件為例,它由2048個(gè)區塊組成,每個(gè)區塊有6?個(gè)頁(yè)(見(jiàn)圖3)。 ![]() 圖3 2GB NAND閃存包含2,048個(gè)區塊 每一個(gè)頁(yè)均包含一個(gè)2048字節的數據區和6?字節的空閑區,總共包含 2,112字節?臻e區通常被用于ECC、耗損均衡(wear leveling)和其它軟件開(kāi)銷(xiāo)功能,盡管它在物理上與其它頁(yè)并沒(méi)有區別。NAND器件具有8或16位接口。通過(guò)8或16位寬的雙向數據總線(xiàn),主數據被連接到NAND存儲器。在16位模式,指令和地址僅僅利用低8位,而高8位僅僅在數據傳輸周期使用。 擦除區塊所需時(shí)間約為2ms。一旦數據被載入寄存器,對一個(gè)頁(yè)的編程大約要300μs。讀一個(gè)頁(yè)面需要大約25μs,其中涉及到存儲陣列訪(fǎng)問(wèn)頁(yè),并將頁(yè)載入 16,8?6位寄存器中。 除了I/O總線(xiàn),NAND接口由6個(gè)主要控制信號構成: 1.芯片啟動(dòng) (Chip Enable, CE#):如果沒(méi)有檢測到CE信號,那么,NAND器件就保持待機模式,不對任何控制信號作出響應。 2. 寫(xiě)使能(Write Enable, WE#): WE#負責將數據、地址或指令寫(xiě)入NAND之中。 3.讀使能(Read Enable, RE#): RE#允許輸出數據緩沖器。 4.指令鎖存使能(Command Latch Enable, CLE): 當CLE為高時(shí),在WE#信號的上升沿,指令被鎖存到NAND指令寄存器中。 5.地址鎖存使能(Address Latch Enable, ALE):當ALE為高時(shí),在WE#信號的上升沿,地址被鎖存到NAND地址寄存器中。 6. 就緒/忙(Ready/Busy, R/B#):如果NAND器件忙,R/B#信號將變低。該信號是漏極開(kāi)路,需要采用上拉電阻。 數據每次進(jìn)/出NAND寄存器都是通過(guò)16位或8位接口。當進(jìn)行編程操作的時(shí)候,待編程的數據進(jìn)入數據寄存器,處于在WE#信號的上升沿。在寄存器內隨機存取或移動(dòng)數據,要采用專(zhuān)用指令以便于隨機存取。 數據寄存器輸出數據的方式與利用RE#信號的方式類(lèi)似,負責輸出現有的數據,并增加到下一個(gè)地址。WE#和RE#時(shí)鐘運行速度極快,達到30ns的水準。當RE#或CE#不為低的時(shí)候,輸出緩沖器將為三態(tài)。這種CE#和RE#的組合使能輸出緩沖器,容許NAND閃存與NOR、SRAM或DRAM等其它類(lèi)型存儲器共享數據總線(xiàn)。該功能有時(shí)被稱(chēng)為“無(wú)需介意芯片啟動(dòng)(chip enable don't care)”。這種方案的初衷是適應較老的NAND器件,它們要求CE#在整個(gè)周期為低(譯注:根據上下文改寫(xiě))。 ![]() 圖4 輸入寄存器接收到頁(yè)編程(80h)指令時(shí),內部就會(huì )全部重置為1s,使得用戶(hù)可以只輸入他想以0位編程的數據字節 ![]() 圖5 帶有隨機數據輸入的編程指令。圖中加亮的扇區顯示,該指令只需要后面跟隨著(zhù)數據的2個(gè)字節的地址 所有 NAND操作開(kāi)始時(shí),都提供一個(gè)指令周期(表1)。 ![]() 當輸出一串WE#時(shí)鐘時(shí),通過(guò)在I/O位7:0上設置指令、驅動(dòng)CE#變低且CLE變高,就可以實(shí)現一個(gè)指令周期。注意:在WE#信號的上升沿上,指令、地址或數據被鎖存到NAND器件之中。如表1所示,大多數指令在第二個(gè)指令周期之后要占用若干地址周期。注意:復位或讀狀態(tài)指令例外,如果器件忙,就不應該發(fā)送新的指令。 以2Gb NAND器件的尋址方案為例,第一和第二地址周期指定列地址,該列地址指定頁(yè)內的起始字節(表2)。 ![]() 注意:因為最后一列的位置是2112,該最后位置的地址就是08h(在第二字節中)和3Fh(在第一字節中)。PA5:0指定區塊內的頁(yè)地址,BA16:6 指定區塊的地址。雖然大多編程和讀操作需要完整的5字節地址,在頁(yè)內隨機存取數據的操作僅僅用到第一和第二字節。塊擦除操作僅僅需要三個(gè)最高字節(第三、第四和第五字節)來(lái)選擇區塊。 ![]() 圖6 典型的存儲方法 ![]() 圖7 頁(yè)讀緩存模式 總體而言,NAND的基本操作包括:復位(Reset, FFh)操作、讀ID(Read ID, 00h)操作、讀狀態(tài)(Read Status, 70h)操作、編程(Program)操作、隨機數據輸入(Random data input, 85h)操作和讀(Read)操作等。 將NAND連接到處理器 選擇內置NAND接口的處理器或控制器的好處很多。如果沒(méi)有這個(gè)選擇,有可能在NAND和幾乎任何處理器之間設計一個(gè)“無(wú)粘接邏輯(glueless)”接口。NAND和NOR閃存的主要區別是復用地址和數據總線(xiàn)。該總線(xiàn)被用于指定指令、地址或數據。CLE信號指定指令周期,而ALE信號指定地址周期。利用這兩個(gè)控制信號,有可能選擇指令、地址或數據周期。把ALE連接到處理器的第五地址位,而把CLE連接到處理器的第四地址位,就能簡(jiǎn)單地通過(guò)改變處理器輸出的地址,任意選擇指令、地址或數據。這容許CLE和ALE在合適的時(shí)間自動(dòng)設置為低。 為了提供指令,處理器在數據總線(xiàn)上輸出想要的指令,并輸出地址0010h;為了輸出任意數量的地址周期,處理器僅僅要依次在處理器地址0020h之后輸出想要的NAND地址。注意,許多處理器能在處理器的寫(xiě)信號周?chē)付ㄈ舾蓵r(shí)序參數,這對于建立合適的時(shí)序是至關(guān)重要的。利用該技術(shù),你不必采用任何粘接邏輯,就可以直接從處理器存取指令、地址和數據。 多層單元 多層單元(MLC)的每一個(gè)單元存儲兩位,而傳統的SLC僅僅能存儲一位。MLC技術(shù)有顯著(zhù)的密度優(yōu)越性,然而,與SLC相比(表3),其速度或可靠性稍遜。因此,SLC被用于大多數媒體卡和無(wú)線(xiàn)應用,而MLC器件通常被用于消費電子和其它低成本產(chǎn)品。 ![]() 如上所述,NAND需要ECC以確保數據完整性。NAND閃存的每一個(gè)頁(yè)面上都包括額外的存儲空間,它就是6?個(gè)字節的空閑區(每512字節的扇區有16字節)。該區能存儲ECC代碼及其它像磨損評級或邏輯到物理塊映射之類(lèi)的信息。ECC能在硬件或軟件中執行,但是,硬件執行有明顯的性能優(yōu)勢。在編程操作期間,ECC單元根據扇區中存儲的數據來(lái)計算誤碼校正代碼。數據區的ECC代碼然后被分別寫(xiě)入到各自的空閑區。當數據被讀出時(shí),ECC代碼也被讀出;運用反操作可以核查讀出的數據是否正確。 有可能采用ECC算法來(lái)校正數據錯誤。能校正的錯誤的數量取決于所用算法的校正強度。在硬件或軟件中包含ECC,就提供了強大的系統級解決方案。最簡(jiǎn)單的硬件實(shí)現方案是采用簡(jiǎn)單的漢明(Simple Hamming)碼,但是,只能校正單一位錯誤。瑞德索羅門(mén)(Reed-Solomon)碼提供更為強大的糾錯,并被目前的控制器廣為采用。此外,BCH 碼由于比瑞德索羅門(mén)方法的效率高,應用也日益普及。 要用軟件執行NAND閃存的區塊管理。該軟件負責磨損評級或邏輯到物理映射。該軟件還提供ECC碼,如果處理器不包含ECC硬件的話(huà)。 編程或擦除操作之后,重要的是讀狀態(tài)寄存器,因為它確認是否成功地完成了編程或擦除操作。如果操作失敗,要把該區塊標記為損壞且不能再使用。以前已編寫(xiě)進(jìn)去的數據要從損壞的區塊中搬出,轉移到新的(好的)存儲塊之中。2Gb NAND的規范規定,它可以最多有40個(gè)壞的區塊,這個(gè)數字在器件的生命周期(額定壽命為10萬(wàn)次編程/擦除周期)內都適用。一些有壞塊的NAND器件能夠出廠(chǎng),主要就歸根于其裸片面積大。管理器件的軟件負責映射壞塊并由好的存儲塊取而代之。 利用工廠(chǎng)對這些區塊的標記,軟件通過(guò)掃描塊可以確定區塊的好壞。壞塊標記被固定在空閑區的第一個(gè)位置(列地址2048)。如果在0或1頁(yè)的列地址2048上的數據是“non-FF”,那么,該塊要標記為壞,并映射出系統。初始化軟件僅僅需要掃描所有區塊確定以確定哪個(gè)為壞,然后建一個(gè)壞塊表供將來(lái)參考。 小心不要擦除壞塊標記,這一點(diǎn)很重要。工廠(chǎng)在寬溫和寬電壓范圍內測試了NAND;一些由工廠(chǎng)標記為壞的區塊可能在一定的溫度或電壓條件下仍然能工作,但是,將來(lái)可能會(huì )失效。如果壞塊信息被擦除,就無(wú)法再恢復。 作者:美光科技公司存儲器產(chǎn)品事業(yè)群首席應用工程師 Jim Cooke |