NAND FLASH學習筆記之nand flash基礎(一)【轉】

轉自:https://blog.csdn.net/wang_zheng_kai/article/details/18984873

我入職以來接觸的第一個實踐內容就是MTD下的NAND FLASH的驅動,下面我將從nand flash的基礎和驅動程序兩個方面來探討該知識點,同時最後我會把自己的

動手實驗也展示出來,我學習是基於jz4780grus開發板來學習的,使用的nandflash的型號是MT29F32G08CBACA,我的大致學習結構如目錄所示:

 

一、NAND FLASH概述

二、NAND FLASH的參數及物理結構

三、NAND FLASH的地址訪問方法

四、 NAND FLASH的操作方法

五、 NAND FLASH的其他一些補充


(一)Nand Flash的概述

1、Nand Flash的定義:

NAND Flash 在嵌入式系統中的地位與PC機上的硬盤是類似的。用於保存系統運行所必需的操作系統,應用程序,用戶數據,運行過程中產生的各類數據,系統掉電後數據不會丟失。

2、 Nand Flash的幾個重要的基本特性:

a、NandFlash的IO接口

對於Norflash、dram 之類的存儲設備,CPU 可以直接通過地址總線對其進行訪問,而 Nand Flash 沒有這類的總線,只有 IO 接口,只能通過複用的 IO接口發送命令和地址,從而實現對 Nand Flash 內部數據進行訪問。(端口的複用)

b、 NandFlash的讀、寫、擦除操作:

讀寫是以頁爲單位的,擦除是以塊爲單位的。

對於Nand的寫操作,只能由1變成0,而不能由0變成1。所以必須先對nand執行erase操作,即將0變成1,然後再寫(使對應的1變成0)

c、存儲在Nand中的數據容易發生錯誤,所以採取一定的算法對數據進行編碼和解碼很有必要。在數據存儲到nand flash之前進行編碼,連同校驗數據一同存儲到nand之中;在數據從nand讀出之後進行解碼,以驗證數據是否出錯。(BCH)

3、與Nand Flash相關的名詞術語:

1. ONFI標準

ONFI(Open NAND Flash Interface,開放式NAND閃存接口)規範是一種Flash閃存接口的標準,它是Intel爲統一當初混亂的閃存接口所倡導的標準。因爲在此之前,市場上銷售的NAND閃存芯片在引腳定義上都不完全相同。這就使得爲一家公司設計的控制器,很有可能無法用在另一家公司的產品上。比如爲東芝芯片設計的控制器,就無法用在三星或海力士的產品上,這就給上游的主控設計商以及最終的產品設計人員帶來了很大的困難。

爲此,Intel聯合多家NAND Flash廠商制定了ONFI標準,統一NAND Flash芯片的引腳定義,並在此基礎上採用新的技術以實現新的功能。

2. Block Management(壞)塊管理

NandFlash 由於其物理特性,只有有限的擦寫次數,超過那個次數,基本上就是壞了。在使用過程中,有些 Nand Flash 的 block 會出現被用壞了,當發現了,要及時將此 block 標註爲壞塊,不再使用。於此相關的管理工作,屬於 Nand Flash 的壞塊管理的一部分工作。

3. Wear-Leveling 負載平衡

NandFlash 的 block 的管理,還包括負載平衡。

正是由於 Nand Flash 的 block,都是有一定壽命限制的,所以如果你每次都往同一個 block擦除然後寫入數據,那麼那個 block 就很容易被用壞了,所以我們要去管理一下,將這麼多次的對同一個 block 的操作,平均分佈到其他一些 block 上面,使得在 block 的使用上,相對較平均,這樣相對來說,可以更能充分利用 Nand Flash。

4. ECC 錯誤校驗碼

NandFlash 物理特性上使得其數據讀寫過程中會發生一定機率的錯誤,所以要有個對應的錯誤檢測和糾正的機制,於是纔有此 ECC,用於數據錯誤的檢測與糾正。Nand Flash 的 ECC,常見的算法有海明碼和BCH,這類算法的實現,可以是軟件也可以是硬件。不同系統,根據自己的需求,採用對應的軟件或者是硬件。

5.SLC 和MLC

SLC(Single Level Cell)

單個存儲單元,只存儲一位數據,表示 1 或 0。

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

MLC(Multi Level Cell)

與 SLC 相對應的,就是單個存儲單元,可以存儲多個位,比如 2 位,4位等。其實現機制,說起來比較簡單,

就是通過控制內部電荷的多少,分成多個閾值,通過控制裏面的電荷多少,而達到我們所需要的存儲成不同的數據。比如,假設輸入電壓是 Vin=4V(實際沒有這樣的電壓,此處只是爲了舉例方便),那麼,可以設計出 2 的 2 次方=4 個閾值, 1/4 的 Vin=1V,2/4 的 Vin=2V,3/4 的 Vin=3V,Vin=4V,分別表示 2 位數據 00,01,10,11,對於寫入數據,就是充電,通過控制內部的電荷的多少,對應表示不同的數據。

4、Nand Flash的數據存儲:

NAND flash的數據是以bit的方式保存;對於SLC而言,一個cell只能存儲一個bit,而對於MLC而言,一個cell可以存儲2個bit;這些cell以8個或者16個爲單位連成bit line,形成所謂的byte(x8)/word(x16),即我們所說的NAND device的位寬。

NAND flash以頁(後面會介紹到)爲單位讀寫數據,而以塊爲單位擦出數據。

 

(二)Nand Flash的參數及結構

1、MT29F32G08CBACA型號分析

 

2、MT29F32G08CBACA的封裝及設備結構

 

3、MT29F32G08CBACA存儲單元組織結構


Organization

– Page size : 4320bytes (4096 + 224 bytes)

– Block size: 256pages (1024K + 56K bytes)

– Plane size: 2 planesx 2048 blocks per plane

– Device size: 32Gb:4096 blocks

NANDFLASH存儲器MT29F32G08CBACA的總容量爲34560Mb(4G+224M),其中包括兩個plane,每個plane由2048個block (塊) ,每個block又由256 pages組成,而每個page包含了大小爲4K字節的Data area(數據存儲區域) 和224字節的Spare area(備用區域)

OOB:每頁還有一塊區域,在Linux 系統中,稱爲OOB(Out Of Band),這個區域最初基於Nand Flash在讀寫數據時容易錯誤的特性,爲了保證數據的正確性,採用相應的檢測和糾錯機制(EDC/ECC),而設計的用於放置數據的校驗值的區域。

關於 oob具體用途,總結起來有:

1、標記是否是壞塊

2、存儲ECC數據

3、存儲一些和文件系統相關的數據。如jffs2就會用到這些空間存儲一些特定信息,而yaffs2文件系統,會在oob中,存放很多和自己文件系統相關的信息。


4、MT29F32G08CBACA功能框圖


由於,I/O線是數據地址和命令複用的,所以要根據ALE和CLE的高低電平可以判斷I/O線上傳遞過來的是地址,命令還是數據。
————————————————
版權聲明:本文爲CSDN博主「中華田園犬」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wang_zheng_kai/article/details/18984873

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章