300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > NAND Flash控制器访问NAND Flash的方法

NAND Flash控制器访问NAND Flash的方法

时间:2020-12-22 17:00:38

相关推荐

NAND Flash控制器访问NAND Flash的方法

本章目标:

1) 了解NAND Flash芯片的接口

2) 掌握通过NAND Flash控制器访问NAND Flash的方法

u Flash介绍

常用的Flahs类型有NOR Flash和NAND Flash两种。NOR Flash由Intel公司在1988年发明,以替代当时在市场上占据主要地位的EPROM和E2PROM。NAND Flash由Toshiba公司在1989年发明的。

NOR Flash支持XIP,即代码可以直接在NOR Flash上执行,无需复制到内存中。这是由于NOR Flash的接口与RAM完全相同,可以随机访问任意地址的数据。在NOR Flash上进行读操作的效率非常高,但是擦除和写操作的效率非常低。另外,NOR Flash的容量一般比较小,NAND Flash进行擦除和写操作的效率更高,并且容量更大。一般页言,NOR Flash用于存储程序,NAND Flash用于存储数据。基于NANDFlash的设备通常也要搭配NOR Flash以存储程序。

Flash存储器件由擦除单元(也称为块)组成,当要写某个块时,需要确保这个块已经被擦除。NOR Flash的块大小范围为64KB - 128KB;NAND Flash的块大小范围为8KB - 64KB,擦/写一个NOR Flash块需要4s,而擦/写一个NAND Flash块仅需要2ms,NOR Flash的块太大,不仅增加了擦写时间,对于给定的写操作,NOR Flash也需要更多的擦除操作——特别是小文件,比如一个文件只有1KB,但是为了保存它却需要擦除大小为64KB-128KB的NOR Flash块。

NOR Flash的接口与RAM完全相同,可以随意访问任意地址的数据。而NAND Flash的接口仅仅包含几个I/O引脚,需要串行地访问。NAND Flash一般以512字节为单位进行读写。这使得NOR Flash适合于运行程序,而NAND Flash更适合存储数据。

容量相同的情况下,NAND Flash的体积更小,对于空间有严格要求的系统,NAND Flash可以节省更多的空间。

对于Flash存储器件的可靠性需要考虑3点:位反转、坏块和可擦除次数。所有Flash器件都遭遇位反转的问题:由于Flash固有的电器特性,在读写数据过程中,偶然会产生一位或几位的数据错误(这种概率很低),而NAND Flash出现的概率远大于NOR Flash。当位反转发生在关键代码或数据上时,有可能导致系统崩溃。当仅仅是报告位反转,重新读取即可;如果确实发生了位反转,则必须有相应的错误检测和恢复措施。在NAND Flash上发生位反转的概率更高,推荐使用EDC/ECC进行错误检测和恢复。NAND Flash上会有坏块随机分布,在使用前需要将坏块扫描出来,确保不再使用它们,否则会使产品含有严重的故障。NAND Flash每块的可擦除次数通常在100000次左右,是NOR Flash的10倍。另外,因为NAND Flashr的块大小通常是NOR Flash的1/8,所以NAND Flash的寿命远远超过NOR Flash。

嵌入式Linux对NOR、NAND Flash的软件支持都很成熟。在NOR Flash上常用jffs2文件系统,而在NAND Flash上常用yaffs文件系统。在更底层,有MTD驱动程序实现对它们的读、写、擦除操作,它也实现了EDC/ECC校验。

u NAND Flash访问方法

K9F1208U0M容量为528Mbit,分为131072行(页)、528列,每一页大小为512字节,外加16字节的额外空间,这16字节额外空间的列地址为512 - 527。

命令、地址、数据都是通过8个I/O口输入/输出,这种形式减少了芯片的引脚个数,并使得系统很容易升级到更大的容量。写入命令、地址和数据时,都需要将WE#、CE#信号同时拉低。数据在WE#信号的上升沿被NAND Flash锁存:命令锁存信号CLE、地址锁存信号ALE用来分辨、锁存命令或地址。K9F1208U0M的64MB存储空间需要26位地址,因此以字节为单位访问Flash时需要4个地址序列:列地址、行地址的低位部分、行地址的高位部分。读/写页在发出命令后,需要4个地址序列,而擦除块在发出擦除命令后仅需要3个地址序列。

NAND Flash与S3C2410/S3C2440的连线比较少,8个I/O引脚(IO0 - IO7)、5个使能信号(nWE、ALE、CLE、nCE、nRE)、1个状态引脚(RDY/B)、1个写保护引脚(nWP)。地址、数据和命令都是在这些使能信号的配合下,通过8个I/O引脚传输。写地址,数据、命令时,nCE、nWE信号必须为低电平,它们在nWE信号的上升沿被锁存。命令锁存使能信号CLE和地址锁存信号ALE用来区分I/O引脚上传输的是命令还是地址。

操作NAND Flash时,先传输命令,然后传输地址,最后读/写数据,期间要检查Flash的状态。对于K9F1208U0M,它的容量为64MB,需要一个26位的地址。发出命令后,后面要紧跟着4个地址序列。比如读Flash时,发出读命令和4个地址序列后,后续的读操作就可以得到这个地址及其后续地址的数据。相应的命令字和地址序列如表8.2、8.3所示。

K9F1208U0M一页大小为528字节,而列地址A0 - A7可以寻址的范围是256字节,所以必须辅以其它手段才能完全寻址这528字节。将一页分为A、B、C三个区,A区为0 - 255字节,B区为256 - 511字节,C区为512 - 527字节。访问某页时,需要选定特定的区,这称为“使地址指针指向特定的区”。这通过3个命令来实现:命令00h让地址指针指向A区,命令01h让地址指针指向B区,命令50h让地址指针指向C区。命令00h和50h会让访问Flash的地址指针一直从A区或C区开始,除非发出了其他的修改地址指针的命令。命令01h的效果只能维持一次,当前的读、写、擦除、复位或者上电操作完成后,地址指针重新指向A区。写A区或C区的数据时,必须在发出命令80h之前发出命令00h或50h;写B区的数据时,发出命令01h后必须紧接着就发出命令80h。

u 下面讲解表8.2的命令字

(1)Read 1:命令字为00h或01h

发出命令00h或01h后,就选定了读操作是从A区还是B区开始。从表8.3可知,列地址A0 - A7可以寻址的范围是256字节,命令00h和01h使得可以在512字节大小的页内任意寻址——这相当于A8被命令00h设为0,而被命令01h设定为1。

发出命令字后,依据表8.3发出4个地址序列,然后就可以检测R/nB引脚以确定Flash是否准备好。如果准备好,就可以发起读操作依次读入数据。

(2)Read 2:命令字为50h

与Read 1命令字类似,不过读取的是C区数据,操作序列为:发出命令字50h、发出4个地址序列、等待R/nB引脚为高,最后读取数据。不同的是,地址序列中A0 - A3用于设定C区(大小为16字节)要读取的起始地址,A4 - A7被忽略。

(3)Read ID:命令字为90h

发出命令字90h,发出4个地址序列(都设定为0),然后就可以连续读入5个数据,分别表示厂商代码(对一SAMSUNG公司为Ech)、设备代码(对于K9F1208U0M为76h)、保留的字节(对于K9F1208U0M为A5h)、多层操作代码(C0h表示支持多层操作)。

(4)Reset:命令字为FFh

发出命令字FFh即可以复位NAND Flash芯片。如果芯片正处于读、写、擦除状态,复位命令会终止这些命令。

(5)Page Program(True):命令字分两个阶段,80h和10h

NAND Flash的写操作一般是以页为单位的,但是可以只写一页中的一部分。发出命令字80h后,紧接着是4个地址序列,然后向Flash发送数据(最大可以达到528字节),然后就可以通过读状态命令70h获知当前写操作是否完成、是否成功。

(6)Page Program(Dummy):命令字分两阶段,80h和11h

NAND Flash K9F1208U0M分为4 个128Mbit的存储层(plane),每个存储层包含1024个block和528字节的寄存器。这使得可以同时写多个页(page)或者同时擦除多个块(block)。块的地址经过精心安排,可以在4个连续的块内同时进行写或者擦除操作。

命令Page Program(Dummy)正是在这种结构下对命令Page Program(True)的扩展,后者仅能对一页进行写操作,前者可以同时写4页。

发出命令字80h、4个地址序列及最多528字节的数据之后,发出命令字11h(11h称为“Dummy Page Program command”,相对地,10h被称为“True Page Program Command”);接着对相邻层(plane)上的页进行同样的操作;仅在第4页的最后使用10h替代11h,这样即可启动Flash内部的写操作。此时可以通过命令71h获知这些写操作是否完成、是否成功。

(7)Copy-Back Program(True):命令字分为3个阶段,00h、8Ah、10h。

此命令用于将一页复制到同一层(plane)内的另一页,它省略了读出数据源,新数据重新载入Flash,这使得效率大为提高。此命令有两个限制:源页、目的页必须在同一个层(plane)中,并且源地址、目的地址的A14和A15必须相同。

首先发出命令Read 1(00h)、4个源地址序列,此时源页的528字节数据很快就被读入内部寄存器中;接着发出命令字8Ah(Page-Copy Data-input command),随之发出4个目的地址序列;最后发出命令字10h启动对目的页的写操作。此后可以使用命令70h来查看此操作是否完成,是否成功。

(8)Copy-Back Program(Dummy):命令字分3个阶段,03h、8Ah、11h。

与命令Page Program(Dummy)类似,Copy-Back Program(Dummy)可以同时启动对多达4个连续plane内的Copy-Back Program操作。

首先发出命令字00h、源页地址,这使得源页的528字节数据被读入所在plane的寄存器;对于随后的其它plane的源页,发出命令字03h的相应的源页地址将数据读入该plane的寄存器;按照前面说明读出最多4个页的数据到寄存器后,发出命令字8Ah、目的地址、命令字11h,在发出最后一页的地址后,用10h代替11h以启动写操作。

(9)Block Erase:命令字分3个阶段,60h、D0h。

此命令用于擦除NAND Flash块(block,大小为16KB)。发出命令字60h之后,发出block地址——仅需要3个地址序列,并且A9 - A13被忽略。

(10)Multi-Plane Block Erase:60h ------60h D0h

此命令用于同时擦除不同plane中的块。发出命令字60h之后,紧接着发出block地址序列,如此最多可以发出4个block地址,最后发出命令字D0h启动擦除操作。

(11)读状态命令有以下两种:

1、Read Status:命令字为70h

2、Read Multi-P;ane Status:命令字为71h

Flash中有状态寄存器,发出命令字70h或者71h之后,启动读操作即可读入此寄存器。

u S3C2410/S3C2440 NAND Flash控制器介绍

NAND Flash控制器提供几个寄存器来简化对NAND Flash的操作,比如要发出读命令时,只需要往NFCMD寄存器中写入0即可,NAND Flash控制器会自动发出各种控制信号。

1、操作方法概述

访问NAND Flash时需要先发出命令,然后发出地址序列,最后读/写数据;需要使用各种使能信号来分辨是命令、地址还是数据。S3C2410的NAND Flash控制器提供了NFCONF、NFCMD、NFADDR、NFDATA、NFSTAT和NFECC等6个寄存器来简化这些操作。S3C2440的NAND Flash控制器则提供了NFCONF、NFCONT、NFCMMD、NFADDR、NFDATA、NFSTAT和其它与ECC有关的寄存器。对NAND Flash控制器的操作,S3C2410和S3C2440有一些小的差别:有些寄存器不一样,有些寄存器内容不一样,这在实例程序中会体现出来。

NAND Flash的读写操作次序如下:

(1)设置NFCONF(对于S3C2440,还要设置NFCONT)寄存器,配置NAND Flash。

(2)向NFCMD寄存器写入命令,这些命令可以参考表8.2。

(3)向NFADDR寄存器写入地址。

(4)读/写数据:通过寄存器NFSTAT检测NAND Flash的状态,在启动某个操作后,应该检测R/nB信号以确定该操作是否完成、是否成功。

下面讲解这些寄存器的功能和用法:

(1)NFCONF:NAND Flash配置寄存器

这个寄存器在S3C2410、S3C2440上功能有所不同。

S3C2410的NFCONF寄存器被用来使能禁止NAND Flash控制器、使能禁止控制引脚信号nFCE、初始化ECC,设置NAND Flash的时序参数等。

(2)NFCONT:NAND Flash控制寄存器,S3C2410没有这个寄存器。

被用来使能/禁止NAND Flash控制寄存器,使能/禁止控制引脚信号nFCE、初始化ECC。它还有其它功能,在一般的应用中用不到,比如锁定NAND Flash。

(3)NFCMD:NAND Flash命令寄存器

对于不同型号的Flash,操作命令一般不一样。对于本板使用的K9F1208U0M,可参考表8.2。

(4)NFADDR:NAND Flash地址寄存器。

当写这个寄存器时,它将对Flash发出地址信号。

(5)NFDATA:NAND Flash数据寄存器。

只用到低8位,读、写此寄存器将启动对NAND Flash的读数据、写数据操作。

(6)NFSTAT:NAND Flash状态寄存器

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

u NAND Flash控制器操作实例,读Flash

本实例讲述如何读取NAND Flash,擦除、写Flash的操作与读Flash类似,读者可以自行编写程序。

读NAND Flash的步骤,假设读地址为addr

(1)设置NFCONF(对于S3C2440,还要设置NFCONT)

本章实例中设为0x9830——使能NAND Flash控制器、初始化ECC、NAND Flash片选信号nFCE=1(inactive,真正使用时再让它等于0),设置TACLS = 0,TWRPH0 = 3,TWRPH1 = 0。这些时序参数的含义为:TSCLS=1个HCLK时钟,TWRPH0 = 4个HCLK时钟,TWRPH1=1个HCLK时钟。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。