天天看點

NAND FLASHNAND Flash

NAND Flash

         以Micron公司的MT29F2G08為例介紹NAND Flash原理和使用。

1. 概述

        MT29F2G08使用一個高度複用的8-bit總線(I/O[7:0])來傳輸資料、位址、指令。5個指令腳(CLE、ALE、CE#、WE#)實作NAND指令總線接口規程。3個附加的腳用作: 控制硬體寫保護(WP#)、監視晶片狀态(R/B#),和發起上電自動讀特征(PRE-僅3V晶片支援)。注意, PRE功能不支援寬溫晶片。

        MT29F2G08内部有2048個可擦除的塊,每個塊分為64個可程式設計的頁,每個頁包含2112位元組(2048個位元組作為資料存儲區,64個備用位元組一般作為錯誤管理使用)。

每個2112個位元組的頁可以在300us内程式設計,每個塊(64x2112=132K)可以在2ms内被擦除。片上控制邏輯自動進行PROGRAM和ERASE操作。

        NAND的内部存儲陣列是以頁為基本機關進行存取的。讀的時候,一頁資料從内部存儲陣列copy到資料寄存器,之後從資料寄存器按位元組依次輸出。寫(程式設計)的時候,也是以頁為基本機關的:起始位址裝載到内部位址寄存器之後,資料被依次寫入到内部資料寄存器,在頁資料寫入之後,陣列程式設計過程啟動。

        為了增加程式設計的速度,晶片有一個CACHE寄存器。在CACHE程式設計模式,資料先寫入到CACHE寄存器,然後再寫入到資料寄存器,一旦資料copy進資料寄存器後,程式設計就開始。在資料寄存器被裝載及程式設計開始之後,CACHE寄存器變為空,可以繼續裝載下一個資料,這樣内部的程式設計和資料的裝載并行進行,提高了程式設計速度。

        内部資料搬移指令(INTERNAL DATA MOVE)也使用内部CAHCE寄存器,通常搬移資料需要很長時間,通過使用内部CACHE寄存器和資料寄存器,資料的搬移速度大大增加,且不需要使用外部記憶體。

2. 功能框圖

NAND FLASHNAND Flash

3. 管腳

名稱 類型 描述
ALE I 位址鎖存使能。ALE為高時,在WE#下降沿,位址資訊通過I/O[7:0]鎖存片内的位址寄存器。如果傳輸的不是位址資訊,ALE應該為低。
CE# I 片選。一旦器件進入PROGRAM或ERASE操作,CE#可以變無效。
CLE I 指令鎖存使能。CLE為高時,在WE#上升沿,指令通過I/O[7:0]鎖存到指令寄存器,當不傳輸指令時,CLE應該為低。
PRE I 上電讀使能。
RE# I 讀使能。
WE# I 寫使能。
WP# I 寫保護。當為低時候,所有的PROGRAM和ERASE都被禁止。
I/O[7:0] I/O 資料輸入/輸出。傳輸指令、資料、位址。僅在讀操作時,資料是輸出。
R/B#, R/B2 O 準備好/忙。集電極開路輸出。外部需要接上拉電阻,這個腳表示晶片正在進行PROGRAM或ERASE操作。在讀操作期間,表示資料正從陣列中傳輸到串行資料寄存器中,一旦這些操作完成,R/B#回到High-Z狀态。
Vcc 電源 電源
Vss

4. 尋址

NAND FLASHNAND Flash

Block位址和頁位址 = 實際的頁位址,希望通過這個圖,我們能了解塊、頁、塊位址,頁位址,列位址,備份空間,備份位址

NAND FLASHNAND Flash
Cycle I/O7 I/O6 I/O5 I/O4 I/O3 I/O2 I/O1 I/O0
1 CA7 CA6 CA5 CA4 CA3 CA2 CA1 CA0
2 LOW LOW LOW LOW CA11 CA10 CA9 CA8
3 RA19 RA18 RA17 RA16 RA15 RA14 RA13 RA12
4 RA27 RA26 RA25 RA24 RA23 RA22 RA21 RA20
5 LOW LOW LOW LOW LOW LOW LOW RA28

CAx:列位址;RAx=行位址

5. 總線操作

CLE ALE CE# WE# RE# WP# PRE# MODE
H L L 上升沿 H X X 讀模式 指令輸入
L H L 上升沿 H X X 位址輸入
H L L 上升沿 H H X 寫模式 指令輸入
L H L 上升沿 H H X 位址輸入
L L L 上升沿 H H X 資料輸入
L L L H 下降沿 X X 依次讀和資料輸出
L L L H H X X 在讀期間(忙)
X X X X X H X 在程式設計期間(忙)
X X X X X H X 在擦除期間(忙)
X X X X X L X 寫保護
X X H X X 0V/Vcc 0V/Vcc 待機

上電自動讀:在上電期間,PRE為VCC,3V VCC器件自動傳輸第一頁到資料寄存器,而無需要釋出一個指令或位址鎖存序列。在VCC達到大約2.5V的時候,内部電壓檢測器觸發上電自動讀功能。在第一頁資料copy到資料寄存器過程中,R/B#為低,當copy結束後,R/B#變高,在RE#脈沖的作用下第一頁資料可以依次輸出。

NAND FLASHNAND Flash

6. 指令表

操作 周期1 周期2 在忙期間有效
PAGE READ 0x00 0x30 NO
PAGE READ CACHE MODE START 0x31 - NO
PAGE READ CACHE MODE START LAST 0x3F - NO
READ for INTERNAL DATA MOVE 0x00 0x35 NO
RANDOM DATA READ 0x05 0xE0 NO
READ ID 0x90 - NO
READ STATUS 0x70 - NO
PROGRAM PAGE 0x80 0x10 NO
PROGRAM PAGE CACHE 0x80 0x15 NO
PROGRAM for INTERNAL DATA MOVE 0x85 0x10 NO
RANDOM DATA INPUT for PROGRAM 0x85 - NO
BLOCK ERASE 0x60 0xD0 NO
RESET 0xFF - YES

7. PAGE READ,0x00-0x30

NAND FLASHNAND Flash

5個位址周期,确定了讀出的起始位址,資料才RE#脈沖的作用下,從這個起始位址開始依次輸出,直到這一頁的結束。

8. RANDOM DATA READ,0x05-0xE0

随機資料讀,是為了使用者能夠設定新的列位址,增加資料讀出的靈活性,随即讀模式在頁讀(0x00-0x30序列)後使能。這個指令的釋出次數是不受限制的。但僅僅是目前頁資料的讀出。

NAND FLASHNAND Flash

9. PAGE READ CACHE MODE START,0x31;PAGE READ CACHE MODE START LAST,0x3F

釋出PAGE READ指令後,在R/B#變高後,在發送0x31指令,這時啟動将資料寄存器的内容傳給CACHE寄存器,然後就可以順序從CACHE裡讀第一個PAGE READ指令獲得資料,由于這是資料寄存器是沒有用的,是以,晶片自動啟動讀下一頁的PAGE READ指令,将下一頁讀到資料寄存器,可以看出這麼做提高的讀出的速度,除了第一個PAGE READ指令外,其他PAGE READ指令都是背景自動進行的。再最後一次使用0x3F指令,以便禁止晶片再次自動釋出PAGE READ指令。

NAND FLASHNAND Flash

10.            READ ID,0x90

讀出廠家的晶片辨別。

NAND FLASHNAND Flash

11.            READ STATUS,0x70

NAND FLASHNAND Flash

讀出晶片的8bit狀态。可以通過RE#脈沖,反複讀。

12.            程式設計操作

PROGRAM PAGE 0x80-0x10:

Micron NAND FLASH僅支援頁的程式設計,在一個塊以内,頁必須從一個塊的頁最低位到這個塊的頁的最高位連續程式設計,禁止随機頁位址的程式設計。

晶片也支援頁的部分程式設計操作,這意味着任何單個位在需要一個擦除之前僅可以被程式設計一次,然而,這種頁能被劃分成在需要一個擦除之前允許最大8個程式設計操作。

SERIAL DATA INPUT 0x80:

PAGE PROGRAM操作要求加載SERAIL DATA INPUT(0x80)指令進入指令寄存器,随着5個位址周期之後,串行資料通過連續的WE#周期加載到值得的起始位址,PROGRAM(0x10)指令在資料輸入完成之後被寫入,内部寫狀态周期自動執行合适的程式設計算法,并控制所有必要的定時程式設計和比較操作。寫比較僅僅檢測“1”是否被成功地程式設計為“0”了。

R/B#在陣列程式設計期間(tPROG)為低,在程式設計操作期間,僅READ STATUS和RESET指令有效,狀态寄存器的Bit6反映R/B#的狀态,當晶片準備好時,讀Bit0的狀态确定程式設計操作是否成功或失敗,指令寄存器在新的有效指令寫入之前,一直停留在讀狀态寄存器模式。

NAND FLASHNAND Flash

RANDOM DATA INPUT 0x85:

在發起資料集輸入之後,可以通過RANDOM DATA INPUT指令向新的列位址寫入資料。在釋出0x10指令之前,可以對同一頁多次使用0x85指令。

NAND FLASHNAND Flash

PROGRAM PAGE CACHE MODE 0x80-0x15:

CACHE程式設計實際上是标準的頁程式設計指令的帶緩沖程式設計模式,程式設計開始是釋出SERIAL DATA INPUT(0x80)指令,随後是5個位址周期,以及頁的全部或部分資料,資料copy到CACHE寄存器,然後釋出CACHE WRITE(0x15)指令。資料在WE#的上升沿鎖存到資料寄存器,在這個鎖存期間,R/B#為低,鎖存結束之後,R/B#變高,程式設計開始。

當R/B#變高之後,新的資料可以通過釋出另一個CACHE PROGRAM指令來寫入,R/B#保持低的時候由實際的程式設計時間來控制,第一次等于資料從CACHE寄存器寫入到資料寄存器需要的時間,之後,隻有資料寄存器的内容被程式設計進陣列之後,CACHE寄存器才能鎖存到資料寄存器,所有,以後的R/B#為低的實際應該更長一些。

狀态寄存器中反映CACHE R/B#的Bit6可以通過READ STATUS指令讀出,以便确定什麼時候,CACHE寄存器準備好接受新的資料了。

狀态寄存器中反映R/B#的Bit5可以被查詢,以确定什麼時候目前程式設計周期的實際陣列程式設計完成。

如果僅使用R/B#來确定程式設計是否完成,那麼程式設計式列的最後一頁必須使用PROGRAM PAGE(0x10)來替代CACHE PROGRAM(0x15)。如果CACHE PROGRAM指令每次都使用,狀态寄存器的Bit5必須用來确定程式設計是否結束。

當狀态寄存器的bit6為1時,狀态寄存器Bit0傳回前一頁的程式設計是否成功,目前PROGRAM操作的成功與否的狀态是:Bit5為“1”(準備好狀态)時的Bit0狀态

NAND FLASHNAND Flash

13.            内部資料搬移

内部資料搬移需要兩個指令序列,先釋出一個READ FOR INTERNAL DATA MOVE(0x00-0x35),然後釋出一個INTERNAL DATA MOVE(0x85-0x10)指令,資料搬移僅僅支援被讀資料die範圍。

READ FOR DATA MOVE 0x00-0x35:先将00寫到指令寄存器,然後是内部源位址(5個周期),之後,将0x35寫到指令寄存器,這将起動從記憶體傳輸一頁到CACHE寄存器。盡管5個周期的位址被釋出,但是列位址是被忽略的。現在晶片準備接受INTERNAL DATA  MOVE(0x85-0x00)指令。

NAND FLASHNAND Flash

INTERNAL DATA MOVE 0x85-0x10:在READ FOR INTERNAL DATA MOVE指令釋出之後,以及R/B#變高,就可以釋出INTERNAL DATA MOVE指令了,這個指令将CACEH寄存器内容傳輸到資料寄存器,然後程式設計到新的目标位址,再INTERNAL DATA MOVE指令以及位址序列之後,R/B#變低,同時内部控制邏輯自動将資料程式設計到新的頁,READ STATUS指令和狀态寄存器的bit6能代替R/B#,以确定程式設計什麼時候完成。狀态寄存器Bit0訓示操作是否成功。在INTERNAL DATA MOVE指令序列期間,RANDOM DATA INPUT(0x85)用來修改原始資料的一個或多個字:首先,使用0x00-0x35指令序列将資料copy到CACHE寄存器,然後,使用帶要修改的資料位址的指令RANDOM DATA INTPUT(0x85),新的資料輸入呈現在外部資料腳,這将copy新的資料進入CACHE寄存器。當0x10寫入指令寄存器時候,原始資料+修改的資料被傳輸到資料寄存器。程式設計新的一頁将開始,如果有必要RANDOM DATA INPUT指令可以在啟動程式設計式列(0x10)之前釋出多次。因為INTERNAL DATA MOVE操作并不使用外部記憶體,是以ECC不可能在程式設計之前用來檢查錯誤,這将可能或導緻資料錯誤。在這種情況下,執行多次INTERNAL DATA MOVE操作,這些位錯誤可能會因沒有校正而積累。由于這個原因,我們強烈推薦利用INTERNAL DATA MOVE的系統使用魯棒ECC方案。這将可以對每個SECTOR校正2個或多個錯誤。

NAND FLASHNAND Flash

14.            塊擦除操作,0x60-0xD0

一次擦除一個塊。三個周期的位址A[28:18]被要求,先釋出ERASE SETUP(0x60)指令,然後是三個位址周期,之後是ERASE CONFIRM(0xD0)指令。通過READ STATUS RESGISTER指令讀擦除操作的狀态,當bit6=1時,操作完成,Bit0訓示通過/失敗條件,0表示通過。

NAND FLASHNAND Flash

15.            複位操作,0xFF

複位操作使晶片進入一個已知的狀态,中斷正在處理的指令序列。RANDOM READ、PROGRAM、ERASE指令在晶片忙狀态可以被中斷,正在被程式設計的位置或正在擦除的塊的内容變無效,資料有可能會部分地被擦除或程式設計。指令寄存器被清除,準備好進入下一個指令。

NAND FLASHNAND Flash

複位後狀态寄存器内容:

條件 狀态 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Hex
WP#高 準備好 1 1 1 0xE0
WP#低 準備好和寫保護 1 1 0x60

16.            寫保護操作

寫保護是為了防止不小心的程式設計和擦除操作。當WP#為低時候,所有的程式設計和擦除操作都會被禁止。

NAND FLASHNAND Flash

17.            錯誤管理

Micron NAND晶片出廠時并不保證晶片中所有的塊都是好的,隻要2048個塊中有不少于2008個完好塊就認為是合格品可以出廠。但是壞的塊的存在,并不影響好的塊的操作。在應用系統中應該提供壞塊影射、替代、錯誤校正等算法就可以保證資料具有很高的可靠性和完整性。

每個CE#的第一個塊(實體塊位址是0)絕對是經過測試,是完好無缺的。這就提供了存放BOOT代碼和重要資訊的存儲位置。

在晶片出廠之前,廠家會在每個壞塊的第一或第二頁的第一個備份位置(列位址是2048)用非0xFF程式設計來辨別壞塊。

系統軟體在進行任何擦除或程式設計操作之前應該檢查每個塊的第一或第二頁的第一個備份位址資料。這樣建立一個壞塊表。

經過一定時間的使用,記憶體的某些位置可能會不能正确地程式設計和擦除,為了確定資料的可靠性,應該采取一些預防措施,比如:

l  在寫、擦除、或資料搬移操作之後,總是檢查狀态。

l  使用某些類型的錯誤檢測糾正算法,以便能恢複某些輕微iede1錯誤。

l  使用壞塊替代算法。

繼續閱讀