企業空間 采購商城 存儲論壇
華為全閃存陣列 IBM云計算 Acronis 安克諾斯 安騰普 騰保數據
首頁 > 存儲百科 > SSD固態硬盤 > 正文

實例講解NAND Flash原理和使用

2017-02-09 13:20來源:中國存儲網
導讀:本文以Micron公司的MT29F2G08為例介紹NAND Flash原理和使用。NAND的內部存儲陣列是以頁為基本單位進行存取的。

本文以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 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 Flash原理和使用

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

實例講解NAND 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 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 Flash原理和使用

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

8. RANDOM DATA READ,0x05-0xE0

隨機數據讀,是為了用戶能夠設定新的列地址,增加數據讀出的靈活性,隨即讀模式在頁讀(0x00-0x30序列)后使能。這個命令的發布次數是不受限制的。但僅僅是當前頁數據的讀出。

實例講解NAND 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 Flash原理和使用

10.READ ID,0x90

讀出廠家的芯片標識。

實例講解NAND Flash原理和使用

11. READ STATUS,0x70

實例講解NAND 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 Flash原理和使用

RANDOM DATA INPUT 0x85:

在發起數據集輸入之后,可以通過RANDOM DATA INPUT命令向新的列地址寫入數據。在發布0x10命令之前,可以對同一頁多次使用0x85命令。

實例講解NAND 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 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 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 Flash原理和使用

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

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

實例講解NAND Flash原理和使用

15.復位操作,0xFF

復位操作使芯片進入一個已知的狀態,中斷正在處理的命令序列。RANDOM READ、PROGRAM、ERASE命令在芯片忙狀態可以被中斷,正在被編程的位置或正在擦除的塊的內容變無效,數據有可能會部分地被擦除或編程。命令寄存器被清除,準備好進入下一個命令。

實例講解NAND Flash原理和使用

復位后狀態寄存器內容:

條件

狀態

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

Hex

WP#高

準備好

1

1

1

0

0

0

0

0

0xE0

WP#低

準備好和寫保護

0

1

1

0

0

0

0

0

0x60

16.寫保護操作

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

實例講解NAND Flash原理和使用

17.錯誤管理

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

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

在芯片出廠之前,廠家會在每個壞塊的第一或第二頁的第一個備份位置(列地址是2048)用非0xFF編程來標識壞塊。

系統軟件在進行任何擦除或編程操作之前應該檢查每個塊的第一或第二頁的第一個備份地址數據。這樣創建一個壞塊表。

經過一定時間的使用,內存的某些位置可能會不能正確地編程和擦除,為了確保數據的可靠性,應該采取一些預防措施,比如:

l  在寫、擦除、或數據搬移操作之后,總是檢查狀態。

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

l  使用壞塊替代算法。

繼續閱讀
關鍵詞 :
NAND Flash
相關閱讀
  • SSD技術掃盲之:什么是NVMe? NVMe SSD有什么特點?

    NVMe SSD指的是NVMe標準的SSD固態硬盤,NVMe其實與AHCI一樣都是邏輯設備接口標準,而不是接口!NVMe標準是面向PCI-E SSD的。

  • SSD Trim介紹

    為了解決硬盤降速的問題,微軟聯合各大SSD廠商開發了一個新技術——Trim。Trim指令也叫disable delete notify(禁用刪除通知),屬于ata8-acs2規范的技術指令。使用SSD時必須

  • NAND Flash硬件讀寫原理

    Nand Flash 控制器通過將Nand Flash 芯片的內設命令寫到其特殊功能寄存器中,從而實現對Nand flash 芯片讀、檢驗和編程控制的。特殊功能寄存器有:NFCONF 、NFCMD 、NFADDR

  • 東芝存儲公司面臨價格下跌,供應過剩

    東芝存儲公司計劃從2021年到今年將其首次公開募股推進至今:據說將于今年下半年推出。

  • DWPD 每日整盤寫入次數 衡量SSD固態硬盤壽命

    DWPD是指每日整盤寫入次數,用來標示SSD產品壽命,3 DWPD*5年,意思就是每天整盤寫入3次,可以使用壽命為5年。

產品推薦
頭條閱讀

Copyright @ 2006-2019 ChinaStor.COM 版權所有 京ICP備14047533號

中國存儲網

存儲第一站,存儲門戶,存儲在線交流平臺

广西11选五走势图彩经网