基于linux的MTD的NANDFLASH设备驱动底层实现原理分析 - 图文
更新时间:2023-09-20 02:39:01 阅读量: 小学教育 文档下载
基于MTD的NANDFLASH设备驱动底层实现原理分析
经过UBOOT初步的移植,Linux内核初步的移植,Linux内核总线设备模型的分析,等一系列
痛苦的折腾,目的就是想更好的来分析下NANDFLASH的驱动。。大概一共历经了半个月的时间,慢慢的对NANDFLASH驱动程序有感觉了。。。
一、MTD体系结构:Linux内核提供MTD子系统来建立FLASH针对Linux的统一、抽象接口。MTD将文件系统与底层的FLASH存储器进行隔离。 引入MTD后Linux系统中对FLASH的设备驱动分为4层
设备节点:用户在/dev目录下使用mknod命令建立MTD字符设备节点(主设备号为90),或者MTD块设备节点(主设备号为31),使用该设备节点即可访问MTD设备。
MTD设备层:基于MTD原始设备层,系统将MTD设备可以定义为MTD字符(在/mtd/mtdchar.c中实现,设备号90)和MTD块设备(在/mtd/mtdblock.c中实现,设备号31)。
MTD原始设备层:MTD原始设备层由两部分构成,一部分是MTD原始设备的通用代码,另一部分是各个特定Flash的数据,如分区。
主要构成的文件有:
drivers/mtd/mtdcore.c支持mtd字符设备
driver/mtd/mtdpart.c支持mtd块设备
Flash硬件驱动层:Flash硬件驱动层负责对Flash硬件的读、写和擦除操作。MTD设备的Nor Flash芯片驱动位于drivers/mtd/chips/子目录下,Nand Flash芯片的驱动则位于drivers/mtd/nand/子目录下。
二、Linux内核中基于MTD的NANDFLASH驱动代码布局: 在Linux2.6.35内核中,MTD源代码放在driver/mtd目录中,该目录中包含chips、devices、maps、nand、onenand、lpdrr、tests和ubi八个子目录。
其中只有nand和onenand目录中的代码才与NAND驱动相关,不过nand目录中的代码比较通用,而onenand目录中的代码相对于nand中的代码而言则简化了很多,它是针对三星公司开发的另一类Flash芯片,即OneNAND Flash。
本文我们需要关注的代码是linux-2.6.35/drivers/mtd/nand目录中,在该目录中我们关心的文件如下:
1、 nand_base.c:
定义了NAND驱动中对NAND芯片最基本的操作函数和操作流程,如擦除、读写page、读写oob等。当然这些函数都只是进行一些default的操作,若你的系统在对NAND操作时有一些特殊的动作,则需要在你自己的驱动代码中进行定义,然后Replace这些default的函数。
2、 nand_bbt.c:
定义了NAND驱动中与坏块管理有关的函数和结构体。 3、 nand_ids.c:
定义了两个全局类型的结构体:struct nand_flash_dev nand_flash_ids[ ]和struct nand_manufacturers nand_manuf_ids[ ]。其中前者定义了一些NAND芯片的类型,后者定义了NAND芯片的几个厂商。NAND芯片的ID至少包含两项内容:厂商ID和厂商为自己的NAND芯片定义的芯片ID。当NAND驱动被加载的时候,它会去读取具体NAND芯片的ID,然后根据读取的内容到上述定义的nand_manuf_ids[ ]和nand_flash_ids[ ]两个结构体中去查找,以此判断该NAND芯片是那个厂商的产品,以及该NAND芯片的类型。若查找不到,则NAND驱动就会加载失败,因此在开发NAND驱动前必须事先将你的NAND芯片添加到这两个结构体中去(其实这两个结构体中已经定义了市场上绝大多数的NAND芯片,所以除非你的NAND芯片实在比较特殊,否则一般不需要额外添加)。值得一提的是,nand_flash_ids[ ]中有三项属性比较重要,即pagesize、chipsize和erasesize,驱动就是依据这三项属性来决定对NAND芯片进行擦除,读写等操作时的大小的。其中pagesize即NAND芯片的页大小,一般为256、512或2048;chipsize即NAND芯片的容量;erasesize即每次擦除操作的大小,通常就是NAND芯片的block大小。
4、 nand_ecc.c:
定义了NAND驱动中与softeware ECC有关的函数和结构体,若你的系统支持hardware ECC,且不需要software ECC,则该文件也不需理会。
上面这些内容我是Copy别人的我觉得写得太好了,因为一开始我真的很迷茫,在nand目录下有那么多的文件,到底哪个是值得我读的.我真的不值得,读了这个大神的博客后对NANDDLASH的驱动我不再是那么的迷茫。
三、NANDFLASH的硬件特性 要想读懂后面Linux系统中对NANDFLASH硬件驱动代码,了解NANDFLASH的硬件特性这是再好不过的。
1、NANDFLASH的内部布局
2、Nand Flash的物理存储单元的阵列组织结构(以开发板上的K9F2G08为例)
K9F2G08
的大小是256M
a)block:\是Nand Flash的擦除操作的基本/最小单位\一片NANDFLASH(chip)由很多块
(block)组成,块的大小一般是 128KB, 256KB,512KB,此处是 128KB。。其他的小于 128KB 的,
比如 64KB称之为small block的Nand Flash。
b)page:\是读写操作的最小单位\每一个block里面包又含了许多page(页),每个页的大小,
对于现在常见的Nand Flash多数是2KB,最新的Nand Flash的是4KB、8KB等,这类的页大小大于
2KB的NandFlash,被称作 big block的 Nand Flash,对应的发读写命令地址,一共 5个周期(cycle),
而老的 Nand Flash,页大小是 256B,512B,,这类的 Nand Flash被称作 small block的nandflash
地址周期只有4个。
c)oob:每一个页,对应还有一块区域,叫做空闲区域(spare area)/冗余区域(redundant area)而
Linux 系统中,一般叫做 OOB(Out Of Band),这个区域,是最初基于Nand Flash的硬件特
性:数据在读写时候相对容易错误,所以为了保证数据的正确性,必须要有对应的检测和纠 错机制,此机制被叫做 EDC(Error Detection Code)/ECC(Error Code Correction, 或者 Error
Checking and Correcting),所以设计了多余的区域,用于放置数据的校验值。 Oob 的读写操作,一般是随着页的操作一起完成的,即读写页的时候,对应地就读写了 oob。
关于 oob具体用途,总结起来有: 1、 标记是否是坏快 2、存储ECC数据
3、存储一些和文件系统相关的数据。如 jffs2 就会用到这些空间存储一些
特定信息,
4、而yaffs2 文件系统,会在 oob中,存放很多和自己文件系统相关的信息。
3、K9F2G08的引脚定义
正在阅读:
基于linux的MTD的NANDFLASH设备驱动底层实现原理分析 - 图文09-20
高压电工入网真题2210-19
苏律协发22号-关于进一步加强实习律师管理工作的通知03-29
矿井瓦斯综合治理方案(修改)11-08
湖北烟草责任有限公司组织结构分析07-20
人防工程竣工验收工作汇报及自评意见04-06
2013年9月26日(10至15公斤)仔猪价格行情08-28
基于单片机的的智能药盒的设计 - 图文02-03
室分考试真题2(答案)11-08
- 通信原理实验报告
- 2016年上半年安徽省临床医学检验技术中级技师职称试题
- 传智播客刘意老师JAVA全面学习笔记
- 星级酒店客房部保洁服务标准与工作流程操作规范 - PA新员
- 算法竞赛入门经典授课教案第1章 算法概述
- 《微信公众平台架起家校互通桥》结题报告
- 2018年宁夏银川市高考数学三模试卷(理)Word版含解析
- 大学生创业基础 - 尔雅
- 2016年6月英语六级真题写作范文3套
- 中国磁性材料纸行业专项调查与发展策略分析报告(2015-2020)
- 云南省2018届高三普通高中学业水平考试化学仿真试卷二Word版缺答案
- 窗函数法设计低通滤波器
- 第三章 绩效考评方法与绩效管理模式
- 高等数学教案
- 个人独资合伙企业习题及答案
- 小学语文沪教版三年级上册第六单元第30课《想别人没想到的》公开课优质课教案比赛讲课获奖教案
- 曳引钢丝绳及其他曳引系统校核计算 - 图文
- 淮阴工学院管理学期末试卷7 - 图文
- 受力分析方法(1)
- 2013-2014学年陕西省西安市西工大附小五年级(上)期末数学试卷及解析
- 设备驱动
- 底层
- NANDFLASH
- 原理
- 基于
- 实现
- 图文
- 分析
- linux
- MTD
- 《城市轨道交通工程预算定额》第二册“轨道工程”定额说明
- 2019年全国中学生生物学联赛试题及答案(word精校版)
- 数控技术试题及答案
- 应变片的工作原理
- 人格心理学期末考试卷A(答案)
- 行政执法资格考试重点法条
- flash题目
- 《走一步,再走一步》导学案生用
- 企业筹资管理练习题答案解析资料
- 财务管理的价值观念练习题库
- GB26860-2011题库
- 九年级化学上册《分子和原子》教学案例 新人教版
- 苏教版必修四课文素材提炼
- ENC28J60驱动程序说明
- 铁科院安全生产工作月报(2015.01月)
- 电力工作票填用培训讲义 - 图文
- 曼昆宏观第2、3章作业答案
- 江苏省苏州市2018届高三调研测试数学试题(附解析)
- 聚酯反应每班一题
- 太阳能系统总结