【详解】如何编写Linux下Nand Flash驱动
版本: 1.7
作者:crifan
邮箱: green-waste(At)163.com
由于本文内容太长,不方便此处发表全文,所以只列出了目录。
完成的PDF版本下载或查看:
1. 豆丁网在线看
http://www.docin.com/p1-227502942.html
2. 爱问下载
http://ishare.iask.sina.com.cn/f/16800790.html
3. china unix blog 附件
【详解】如何编写Linux下Nand Flash驱动 v1.7 – 20110702.pdf
http://blog.chinaunix.net/attachment/attach/77/44/27/2777442721908f569d4c7a7a6c32f36fde1e053f.pdf
4.chain unix bbs 附件
【详解】如何编写Linux下Nand Flash驱动 v1.7 – 20110702.pdf (1.71 MB)
版本历史
版本 | 日期 | 内容说明 |
1.0 | 2009-07-21 | 简介如何在Linux下实现Nand Flash驱动 |
1.2 | 2011-03-15 | 整理了排版 添加了很多内容 |
1.3 | 2011-06-12 | 修正了Nand Flash行列地址的计算方法 |
1.7 | 2011-07-02 | 添加了ONFI,LBA规范的介绍 添加了Unique ID介绍 添加了对应的MTD中检测不同类型芯片的代码 增加了关于Nand Flash的软件和硬件的ECC算法的简介 |
目录
1 正文之前 5
1.1 目的 5
1.2 目标读者和阅读此文的前提 5
1.3 说明 5
1.4 声明 5
2 编写驱动之前要了解的知识 6
2.1 一些相关的名词的解释 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数据手册和Specification规范 6
2.1.5 Nand Flash相关的一些名词解释 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的硬件实现机制 8
2.2.2 什么是Nand Flash 8
2.2.2.1 Nand Flash和Nor Flash的区别 9
2.2.2.2 Nand Flash的详细分类 10
2.2.3 SLC和MLC的实现机制 10
2.2.3.1 SLC(Single Level Cell) 10
2.2.3.2 MLC(Multi Level Cell) 10
2.2.3.3 关于如何识别SLC还是MLC 10
2.2.4 Nand Flash数据存储单元的整体架构 11
2.2.5 Nand Flash的物理存储单元的阵列组织结构 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相对于普通设备的特殊性 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 提高系统的可扩展性 16
2.2.9 Nand flash的一些典型(typical)的特性 16
2.2.10 Nand Flash控制器与Nand Flash芯片 16
2.2.11 Nand Flash中的特殊硬件结构 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 发送命令前的准备工作以及时序图各个信号的具体含义 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的不同的实现方法 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规范的厂商的Nand的Unique ID 28
2.2.15.1.4.1 读取遵循ONFI的厂商的Nand的Unique ID 29
2.2.15.2 片选无关(CE don’t-care)技术 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 随机输出页内数据(Random Data Output In a Page) 32
2.3 软件方面 32
2.3.1 Nand Flash相关规范 – 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规范是什么 35
2.3.1.3 为何会有ONFI和LBA 36
2.3.1.3.1 技术层面的解释 36
2.3.1.3.2 现实层面的解释 36
2.3.1.4 ONFI和LBA的区别和联系 36
2.3.1.4.1 ONFI和LBA的区别 36
2.3.1.4.2 ONFI和LBA的联系 36
2.3.2 内存技术设备,MTD(Memory Technology Device) 36
2.3.2.1 Linux MTD中检测不同类型Nand Flash的ID部分的代码 37
2.3.3 读操作的硬件到软件的映射 42
2.3.4 Nand flash驱动工作原理 47
3 Linux下Nand Flash驱动编写步骤简介 49
3.1 对于驱动框架部分 49
3.2 对于Nand Flash底层操作实现部分 49
4 引用文章 52
图表
图表 1 典型的Flash内存单元的物理结构 8
图表 2 Nand Flash 和 Nor Flash的区别 9
图表 3 Nand Flash 第3个ID的含义 11
图表 4 Nand Flash物理存储单元的阵列组织结构 12
图表 5 Flash和普通设备相比所具有的特殊性 13
图表 6 Nand Flash引脚功能说明 14
图表 7 Nand Flash引脚功能的中文说明 15
图表 8 Nand Flash读写时的数据流向 17
图表 9 Nand Flash K9K8G08U0A的命令集合 19
图表 10 Nand Flash数据读取操作的时序图 21
图表 11 Nand Flash的地址周期组成 22
图表 12 Toshiba的Unique ID 27
图表 13 ONFI的参数页数据结构定义 29
图表 14 ONFI中Unique ID的结构 30
图表 15 ONFI中Read Unique ID命令的时序图 30
图表 16 ONFI中的Nand Flash的命令集合 34
图表 17 MTD设备和硬盘设备之间的区别 37
图表 18 Nand Flash数据读取操作的时序图 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 |
转载请注明:在路上 » 【详解】如何编写Linux下Nand Flash驱动 v1.7