linux flash驱动程序,Linux下NAND FLASH驱动开发

但是由于物理制程 /制造方面的原因,导致 nor和 nand在一些具体操作方面的特性不同:本文引用地址:http://www.eepw.com.cn/article/201610/305625.htm

0e67566a8e9bde2563609cb2d32faca5.png

表1:Nand Flash 和 Nor Flash 的区别

1. 理论上是可以的,而且也是有人验证过可以的,只不过由于 nand flash 的物理特性,不能完全保证所读取的数据 / 代码是正确的,实际上,很少这么用而已。因为,如果真是要用到 nand flash 做 XIP ,那么除了读出速度慢之外,还要保证有数据的校验,以保证读出来的,将要执行的代码 / 数据,是正确的。否则,系统很容易就跑飞了。

2. 芯片内执行 (XIP, eXecute In Place) :

http://hi.baidu.com/serial_story/blog/item/adb20a2a3f8ffe3c5243c1df.html

【 Nand Flash 的种类】

具体再分,又可以分为

1)Bare NAND chips :裸片,单独的 nand 芯片

2)SmartMediaCards : = 裸片 + 一层薄塑料,常用于数码相机和 MP3 播放器中。之所以称 smart ,是由于其软件 smart ,而不是硬件本身有啥 smart 之处。 ^_^

3)DiskOnChip :裸片 +glue logic , glue logic= 硬件 ECC 产生器 + 用于静态的 nand 芯片控制的寄存器 + 直接访问一小片地址窗口,那块地址中包含了引导代码的 stub 桩,其可以从 nand flash 中拷贝真正的引导代码。

【 spare area/oob 】

Nand 由于最初硬件设计时候考虑到,额外的错误校验等需要空间,专门对应每个页,额外设计了叫做 spare area 空区域,在其他地方,比如 jffs2 文件系统中,也叫做 oob ( out of band )数据。

其具体用途,总结起来有:

1. 标记是否是坏快

2. 存储 ECC 数据

3. 存储一些和文件系统相关的数据,如 jffs2 就会用到这些空间存储一些特定信息, yaffs2 文件系统,会在 oob 中,存放很多和自己文件系统相关的信息。

2. 软件方面

如果想要在 Linux 下编写 Nand Flash 驱动,那么就先要搞清楚 Linux 下,关于此部分的整个框架。弄明白,系统是如何管理你的 nand flash 的,以及,系统都帮你做了那些准备工作,而剩下的,驱动底层实现部分,你要去实现哪些功能,才能使得硬件正常工作起来。

【内存技术设备, MTD ( Memory Technology Device )】

MTD ,是 Linux 的存储设备中的一个子系统。其设计此系统的目的是,对于内存类的设备,提供一个抽象层,一个接口,使得对于硬件驱动设计者来说,可以尽量少的去关心存储格式,比如 FTL , FFS2 等,而只需要去提供最简单的底层硬件设备的读 / 写 / 擦除函数就可以了。而对于数据对于上层使用者来说是如何表示的,硬件驱动设计者可以不关心,而 MTD 存储设备子系统都帮你做好了。

对于 MTD 字系统的好处,简单解释就是,他帮助你实现了,很多对于以前或者其他系统来说,本来也是你驱动设计者要去实现的很多功能。换句话说,有了 MTD ,使得你设计 Nand Flash 的驱动,所要做的事情,要少很多很多,因为大部分工作,都由 MTD 帮你做好了。

当然,这个好处的一个“副作用”就是,使得我们不了解的人去理解整个 Linux 驱动架构,以及 MTD ,变得更加复杂。但是,总的说,觉得是利远远大于弊,否则,就不仅需要你理解,而且还是做更多的工作,实现更多的功能了。

此外,还有一个重要的原因,那就是,前面提到的 nand flash 和普通硬盘等设备的特殊性:

有限的通过出复用来实现输入输出命令和地址 / 数据等的 IO 接口,最小单位是页而不是常见的 bit ,写前需擦除等,导致了这类设备,不能像平常对待硬盘等操作一样去操作,只能采取一些特殊方法,这就诞生了 MTD 设备的统一抽象层。

MTD ,将 nand flash , nor flash 和其他类型的 flash 等设备,统一抽象成 MTD 设备来管理,根据这些设备的特点,上层实现了常见的操作函数封装,底层具体的内部实现,就需要驱动设计者自己来实现了。具体的内部硬件设备的读 / 写 / 擦除函数,那就是你必须实现的了。

e9a6ecfec52b68852b45791b1f087099.png

表 2.MTD 设备和硬盘设备之间的区别

多说一句,关于 MTD 更多的内容,感兴趣的,去附录中的 MTD 的主页去看。

关于 mtd 设备驱动,感兴趣的可以去参考

MTD 原始设备与 FLASH 硬件驱动的对话

MTD 原始设备与 FLASH 硬件驱动的对话 - 续

那里,算是比较详细地介绍了整个流程,方便大家理解整个 mtd 框架和 nand flash 驱动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值