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

转载地址:http://blog.sina.com.cn/s/blog_87f8cc4e0102vbx5.html

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则更适合存储大量的高密度的数据。

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一
        u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一

下面我们根据HY27UF082G2B的datasheet从以下几个方面详细说明:

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

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一

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

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一
 

由上表可知,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控制相关引脚见下图:

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一

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

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一
 

在这里还介绍一下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的存储单元组织结构

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一
 

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

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

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一
 

1、 HY27UF082G2B的访问地址序列

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

HY27UF082G2B地址序列表见下图:

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一
 

上图中的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各操作的命令序列:

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一
 

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

令序列和操作方法作出详细说明,其他操作的操作方法具体参见datasheet。

4.1) READ1——读页

读页操作有两个命令序列,命令字分别为00h、30h。读页操作的流程图见下图:

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一
 

整个流程比较简单,先写读页操作的第一个命令序列的命令字00h,然后写页地址(注意:这里的页地址是指页面的开始地址,此时页内地址A0~A11都应为0),然后写第二个命令序列的命令字30h。再读取状态寄存器的位0,为1后就可以从NFDATA连续读出页内数据。注:流程图有一点错误:它没有读取并判断状态寄存器)。

值得注意的是:这里的操作流程仅仅是读页操作,如果要在驱动程序中读出页中数据(即读NAND flash)比读页复杂得多,必须先要初始化NAND flash、判断坏块,进行ECC校验等一系列操作。这些操作这里不详述,在后面编写驱动程序时再详细分析。这里只分析读页操作是因为在移植从NAND flash启动是只需要读页操作,其他的操作在移植NAND flash驱动时再做分析。

4.2) PAGE PROGRAM——写页

写页操作同样也有两个命令序列,命令字分别为:80h、10h。写页操作流程图如下:

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一
 

操作流程为:先写命令字80h再写页地址(注意:这里的页地址是指页面的开始地址,此时页内地址A0~A11都应为0),接着将要写的数据写到全部依次NFDATA寄存器(这些数据会写到芯片内的写缓冲区),再通过读取状态寄存器及I/O0判断写页是否正确完成。

4.3) BLOCK ERASE——擦除块

同样也有两个命令序列,命令字分别为60h、D0h,擦除块流程图如下:

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一

操作流程为:写命令字60h后再写块地址(块开始地址)然后写命令字d0h,再读取状态寄存器及I/O0判断是否擦除成功。

4.4) READID——读ID

读设备ID只有一个命令字90h,先向命令寄存器写入90h再向地址寄存器写入00h可启动读ID操作,后续连续5次读取数据寄存器操作可以读出5个包含了全部id内容的数据。这5个数据内容如下:

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一

第一个读取的数据为厂商ID,第二个读取的数据为设备ID。第三个读取的数据组织结构见下表:

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一

bit0:1为芯片封装类型,bit2:3为芯片制程类型(SLC还是MLC),bit4:5为同时写页数,bit6、7不明。第三个读ID数据反应的内容并不常用。

第四个读ID数据组织结构如下图:

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一
 

bit0:1为芯片的页面容量,bit2为oob区大小,bit3、7表征串行访问时间、bit4:5表示芯片块容量、bit6表示芯片位宽。第四个读ID数据给出的信息很重要,请注意。

第五个读ID数据组织结构如下图:

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一
 

bit2:3表示芯片的分层数,bit4:6表示芯片单层容量。第五个读ID数据主要反应了芯片的分层信息,在进行分层操作时这个数据比较重要。

对一个nandflash而言,读ID获得的数据是个固定值,它反应了芯片的固有特性。

HY27UF082G2A的读ID数据如下图:

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一
 

4.5)READ STATUS REGISTER——读状态寄存器

读状态寄存器只有一个命令序列70h,向命令寄存器写70h后获取芯片的状态有两种方式:

1、读状态寄存器:状态寄存器的bit0指示了芯片的状态,为1时就绪,为0是忙; 2、读数据寄存器:I/O0~7指示状态如下:

u-boot中NAND <wbr>flash的MTD驱动移植(转) <wbr>一

Bit6指示了芯片的状态,bit0指示了烧写、擦除的状态:0为完成,1为出错。关于这点在烧写、擦除流程图中表述得很清楚。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本系统的研发具有重大的意义,在安全性方面,用户使用浏览器访问网站时,采用注册和密码等相关的保护措施,提高系统的可靠性,维护用户的个人信息和财产的安全。在方便性方面,促进了校园失物招领网站的信息化建设,极大的方便了相关的工作人员对校园失物招领网站信息进行管理。 本系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有注册、查看信息、留言信息等功能,管理员具有修改用户信息,发布寻物启事等功能。 管理员可以选择任一浏览器打开网址,输入信息无误后,以管理员的身份行使相关的管理权限。管理员可以通过选择失物招领管理,管理相关的失物招领信息记录,比如进行查看失物招领信息标题,修改失物招领信息来源等操作。管理员可以通过选择公告管理,管理相关的公告信息记录,比如进行查看公告详情,删除错误的公告信息,发布公告等操作。管理员可以通过选择公告类型管理,管理相关的公告类型信息,比如查看所有公告类型,删除无用公告类型,修改公告类型,添加公告类型等操作。寻物启事管理页面,此页面提供给管理员的功能有:新增寻物启事,修改寻物启事,删除寻物启事。物品类型管理页面,此页面提供给管理员的功能有:新增物品类型,修改物品类型,删除物品类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值