微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 对S3C2440读取NAND Flash的总结

对S3C2440读取NAND Flash的总结

时间:11-09 来源:互联网 点击:


NandFlash控制器中的硬件ECC介绍

ECC产生方法

ECC是用于对存储器之间传送数据正确进行校验的一种算法,分硬件ECC和软件ECC算法两种,在S3C2440的NandFlash控制器中实现了由硬件电路(ECC生成器)实现的硬件ECC

ECC生成器工作过程
当写入数据到Nandflash存储空间时,ECC生成器会在写入数据完毕后自动生成ECC码,将其放入到ECC0-ECC2。当读出数据时NandFlash同样会在读数据完毕后,自动生成ECC码将其放到ECC0-ECC2当中。

ECC的运用

当写入数据时,可以在每页写完数据后将产生的ECC码放入到OOB指定的位置(Byte6)去,这样就完成了ECC码的存储。这样当读出该页数据时,将所需数据以及整个OOB读出,然后将指定位置的ECC码与读出数据后在ECC0-ECC1的实际产生的ECC码进行对比,如果相等则读出正确,若不相等则读取错误需要进行重读。

操作命令字介绍

操作NAND FLASH时,先传输命令,接着输出地址,最后读/写数据,期间还要检查FLASH的状态。具体的命令字见下表。


  1、Read命令字为00h,30h。

如上图,当发出00h命令后,接着4个字节的地址序列,然后再发出30h命令,接着,就可以读出数据了,当发送完30h后,可以检测R/B引脚看是否准备好了,如果准备好,就可以读出数据。

2、Reset

命令字:FFh

当向芯片发送FFh命令时,可以复位芯片,如果芯片正在处于读、写、擦除状态,复位命令会终止这些命令。

3、Page Program

命令字:80h,10h.

NAND FLASH的写操作一般是以页为单位进行的,因此才会叫Page Program,但是也支持一个字以上的(包括一个字)连续写操作。开始发出80h命令,接着发送5个字节的地址序列,然后向FLASH发送数据,最大为一页大小,最后发送10h命令启动烧写,此时FLASH内部会自动完成写、校验操作。发送10h后,可以通过读状态命令70h(见下文)获知写操作是否完成,是否成功。

4、Copy-Back Program

命令字:00h、8Ah、10h.

此命令用于将一页复制到同一层的另外一页,它省去了读出数据、将数据重新载入FLASH的过程,使得效率大大提高。

关于层:NAND FLASH有层的概念,K9F2G08分为两层,每层包括了1024个块,如下图,因此上面的命令表中才会有two-plane的命令,这些命令可以使得在两个层间完成操作,这样程序员就很方便的使用一个命令完成更多的操作,其命令格式和单层操作的类似,详见手册。但K9F2G08R0A不支持两层命令。




上图清晰的告诉我们,开始发送00h和源地址,当发送35h之后,芯片将一页大小的数据读入到内部寄存器,接着,我们发送85h和目的地址序列,最后发送10h启动。最后,我们可以使用70h/7Bh检测是否完成,是否成功。

5、Block Erase

命令字:60h、D0h

擦除操作是以块为单位的,也就是128K。开始发出60h,然后发出3个地址序列仅行地址,最好发出D0h。具体操作,如下图。


6、Read Status

命令字:70h

读状态命令可以读出芯片的状态寄存器,查看是否读、写操作是否完成、是否成功。具体的状态见下图。


S3C2440的NAND FLASH控制器介绍

看了上面的命令时序图,大家肯定认为对NAND FLASH的操作比较复杂,因此S3C2440为了简化操作,为我们提供了几个寄存器,比如NFCMD寄存器,就是NAND FLASH命令寄存器,如果我们需要读命令,直接向此寄存器写00h、30h即可。

基本操作步骤:

1.设置NFCONF和NFCONT寄存器,配置NAND FLASH;

2.向NFCMD寄存器写入命令;

3.向NFADDR寄存器写入地址;

4.读/写数据,通过NFSTAT检测NAND FLASH的状态,读R/nB信号以确定是否完成操作,是否成功。

主要寄存器:

(NFCONF)

配置寄存器,设置NAND FLASH的时序参考TACLS、TWRPH0、TWRPH1,这三个参数见下面时序图;设置位宽度;还包括一些只读位,用来批示是否支持其它大小的页。

TACLS:表示CLT/ALE的建立时间(setup time)。

TWRPH0:表示CLE/ALE的持续时间。

TWRPH1:表示CLE/ALE的维持时间(hold time)。




NFCONT

用来使能/禁止NAND FLASH控制器、使能/禁止控制引脚信号nFCE、初始化ECC。

NFCMD

命令寄存器,用来向其写入命令。

NFADDR

地址寄存器,用来向其写入地址。

NFDATA

数据寄存器,用来读、写数据使用,只用到8位。

NFSTAT

状态寄存器,只用到一位,0:busy;1:ready。

NFECC

校验寄存器,ECC 校验寄存器

NAND FLASH的操作(以读为例)

1、设置NFCONF和NFCONT

NFCONF主要是设置TACLS、TWRPH0、TWRPH1三个时间参数。根据手册的参数表,见下图:


三个参数只有最小值 MIN,没有最大值,因此,只要参数大于表格中的数即可,这里涉及时钟的一些概念,这里直接将参数告诉大家:

TACLS=1;TWRPH0=4;TWRPH1=0。

NFCONT设置为:NFCONT=(1<4)|(1<1)|(1<0) 表示使能NAND FLASH控制器、禁止控制引脚信号nFCE、初始化ECC。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top