基于SEP4O20的Linux NandFlash驱动设计

基于SEP4O20的Linux NandFlash驱动设计,第1张

 

  本文首先给出了NandFlash的硬件特点,分析了Linux MTD层(Memow Technology Device)的特性,基于东南大学国家ASIC中心自主设计的嵌入式微处理器芯片SEP4020,给出了Linux下NandFlash驱动的详细设计方案。实验结果表明,基于这种驱动方案的NandFlash能进行有效的文件管理和稳定、快速的读写功能,非常适合于嵌入式产品的应用。

  本文以东南大学自主设计的东芯SEP4020微处理器的为基础,分析NandFlash的内部结构和Linux MTD层的框架,并基于这些研究提出了NandFlash驱动的设计和实现。

  1 NandFlash的硬件特点

  

基于SEP4O20的Linux NandFlash驱动设计,第2张

 

  同时由于工艺限制,NAND闪存中允许存在坏块。NAND闪存的每一页有16B(页长度512B)的OOB区用来存放ECC校验数据,ECC有效标志,坏块标志等。所有这些决定了于NAND的存储系统设计需要处理不同于其它类型闪存特有问题。

  2 MTD的NAND结构

  Linux MTD层是Linux *** 作系统和存储介质之间的一个适配层。MTD是Linux的一个子集,用来作为具体的硬件设备驱动和上层文件系统的桥梁。MTD层有两个非常显著的优异点:

  

基于SEP4O20的Linux NandFlash驱动设计,第3张

 

  (1)简化驱动的开发。设计基于MTD的驱动,所需要做的事情就是按照标准的公共接口函数的接口,根据微处理器NandFlash控制器的不同做适当的修改,而无需去理会字符(块)设备驱动设计标准,因为所有这些复杂的与内核的交互接口机制mtd已经做好了,开发行的精力只需要集中在实现对物理设备的范围控制。

  (2)NandFlash使用环境的独立性。上层应用只需要访问mtd抽象层提供的字符设备方式或者块设备方式来访问mtd设备,因此具体驱动对于上层应用来说是具有独立性的,即使底层驱动修改了,上层拥有也不需要改动。并且由于mtd抽象层,上层应用就可以避免直接对具体硬件 *** 作,而是对mtd *** 作,这样,这些应用就不是建立在某个具体的设备上,更好地实现了通用性和兼容性。

  mtd抽象层用一个数组struct mtd_info*mtd_table[MAX_MTD_DEVICES]保存系统中所有的设备,mtd设备利用struct mtd_info这个结构来描述,该结构中描述了存储设备的基本信息和具体 *** 作所需要的内核函数,mtd系统的那个机制主要就是围绕这个结构来实现的。

  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2713165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存