本帖最后由 crifan 于 2011-07-02 16:49 編輯
【詳解】如何編寫Linux下Nand Flash驅(qū)動
版本: 1.7 作者:crifan 郵箱: green-waste(At)163.com
由于本文內(nèi)容太長,不方便此處發(fā)表全文,所以只列出了目錄。 完成的PDF版本下載或查看: 1. 豆丁網(wǎng)在線看 http://www.docin.com/p1-227502942.html 2. 愛問下載 http://ishare.iask.sina.com.cn/f/16800790.html 3.china unix bbs附件
【詳解】如何編寫Linux下Nand Flash驅(qū)動 v1.7 - 20110702.pdf
(1.71 MB, 下載次數(shù): 2892)
2011-07-02 16:43 上傳
點擊文件名下載附件
版本歷史
版本
| 日期
| 內(nèi)容說明
| 1.0 | 2009-07-21
| 簡介如何在Linux下實現(xiàn)Nand Flash驅(qū)動
| 1.2 | 2011-03-15
| 整理了排版
添加了很多內(nèi)容
| 1.3 | 2011-06-12
| 修正了Nand Flash行列地址的計算方法
| 1.7 | 2011-07-02
| 添加了ONFI,LBA規(guī)范的介紹
添加了Unique ID介紹
添加了對應的MTD中檢測不同類型芯片的代碼
增加了關(guān)于Nand Flash的軟件和硬件的ECC算法的簡介
|
目錄
1 正文之前 5
1.1 目的 5
1.2 目標讀者和閱讀此文的前提 5
1.3 說明 5
1.4 聲明 5
2 編寫驅(qū)動之前要了解的知識 6
2.1 一些相關(guān)的名詞的解釋 6
2.1.1 Non-Volatile Memory非易失性存儲器 6
2.1.2 OTP(One Time Programmable)一次性可編程存儲器 6
2.1.3 NDA(None-Disclosure Agreement) 6
2.1.4 Datasheet數(shù)據(jù)手冊和Specification規(guī)范 6
2.1.5 Nand Flash相關(guān)的一些名詞解釋 7
2.1.5.1 (Bad) Block Management(壞)塊管理 7
2.1.5.2 Wear-Levelling負載平衡 7
2.1.5.3 ECC(Error Correction Code)錯誤校驗(代碼) 7
2.2 硬件特性 8
2.2.1 什么是Flash 8
2.2.1.1 Flash的硬件實現(xiàn)機制 8
2.2.2 什么是Nand Flash 8
2.2.2.1 Nand Flash和Nor Flash的區(qū)別 9
2.2.2.2 Nand Flash的詳細分類 10
2.2.3 SLC和MLC的實現(xiàn)機制 10
2.2.3.1 SLC(Single Level Cell) 10
2.2.3.2 MLC(Multi Level Cell) 10
2.2.3.3 關(guān)于如何識別SLC還是MLC 10
2.2.4 Nand Flash數(shù)據(jù)存儲單元的整體架構(gòu) 11
2.2.5 Nand Flash的物理存儲單元的陣列組織結(jié)構(gòu) 12
2.2.5.1 Block塊 12
2.2.5.2 Page頁 12
2.2.5.3 oob / Redundant Area / Spare Area 12
2.2.6 Flash名稱的由來 13
2.2.7 Flash相對于普通設(shè)備的特殊性 13
2.2.8 Nand Flash引腳(Pin)的說明 14
2.2.8.1 為何需要ALE和CLE 15
2.2.8.2 Nand Flash只有8個I/O引腳的好處 15
2.2.8.2.1 減少外圍連線: 15
2.2.8.2.2 提高系統(tǒng)的可擴展性 16
2.2.9 Nand flash的一些典型(typical)的特性 16
2.2.10 Nand Flash控制器與Nand Flash芯片 16
2.2.11 Nand Flash中的特殊硬件結(jié)構(gòu) 16
2.2.12 Nand Flash中的壞塊(Bad Block) 17
2.2.12.1 壞塊的分類 17
2.2.12.2 壞塊的標記 17
2.2.12.3 壞塊的管理 18
2.2.12.4 壞塊的比例 18
2.2.13 Nand Flash中頁的訪問順序 18
2.2.14 常見的Nand Flash的操作 18
2.2.14.1 頁編程(Page Program)注意事項 19
2.2.14.2 讀(Read)操作過程詳解 20
2.2.14.2.1 需要使用何種命令 20
2.2.14.2.2 發(fā)送命令前的準備工作以及時序圖各個信號的具體含義 20
2.2.14.2.3 如何計算出我們要傳入的行地址和列地址 22
2.2.14.2.4 讀操作過程的解釋 25
2.2.15 Nand Flash的一些高級特性 26
2.2.15.1 Nand Flash的Unique ID 26
2.2.15.1.1 什么是Unique ID唯一性標識 26
2.2.15.1.2 不同Nand Flash廠商的對Unique ID的不同的實現(xiàn)方法 26
2.2.15.1.2.1 Toshiba東芝的Nand的Unique ID 26
2.2.15.1.2.2 讀取Toshiba的Nand的Unique ID 27
2.2.15.1.3 Samsung三星的Nand的Unique ID 27
2.2.15.1.3.1 讀取Samsung的Nand的Unique ID 28
2.2.15.1.4 遵循ONFI規(guī)范的廠商的Nand的Unique ID 28
2.2.15.1.4.1 讀取遵循ONFI的廠商的Nand的Unique ID 29
2.2.15.2 片選無關(guān)(CE don’t-care)技術(shù) 30
2.2.15.3 帶EDC的拷回操作以及Sector的定義(Copy-Back Operation with EDC & Sector Definition for EDC) 31
2.2.15.4 多片同時編程(Simultaneously Program Multi Plane) 31
2.2.15.5 交錯頁編程(Interleave Page Program) 32
2.2.15.6 隨機輸出頁內(nèi)數(shù)據(jù)(Random Data Output In a Page) 32
2.3 軟件方面 32
2.3.1 Nand Flash相關(guān)規(guī)范 – ONFI和LBA 32
2.3.1.1 ONFI是什么 32
2.3.1.1.1 ONFI Block Abstracted NAND 34
2.3.1.1.2 ONFI的好處 35
2.3.1.2 LBA規(guī)范是什么 35
2.3.1.3 為何會有ONFI和LBA 36
2.3.1.3.1 技術(shù)層面的解釋 36
2.3.1.3.2 現(xiàn)實層面的解釋 36
2.3.1.4 ONFI和LBA的區(qū)別和聯(lián)系 36
2.3.1.4.1 ONFI和LBA的區(qū)別 36
2.3.1.4.2 ONFI和LBA的聯(lián)系 36
2.3.2 內(nèi)存技術(shù)設(shè)備,MTD(Memory Technology Device) 36
2.3.2.1 Linux MTD中檢測不同類型Nand Flash的ID部分的代碼 37
2.3.3 讀操作的硬件到軟件的映射 42
2.3.4 Nand flash驅(qū)動工作原理 47
3 Linux下Nand Flash驅(qū)動編寫步驟簡介 49
3.1 對于驅(qū)動框架部分 49
3.2 對于Nand Flash底層操作實現(xiàn)部分 49
4 引用文章 52
圖表
圖表 1 典型的Flash內(nèi)存單元的物理結(jié)構(gòu) 8
圖表 2 Nand Flash 和 Nor Flash的區(qū)別 9
圖表 3 Nand Flash 第3個ID的含義 11
圖表 4 Nand Flash物理存儲單元的陣列組織結(jié)構(gòu) 12
圖表 5 Flash和普通設(shè)備相比所具有的特殊性 13
圖表 6 Nand Flash引腳功能說明 14
圖表 7 Nand Flash引腳功能的中文說明 15
圖表 8 Nand Flash讀寫時的數(shù)據(jù)流向 17
圖表 9 Nand Flash K9K8G08U0A的命令集合 19
圖表 10 Nand Flash數(shù)據(jù)讀取操作的時序圖 21
圖表 11 Nand Flash的地址周期組成 22
圖表 12 Toshiba的Unique ID 27
圖表 13 ONFI的參數(shù)頁數(shù)據(jù)結(jié)構(gòu)定義 29
圖表 14 ONFI中Unique ID的結(jié)構(gòu) 30
圖表 15 ONFI中Read Unique ID命令的時序圖 30
圖表 16 ONFI中的Nand Flash的命令集合 34
圖表 17 MTD設(shè)備和硬盤設(shè)備之間的區(qū)別 37
圖表 18 Nand Flash數(shù)據(jù)讀取操作的時序圖 43
縮略詞
縮寫
| 全稱
| BBM | Bad Block Management | BBT | Bad Block Table | EEPROM | Electrically Erasable Programmable Read-Only Memory | MLC | Multi Level Cell | MOSFET | Metal-Oxide -Semiconductor Field Effect Transistor 金屬氧化物半導體場效應晶體管
| SLC | Single Level Cell |
|