u-boot中NAND flash的MTD驱动移植

2025-10-03

u-boot中NAND flash的MTD驱动移植

u-boot中移植了linux中的MTD驱动源码来支持NAND flash擦除、烧写及读的驱动。MTD(memory technology device内存技术设备)是用于访问flash设备的Linux的子系统。MTD的主要目的是为了使新的存储设备的驱动更加简单并有通用接口函数可用。

MTD驱动可支持CFI接口的norflash驱动、NAND flash驱动。我们知道NAND flash的访问接口并没有像norflash一样提供了一个标准的CFI访问接口,但是NAND flash生产厂家之间在各品牌、各型号NAND falsh芯片的访问接口方面做了一些约定俗成规定,如命令字、地址序列、命令序列、坏块标记位置、oob区格式等。

值得注意的是:在工艺制程方面分NAND flash有两种类型:MLC和SLC。MLC和SLC属于两种不同类型的NAND FLASH存储器。SLC全称是Single-Level Cell,即单层单元闪存,而MLC全称则是Multi-Level Cell,即为多层单元闪存。它们之间的区别,在于SLC每一个单元,只能存储一位数据,MLC每一个单元可以存储两位数据,MLC的数据密度要比SLC 大一倍。在页面容量方面分NAND也有两种类型:大页面NAND flash(如:HY27UF082G2B)和小页面NAND flash(如:K9F1G08U0A)。这两种类型在页面容量,命令序列、地址序列、页内访问、坏块标识方面都有很大的不同,并遵循不同的约定所以在移植驱动时要特别注意。

下面以大页面的NAND flash:现代 HY27UF082G2B为例介绍一下NAND flash一些基本情况,再来介绍MTD驱动的基本结构及流程分析,最后介绍u-boot中MTD驱动移植的详细步骤:

3.4.1)NAND flash一些基本情况

fl2400开发板上的nandflash芯片型号为:现代 HY27UF082G2B,下面先介绍一下nandflash,及norflash与nandflash之间的区别:

NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,它最重要得特征是支持片上执行,彻底改变了原先由EPROM和EEPROM一统非易失闪存天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,每比特更低的成本,更高的容量,并且象磁盘一样可以通过接口轻松升级。NOR flash更适合用来存储少量的关键的代码和数据,而NAND falsh则更适合存储大量的高密度的数据。

下表说明了norflash与nandflash之间的差异: Norflash Nandflash 性能项目 容量 通常为1~4MB,最大为32MB 8MB~512MB 片上执行 支持,可以直接在其上启动不支持,读要驱动。仅三星芯片支持steppingstonebootloader 技术外,其他芯片必须搭配norflash启动bootloader 可靠性 比较高,位反转机率为比较低,位反转很常见,必须要有校验措施。推荐使用EDC/ECC算法进行错误检查和恢复,这也导nandflash的1/10 致了对nandflash的管理和编写驱动程序更为复杂。 访问接口 与RAM、eeprom相同,地址线地址、数据、命令并用I/O线,通过各使能引脚区和数据线分开,并行访问,可分地址、数据及命令,串行访问,必须顺序访问 随机访问 8K~64K 块大小(擦除64K~128K 单位) 块擦除时间 5S,很慢 3ms,快 读写速度 烧写慢,读快 读、烧写都很快 可擦除次数 1~10万次 10~100万次 主要用途 保存代码和关键数据 保存大量的高密度数据 Jffs2 yaffs 文件系统支持 价格 高 低 下面我们根据HY27UF082G2B的datasheet从以下几个方面详细说明: 3..) HY27UF082G2B概述

HY27UF082G2B,48脚TSOP1封装,容量2Gbit(256MB),位宽8位,地址、数据及命令复用I/O0~7。芯片封装图如下(截图自HY27UF082G2B datasheet):

从上图中可以看出:48个引脚中大部分没有用(NC),由于数据线复用所以HY27UF082G2B的真正需要连接引脚并不多。下表是HY27UF082G2B连接引脚功能表:

引脚名称 引脚功能 I/O0~I/O7 数据输入/输出 CLE 命令锁存使能 ALE 地址锁存使能 CE 片选使能 WE 写使能 RE 读使能 WP 写保护 R/B 就绪/忙信号输出 VCC 电源 VSS 地 NC 不接

由上表可知,HY27UF082G2B与S3C2440的连线比较少:8个I/O引脚、5个使能引脚(CLE、ALE、CE、WE、RE)、1个写保护引脚(WP)、1个状态引脚(R/B)。地址、数据、命令都是在这些使能信号的配合下,通过8个I/O引脚传输。写地址、数据、命令时,CE、WE信号必须为低电平,他们在WE信号的上升沿被锁存。命令锁存使能信号CLE和

(总地址锁存信号ALE用来区分I/O引脚上传输的是命令还是地址。其他BUS OPERATION

线操作)在datasheet的11页有详细描述,这里不再赘述。

由上可知,对芯片的总线操作必须要有各使能信号的配合,但是这些使能信号控制不需要用户的驱动程序干预。S3C2440中的NAND flash控制器将自动根据用户读写NAND falsh控制寄存器(写的是命令寄存器NFCMD,还是地址寄存器NFADDR,还是读的数据寄存器NFDATA等等)的情况在NAND flash控制相关引脚输出正确的使能信号,用户要做的就是将S3C2440上NAND flash控制相关引脚连正确接到HY27UF082G2B的使能引脚上。S3C2440上NAND flash控制相关引脚见下图:

除5个使能信号外,HY27UF082G2B的状态引脚也应该连接到s3c2440的NAND flash控制相关引脚FRnB上。NAND flash芯片与S3C2440 硬件连线见下图,该截取至飞凌提供的官方硬件接线原理图:

在这里还介绍一下S3C2440的NAND flash控制器相关的寄存器: 1、 NFCONF:NAND flash配置寄存器1

设置时序参数TACLS、TWRPH0、TWRPH0; 2、 NFCONT:NAND flash配置寄存器2

使能禁止NAND控制器、使能禁止引脚信号nFCE、初始化ECC; 3、 NFCMD:NAND flash命令寄存器

写该寄存器时向NAND flash芯片发出命令信号; 4、 NFADDR:NAND flash地址寄存器

写该寄存器时向NAND flash芯片发出地址信号; 5、 NFDATA:NAND flash数据寄存器

读写该寄存器时向NAND flash芯片读出或写入数据信号; 6、 NFSTAT:NAND flash状态寄存器

仅用到位0,0:busy,1:ready

这里只简单介绍了一些重要的寄存器,还有很多的寄存器没有介绍到。比如:与NAND flash控制器提供的ECC硬件生产功能相关寄存器等,详见S3C2440 datasheet。

3..) HY27UF082G2B的存储单元组织结构

NAND flash跟norflash不同,NAND Flash的读取和烧录以(page)页为基础, 而NOR却是以字节或字为基础。擦除都是以块为单位。

NAND Flash存储器由block (块) 构成, block的基本单元是page (页)。每个页面又包含了一个Data area(数据存储区域)和一个Spare area(备用区域),小页面的NAND Flash器件每个page (页)内包含512个字节的Data area(数据存储区域)和16字节Spare area(备用区域)。大页面的NAND Flash器件每一个page (页)内包含2048个字节的Data area(数据存储区域)和64字节的Spare area(备用区域)。HY27UF082G2B为大页面NAND flash。下图是HY27UF082G2B的存储单元组织结构:

图中划红线处为8位宽的的HY27UF082G2B存储单元组织结构。可以看出一个芯片包含了2048个块,一个块包含了64个页,而一个页包含了2048字节的数据存储区和64字节的备用区域。

下图形象的表示了HY27UF082G2B的存储单元组织结构(注意:该图中只有1024个块):

可以看出一个HY27UF082G2B芯片包括了1Gbit(256MB)的数据存储区和256Mbit(32MB)的备用区。

1、 HY27UF082G2B的访问地址序列

HY27UF082G2B总共的容量为288MB(256MB+32MB),8位位宽,需要29位的访问地址。但芯片只提供了8根地址线(复用),明显不足。所以对HY27UF082G2B访问时,访问地址被分割成5个地址序列,这5个地址序列中的前两个为页内地址,后三个为页面地址。两个页内地址序列有效地址位为12位,以满足对页内2048+64字节空间的访问;后三个地址序列有效地址为17位,以满足对一个芯片内共2048(块)*64(页)个页面的访问。

HY27UF082G2B地址序列表见下图:

上图中的L表示无效地址设为低电平。在实际驱动程序编程时用户必须严格按照这五个地址序列来向NFADDR寄存器中分别写入每个序列地址。也就是说用户发出一个完整的访问地址必须写5次NFADDR寄存器。

值得注意的是:小页面NAND flash仅仅提供了一个地址序列,8个访问地址位来访问512+16字节的页内空间,访问地址位明显足。所以小页面NAND flash将页内地址分割成A、B、C三个区,分别用不同的读命令进行访问,以弥补页内访问地址序列地址位不足的缺陷。相对而言,大页面NAND flash它为页内地址访问提供了足够的地址序列和访问地址位(12位地址访问2048+64字节空间,足够了),所以大页面NAND flash对页内地址的访问也更为简洁。

2、 HY27UF082G2B的操作命令序列和操作实现

前面提到过: NAND Flash的读取和烧录以(page)页为基础,擦除以块为单位。那么,在NAND Flash上有三种基本的操作:读取一个页, 烧录一个页和擦除一个块,这三个基本操作有各自的命令序列。实际上,大多数NAND Flash除提供了这三个基本操作外,还提供了很多其他的操作及操作命令序列,如:HY27UF082G2B就提供了Multi Plane

Program(多层烧写)、Multi Plane Erase(多层擦除)、Copy-back Program(同层页复制)、Multi-Plane Copy-Back Program(多层同层页复制)、Multi Plane Erase(多层擦除)、EDC Operation(ECD操作)、reset(复位)等操作。

如上涉及到了一个层的概念,什么是层?层就是将芯片各块平均分配到块组,如:块编号为奇数为一组,块编号为偶数的分为一组,这样的块组就叫层。层有这样的特性:用户可对不同层中的块同时进行擦除和烧写甚至复制。HY27UF082G2B中的块分成了2个层,有些NAND flash分成了4个层。明显,分层操作能成倍提高烧写、擦除速度。

下图是HY27UF082G2B各操作的命令序列:

红线处为HY27UF082G2B的五种基本操作。下面就这五种基本操作中的读页操作的命


u-boot中NAND flash的MTD驱动移植.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:实验指导书下载doc-《计算在社会经济中的应用》实验指导

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219