NandFlash詳述

NandFlash詳述


Flash的硬件實現機制】

Flash全名叫做Flash Memory,屬於非易失性存儲設備(Non-volatile Memory Device),與此相對應的是易失性存儲設備(Volatile Memory Device)。關於什麼是非易失性/易失性,從名字中就可以看出,非易失性就是不容易丟失,數據存儲在這類設備中,即使斷電了,也不會丟失,這類設備,除了Flash,還有其他比較常見的入硬盤,ROM等,與此相對的,易失性就是斷電了,數據就丟失了,比如大家常用的內存,不論是以前的SDRAMDDR SDRAM,還是現在的DDR2DDR3等,都是斷電後,數據就沒了。

 

Flash的內部存儲是MOSFET,裏面有個懸浮門(Floating Gate),是真正存儲數據的單元。

Flash之前,紫外線可擦除(uv-erasable)EPROM,就已經採用用Floating Gate存儲數據這一技術了。

1.典型的Flash內存單元的物理結構

數據在Flash內存單元中是以電荷(electrical charge) 形式存儲的。存儲電荷的多少,取決於圖中的外部門(external gate)所被施加的電壓,其控制了是向存儲單元中衝入電荷還是使其釋放電荷。而數據的表示,以所存儲的電荷的電壓是否超過一個特定的閾值Vth來表示。

 

SLCMLC的實現機制】

Nand Flash按照內部存儲數據單元的電壓的不同層次,也就是單個內存單元中,是存儲1位數據,還是多位數據,可以分爲SLCMLC

1. SLCSingle Level Cell:

單個存儲單元,只存儲一位數據,表示成10.

就是上面介紹的,對於數據的表示,單個存儲單元中內部所存儲電荷的電壓,和某個特定的閾值電壓Vth,相比,如果大於此Vth值,就是表示1,反之,小於Vth,就表示0.

對於nand Flash的數據的寫入1,就是控制External Gate去充電,使得存儲的電荷夠多,超過閾值Vth,就表示1了。而對於寫入0,就是將其放電,電荷減少到小於Vth,就表示0了。

關於爲何Nand Flash不能從0變成1,我的理解是,物理上來說,是可以實現每一位的,從0變成1的,但是實際上,對於實際的物理實現,出於效率的考慮,如果對於,每一個存儲單元都能單獨控制,即,0變成1就是,對每一個存儲單元單獨去充電,所需要的硬件實現就很複雜和昂貴,同時,所進行對塊擦除的操作,也就無法實現之前的,一閃而過的速度了,也就失去了Flash的衆多特性了。

 

2. MLCMulti Level Cell

SLC相對應,就是單個存儲單元,可以存儲多個位,比如2位,4位等。其實現機制,說起來比較簡單,就是,通過控制內部電荷的多少,分成多個閾值,通過控制裏面的電荷多少,而達到我們所需要的存儲成不同的數據。比如,假設輸入電壓是Vin4V(實際沒有這樣的電壓,此處只是爲了舉例方便),那麼,可以設計出22次方=4個閾值, 1/4 Vin1V2/4Vin2V3/4Vin3VVin4V,分別表示2位數據00011011,對於寫入數據,就是充電,通過控制內部的電荷的多少,對應表示不同的數據。

對於讀取,則是通過對應的內部的電流(與Vth成反比),然後通過一系列解碼電路完成讀取,解析出所存儲的數據。這些具體的物理實現,都是有足夠精確的設備和技術,才能實現精確的數據寫入和讀出的。

單個存儲單元可以存儲2位數據的,稱作22次方=4 Level Cell,而不是2 Level Cell,這點,之前差點搞暈了。。。,同理,對於新出的單個存儲單元可以存儲4位數據的,稱作 24次方=16 Level Cell

 

【關於如何識別SLC還是MLC

Nand Flash設計中,有個命令叫做Read ID,讀取ID,意思是讀取芯片的ID,就像大家的身份證一樣,這裏讀取的ID中,是讀取好幾個字節,一般最少是4個,新的芯片,支持5個甚至更多,從這些字節中,可以解析出很多相關的信息,比如此Nand Flash內部是幾個芯片(chip)所組成的,每個chip包含了幾片(Plane),每一片中的頁大小,塊大小,等等。在這些信息中,其中有一個,就是識別此flashSLC還是MLC。下面這個就是最常見的Nand Flashdatasheet中所規定的,第3個字節,3rd byte,所表示的信息,其中就有SLC/MLC的識別信息:

 



 

Description

I/O7

I/O6

I/O5 I/O4

I/O3 I/O2

I/O1 I/O0

Internal

Chip Number

1

2

4

8

 

 

 

 

0    0

0    1

1    0

1    1

Cell Type

2 Level Cell

4 Level Cell

8 Level Cell

16 Level Cell

 

 

 

0     0

0     1

1     0

1     1

 

Number of

Simultaneously

Programmed Pages

1

2

4

8

 

 

0     0

0     1

1     0

1     1

 

 

Interleave Program

Between multiple chips

Not Support

Support

 

0

1

 

 

 

Cache Program

Not Support

Support

0

1

 

 

 

 

1.Nand Flash 3ID的含義

 

Nand Flash的物理存儲單元的陣列組織結構】

Nand flash的內部組織結構,此處還是用圖來解釋,比較容易理解:

2.Nand Flash物理存儲單元的陣列組織結構

上圖是K9K8G08U0Adatasheet中的描述。

簡單解釋就是:

1.一個nand flash由很多個塊(Block)組成,塊的大小一般是128KB256KB512KB,此處是128KB

2.每個塊裏面又包含了很多頁(page)。每個頁的大小,對於現在常見的nand flash多數是2KB,更新的nand flash4KB,這類的,頁大小大於2KBnand flash,被稱作big block,對應的發讀寫命令地址,一共5個週期(cycle),而老的nand flash,頁大小是256B512B,這類的nand flash被稱作small block,。地址週期只有4個。

而塊,也是Nand Flash的擦除操作的基本/最小單位。

3.每一個頁,對應還有一塊區域,叫做空閒區域(spare area/冗餘區域(redundant area),而Linux系統中,一般叫做OOBOut Of Band),這個區域,是最初基於Nand Flash的硬件特性:數據在讀寫時候相對容易錯誤,所以爲了保證數據的正確性,必須要有對應的檢測和糾錯機制,此機制被叫做EDC(Error Detection Code)/ECCError Code Correction, 或者 Error Checking and Correcting),所以設計了多餘的區域,用於放置數據的校驗值。

頁是Nand Flash的寫入操作的基本/最小的單位。

 

Nand Flash數據存儲單元的整體架構】

簡單說就是,常見的nand flash,內部只有一個chip,每個chip只有一個plane

而有些複雜的,容量更大的nand flash,內部有多個chip,每個chip有多個plane。這類的nand flash,往往也有更加高級的功能,比如下面要介紹的Multi Plane ProgramInterleave Page Program等。

比如,型號爲K9K8G08U0A這個芯片(chip),內部有兩個K9F4G08U0A,每個K9F4G08U0A包含了2Plane,每個Plane1Gb,所以K9F4G08U0A的大小是1Gb×22Gb256MB,因此,K9K8G08U0A內部有2K9F4G08U0A,即4Plane,總大小是4×256MB1GB

而型號是K9WAG08U1Anand flash,內部包含了2K9K8G08U0A,所以,總容量是K9K8G08U0A的兩倍=1GB×22GB,類似地K9NBG08U5A,內部包含了4K9K8G08U0A,總大小就是4×1GB4GB

 

Flash名稱的由來】

Flash的擦除操作是以block塊爲單位的,與此相對應的是其他很多存儲設備,是以bit位爲最小讀取/寫入的單位,Flash是一次性地擦除整個塊:在發送一個擦除命令後,一次性地將一個block,常見的塊的大小是128KB/256KB。。,全部擦除爲1,也就是裏面的內容全部都是0xFF了,由於是一下子就擦除了,相對來說,擦除用的時間很短,可以用一閃而過來形容,所以,叫做Flash Memory。中文有的翻譯爲 (快速)閃存。

 

Flash相對於普通設備的特殊性】

1.上面提到過的,Flash最小操作單位,有些特殊。

一般設備,比如硬盤/內存,讀取和寫入都是以bit位爲單位,讀取一個bit的值,將某個值寫入對應的地址的位,都是可以按位操作的。

但是Flash由於物理特性,使得內部存儲的數據,只能從1變成0,這點,可以從前面的內部實現機制瞭解到,只是方便統一充電,不方便單獨的存儲單元去放電,所以才說,只能從1變成0,也就是釋放電荷。

所以,總結一下Flash的特殊性如下:

 

 

普通設備(硬盤/內存等)

Flash

讀取/寫入的叫法

讀取/寫入

讀取/編程(Program)

讀取/寫入的最小單位

Bit/

Page/

擦除(Erase)操作的最小單位

Bit/

Block/ 

擦除操作的含義

將數據刪除/全部寫入0

將整個塊都擦除成全是1,也就是裏面的數據都是0xFF 

對於寫操作

直接寫即可

在寫數據之前,要先擦除,然後再寫

2.Flash和普通設備相比所具有的特殊性

注:

 之所以將寫操作叫做編程,是因爲,flash 和之前的EPROMEEPROM繼承發展而來,而之前的EEPROM(Electrically Erasable Programmable Read-Only Memory),往裏面寫入數據,就叫做編程Program,之所以這麼稱呼,是因爲其對數據的寫入,是需要用電去擦除/寫入的,就叫做編程。

 對於目前常見的頁大小是2K/4KNand Flash,其塊的大小有128KB/256KB/512KB等。而對於Nor Flash,常見的塊大小有64K/32K等。

③在寫數據之前,要先擦除,內部就都變成0xFF了,然後才能寫入數據,也就是將對應位由1變成0



源自:http://blog.sina.com.cn/s/blog_76b0cde40102uwj1.html

相關文章: 

NandFlash詳述 http://blog.163.com/starjj_embeded/blog/static/20450005120122170425898/

Nand Flash 關於Plane的補充http://blog.163.com/jiangh_1982/blog/static/1219505200901345759483/

NandFlash 壞塊 http://blog.chinaunix.net/uid-22597935-id-1772446.html

三星,海力士,鎂光nand flash命名規則http://blog.csdn.net/zjjyliuweijie/article/details/6409397

【詳解】如何編寫Linux下Nand Flash驅動 http://www.crifan.com/files/doc/docbook/linux_nand_driver/release/html/linux_nand_driver.html#nand_flash


(以上整理來源互聯網)

發佈了30 篇原創文章 · 獲贊 20 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章