没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
【详解】如何编写 Linux 下 Nand Flash 驱动
版本: 1.2
最后更新日期:2011-03-15
作者:crifan
邮箱:green-waste(At)163.com
目录
1. 正文之前................................................................................................................................... 4
1.1. 目的 ........................................................................................................................... 4
1.2. 目标读者和阅读此文的前提 ................................................................................... 4
1.3. 说明 ........................................................................................................................... 4
1.4. 声明 ........................................................................................................................... 4
2. 编写驱动之前要了解的知识 ................................................................................................... 5
2.1. 硬件特性 ................................................................................................................... 5
2.1.1. 什么是 Flash ..................................................................................................... 5
2.1.1.1. Flash 的硬件实现机制 ............................................................................. 5
2.1.2. 什么是 Nand Flash ........................................................................................... 5
2.1.2.1. Nand Flash 和 Nor Flash 的区别 .............................................................. 6
2.1.2.2. Nand Flash 的详细分类............................................................................ 7
2.1.3. SLC 和 MLC 的实现机制 ................................................................................ 7
2.1.3.1. SLC(Single Level Cell)........................................................................ 7
2.1.3.2. MLC(Multi Level Cell)........................................................................ 7
2.1.3.3. 关于如何识别 SLC 还是 MLC ................................................................ 8
2.1.4. Nand Flash 数据存储单元的整体架构 ............................................................ 8
2.1.5. Nand Flash 的物理存储单元的阵列组织结构 ................................................ 9
2.1.5.1. Block 块 .................................................................................................... 9
2.1.5.2. Page 页 ...................................................................................................... 9
2.1.5.3. oob / Redundant Area / Spare Area ......................................................... 10
2.1.6. Flash 名称的由来 ........................................................................................... 10
2.1.7. Flash 相对于普通设备的特殊性 ................................................................... 10
2.1.8. Nand Flash 引脚(Pin)的说明.......................................................................... 11
2.1.8.1. 为何需要 ALE 和 CLE........................................................................... 12
2.1.8.2. Nand Flash 只有 8 个 I/O 引脚的好处 .................................................. 12
2.1.8.2.1. 减少外围连线: .......................................................................... 12
2.1.8.2.2. 提高系统的可扩展性 .................................................................. 13
2.1.9. Nand flash 的一些典型(typical)的特性 ......................................................... 13
2.1.10. Nand Flash 控制器与 Nand Flash 芯片 ......................................................... 13
2.1.11. Nand Flash 中的特殊硬件结构 ...................................................................... 13
2.1.12. Nand Flash 中的坏块(Bad Block) .................................................................. 14
2.1.12.1. 坏块的分类 ........................................................................................... 14
2.1.12.2. 坏块的标记 ........................................................................................... 14
2.1.12.3. 坏块的管理 ........................................................................................... 15
2.1.12.4. 坏块的比例 ........................................................................................... 15
2.1.13. Nand Flash 中页的访问顺序.......................................................................... 15
2.1.14. 常见的 Nand Flash 的操作............................................................................. 15
2.1.14.1. 页编程(Page Program)注意事项..................................................... 16
2.1.14.2. 读(Read)操作过程详解 ................................................................... 17
2.1.14.2.1. 需要使用何种命令 .................................................................... 17
2.1.14.2.2. 发送命令前的准备工作以及时序图各个信号的具体含义 .... 17
2.1.14.2.3. 如何计算出我们要传入的行地址和列地址 ............................ 19
2.1.14.2.4. 读操作过程的解释 .................................................................... 20
2.1.15. Nand Flash 的一些高级特性.......................................................................... 20
2.1.15.1. 片选无关(CE don’t-care)技术 .............................................................. 20
2.1.15.2. 带 EDC 的拷回操作以及 Sector 的定义(Copy-Back Operation with
EDC & Sector Definition for EDC) ..................................................................... 21
2.1.15.3. 多片同时编程(Simultaneously Program Multi Plane) ......................... 21
2.1.15.4. 交错页编程(Interleave Page Program)............................................ 21
2.1.15.5. 随机输出页内数据(Random Data Output In a Page) ..................... 22
2.2. 软件方面 ................................................................................................................. 22
2.2.1. 内存技术设备,MTD(Memory Technology Device) .............................. 22
2.2.2. 读操作的硬件到软件的映射 ......................................................................... 23
2.2.3. Nand flash 驱动工作原理 .............................................................................. 28
3. Linux 下 Nand Flash 驱动编写步骤简介 .............................................................................. 30
3.1. 对于驱动框架部分 ................................................................................................. 30
3.2. 对于 Nand Flash 底层操作实现部分..................................................................... 30
4. 引用文章................................................................................................................................. 33
图表
图表 1 典型的 Flash 内存单元的物理结构 .......................................................................... 5
图表 2 Nand Flash 和 Nor Flash 的区别 ............................................................................... 6
图表 3 Nand Flash 第 3 个 ID 的含义 ................................................................................... 8
图表 4 Nand Flash 物理存储单元的阵列组织结构 ............................................................... 9
图表 5 Flash 和普通设备相比所具有的特殊性 .................................................................. 10
图表 6 Nand Flash 引脚功能说明 ........................................................................................ 11
图表 7 Nand Flash 引脚功能的中文说明............................................................................. 12
图表 8 Nand Flash 读写时的数据流向 ................................................................................ 14
图表 9 Nand Flash K9K8G08U0A 的命令集合 ................................................................... 16
图表 10 Nand Flash 数据读取操作的时序图....................................................................... 18
图表 11 Nand Flash 的地址周期组成 ................................................................................... 19
图表 12 MTD 设备和硬盘设备之间的区别 ........................................................................ 23
图表 13 Nand Flash 数据读取操作的时序图....................................................................... 24
缩略词
缩写
全称
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
1. 正文之前
1.1. 目的
本文的主要目的是,看了之后,你应该对 Nand Flash 的硬件特性以及对应的 Linux 下软件平
台有了基本的认识,进一步地,对如何实现 Linux 下的 Nand Flash 的驱动,知道要做哪些事
情了,以及大概是如何实现的。这样,如果有了对应的开发环境,你就可以自己去实现 Nand
Flash 的驱动了。
不过额外提示一句的是,写出代码,并不代表你就完全搞懂了整个系统的流程。而且已经写
好的代码,很可能有 bug,要你不断地调试,通过调试,你才会对整个系统以及 Nand Flash
的方方面面有个更深入的了解的。
而且,你会发现,为了写驱动那点代码之前,却要弄懂太多的东西,包括硬件的工作原理,
软件的协议规范,软件的逻辑架构等等,最后才能去实现你的驱动,所以有人会说,你写驱
动不是很简单嘛,不就是写那几行代码吗,对此,一个经典的回答就是,对于整个写驱动的
工作的价值算作 100 元的话,写代码值 1 块钱,但是知道怎么写,值 99 块钱。^_^
1.2. 目标读者和阅读此文的前提
正因为此文目的是让你搞懂如何在 Linux 下面实现 Nand Flash 的驱动,所以,目标读者就是,
希望对 Nand Flash 硬件知识有一定了解,和想要在 Linux 下面实现 Nand Flash 驱动的读者。
而阅读此文的前提,是要有一些基本的软硬件基础知识,和了解如何在 v2.6 内核之后 Linux
的下面开发驱动的流程。有了这些知识,再看本文,然后你才能清楚真正要去实现 Nand Flash
的驱动,是如何下手。
1.3. 说明
本文的逻辑是,先介绍 Nand Flash 的一些基本的硬件知识,然后详细分析 Nand Flash 的 Read
操作的具体的流程,清楚硬件实现的逻辑,接着介绍软件平台,即 Linux 下面和 Nand Flash
相关的内容,这样,硬件和软件都清楚是怎么回事了,然后再介绍如何去在 Linux 的架构下,
实现 Nand Flash 驱动。
之前写的版本,虽然前面关于 Nand Flash 的内容介绍的比较详细,但是后面关于相关的 MTD
知识,尤其是 Linux 的 MTD 的架构和如何实现具体的 Nand 的 Flash 的操作等部分的内容,
写的很简略,导致有些读者看了后,觉得是,关于如何写驱动,和没说差不多,呵呵。
因此,现在继续更新,将更详细的解释,如何从硬件 Nand Flash 的规范,一步步映射到具
体的软件实现的过程,这样,使得读者更明白其中的内在逻辑,然后接着再介绍如何在理解
了软硬件各自的所具有的功能,以及 Linux 的 MTD 系统,已经帮你实现了哪些功能,然后
才会更加明白,余下的要实现的软件部分,就是你所要实现的 Linux 下的 Nand Flash 的驱动
部分了。
1.4. 声明
关于此贴版权问题,欢迎转载,但是希望注明联系方式,至少其他人看到被转帖的内容,如
果有疑问,建议和意见,可以及时与笔者沟通。
2. 编写驱动之前要了解的知识
2.1. 硬件特性
2.1.1. 什么是 Flash
Flash 全名叫做 Flash Memory,从名字就能看出,是种数据存储设备,存储设备有很多类,
Flash 属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备
(Volatile Memory Device)。关于什么是非易失性/易失性,从名字中就可以看出,非易失性就
是不容易丢失,数据存储在这类设备中,即使断电了,也不会丢失,这类设备,除了 Flash,
还有其他比较常见的入硬盘,ROM 等,与此相对的,易失性就是断电了,数据就丢失了,
比如大家常用的内存,不论是以前的 SDRAM,DDR SDRAM,还是现在的 DDR2,DDR3
等,都是断电后,数据就没了。
2.1.1.1. Flash 的硬件实现机制
Flash 的内部存储是 MOSFET,里面有个悬浮门(Floating Gate),是真正存储数据的单元。
在 Flash 之前,紫外线可擦除(uv-erasable)的 EPROM,就已经采用了 Floating Gate 存储数据
这一技术了。
图表 1 典型的 Flash 内存单元的物理结构
数据在 Flash 内存单元中是以电荷(electrical charge) 形式存储的。存储电荷的多少,取决于
图中的外部门(external gate)所被施加的电压,其控制了是向存储单元中冲入电荷还是使
其释放电荷。而数据的表示,以所存储的电荷的电压是否超过一个特定的阈值 Vth 来表示,
因此,Flash 的存储单元的默认值,不是 0(其他常见的存储设备,比如硬盘灯,默认值为 0),
而是 1,而如果将电荷释放掉,电压降低到一定程度,表述数字 0。
2.1.2. 什么是 Nand Flash
Flash 主要分两种,Nand Flash 和 nor flash。
关于 Nand Flash 和 Nor Flash 的区别,参见【附录 5】。
不过,关于两者区别,除了那个解释之外,这里再多解释解释:
1.Nor 的成本相对高,容量相对小,比如常见的只有 128KB,256KB,1MB,2MB 等等,优
点是读写数据时候,不容易出错。所以在应用领域方面,Nor Flash 比较适合应用于存储少
量的代码。
2.Nand flash 成本相对低,说白了就是便宜,缺点是使用中数据读写容易出错,所以一般都
剩余32页未读,继续阅读
资源评论
- zfjlysh2014-11-01正好用到,来的巧
kakaxifans
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- springboot-mavenBaseDemo 内容包含:springboot的maven基础状态,1.8JDK可以直接运行
- otis rsl远程串行接口协议标准.pdf
- buildx构建镜像时所需的镜像文件
- F103-霸道开发板2.8寸电阻触摸屏例程.rar
- Google(高德)地图瓦片python代码下载
- Python实现输出杨辉三角形
- polsarpro官方教程、操作说明 PolSARpro v5.0 Software Training Course
- STM32 TouchGFX的使用二图片显示
- buildx镜像文件,也可以通过网上其他方式获取
- 【中级软件设计师】上午题12-软件工程(2):单元测试、黑盒测试、白盒测试、软件运行与维护
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功