- 1、本文档共46页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于MTD的NAND驱动开发说明
?
大约用了两个礼拜不到的时间为公司的IPcamera系统写了基于MTD的NAND驱动(linux-0内 核),目前已可以在该驱动的支持下跑cramfs和jffs2文件系统,另 外,该驱动也可以同时支持small page(每页512 Byte)和big page(每页2048 Byte)两种NAND芯片。在此整理一下与NAND驱 动相关的概念,结构体,驱动框架和流程,同时分析一下基于MTD的NAND驱动的部分函数,尤其是其中的nand_scan()函数。(涉及到具体NAND芯片时,若不做说明,将以small page的NAND芯片为例。)
?
注:个人理解,有误难免!—— 笔者:曹荣荣
?
?
MTD 驱动程序是专门针对嵌入式Linux的 一种驱动程序,相对于常规块设备驱动程序(比如PC中 的IDE硬盘)而言,MTD驱动程序能更好的支持和管理闪存设备,因为它本身就是专为闪存设备 而设计的。
具体地讲,基于MTD的FLASH驱动,承上可以很好地支持cramfs,jffs2和yaffs等文件系统,启下也能对FLASH的擦除,读写,FLASH坏块以及损耗平衡进行很好的管理。所谓损耗平衡,是指对NAND的擦写不能总是集中在某一个或某几个block中,这是由NAND芯片有限的擦写次数的特性决定的。
总之,在现阶段,要为FLASH设备开发Linux下的驱动程序,那么基于MTD的开发将几乎是省时又省力的唯一选择!
?
一、NAND和NOR的区别
?
Google “Nand Flash和Nor Flash的区别”。
?
简单点说,主要的区别就是:
?
1、? NAND比NOR便宜;NAND的容量比NOR大(指相同成 本);NAND的擦写次数是NOR的十倍;NAND的擦除和写入速度比NOR快,读取速度比NOR稍 慢;
?
2、? NAND和NOR的读都可以以字节为单位,但NAND的写以page为 单位,而NOR可以随机写每一个字节。NAND和NOR的擦除都以block为单位,但一般NAND的block比NOR的block小。另外,不管是NAND还 是NOR,在写入前,都必须先进行擦除操作,但是NOR在擦除前要先写0;
?
3、? NAND不能在片内运行程序,而NOR可以。但目前很多CPU都可以在上电时,以硬件的方式先将NAND的第一个block中的内容(一般是程 序代码,且也许不足一个block,如2KB大小)自动copy到ram中,然后再运行,因此只要CPU支持,NAND也可以当成启动设备;
?
4、? NAND和NOR都可能发生比特位反转(但NAND反转的几率远大于NOR), 因此这两者都必须进行ECC操作;NAND可能会有坏块(出厂时厂家会对坏块做标记),在使用过程中也还有可能会出现新的坏块,因此NAND驱动必须对坏块进行管理。
?
二、内 核树中基于MTD的NAND驱动代码的布局
?
在Linux内 核中,MTD源代码放在linux-0/driver/mtd目录中,该目录中包含chips、devices、maps、nand、onenand和ubi六 个子目录。
?
其中只有nand和onenand目录中的代码才与NAND驱动相关,不过nand目录中的代码比 较通用,而onenand目录中的代码相对于nand中的代码而言则简化了很多,它是针对三星公司开发的另一类Flash芯片,即 OneNAND Flash。我尚未对OneNand FLASH有过研究,只是通过网上资料得知,OneNand FLASH克服了传统NAND Flash接口复杂的缺点,具有接口简单、读写速度快、容量大、寿命长、成本低等优点,因此应该是一种较常用NAND先进的FLASH吧,只是目前似乎普 及率并不高,本文也将不做讨论。
?
因此,若只是开发基于MTD的NAND驱动程序,那么我们需要关注的 代码就基本上全在linux-0/drivers/mtd/nand目 录中了,而该目录中也不是所有的代码文件都与我们将要开发的NAND驱动有 关,除了Makefile和Kconfig之外,其中真正与NAND驱动有 关的代码文件只有6个,即:
?
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
您可能关注的文档
- 毕业论文(设计)-基于jsp技术_网上购物系统_.doc
- 毕业论文(设计)-基于jsp的小型旅游网站设计大学生毕业设计(含源文件).doc
- 毕业论文(设计)-基于jsp的网上购物系统 .doc
- 毕业论文(设计)-基于labview的厨房监测系统测控技术与仪器 (论文)文献综述.doc
- 毕业论文(设计)-基于labview的电机实验系统的研究和设计 .doc
- 毕业论文(设计)-基于labview的虚拟数字滤波器设计 .doc
- 毕业论文(设计)-基于linux的嵌入式lcd驱动程序.doc
- 毕业论文(设计)-基于lucene本地搜索程序概要设计 .doc
- 毕业论文(设计)-基于mastercam建模与仿真加工 .doc
- 毕业论文(设计)-基于mastercam的鼠标造型与加工 .doc
文档评论(0)