08-Nand flash

声明:

本文是本人在韦东山笔记的基础上加了一些注释,方便理解。原文地址:http://wiki.100ask.org/%E7%AC%AC016%E8%AF%BE_Nand_Flash#.E7.AC.AC001.E8.8A.82_NAND_FLASH.E6.93.8D.E4.BD.9C.E5.8E.9F.E7.90.86

第1节 Nand flash操作原理

1.1 几个问题

首先看一下Nand flash的PCB原理图:
08-Nand flash
可以看出,NAND FLASH是一个存储芯片
那么: 这样的操作很合理即----“读地址A的数据,把数据B写到地址A”

问1. 原理图上NAND FLASH和S3C2440之间只有数据线,怎么传输地址?
答1.在DATA0~DATA7上既传输数据,又传输地址。当ALE为高电平时传输的是地址,

那么在数据线上是不是只传输数据和只传输地址呢?
我们参考NAND FLASH的芯片手册可以知道,对NAND FLASH的操作还需要发出命令,下面有个NAND FLASH的命令表格:
08-Nand flash
问2. 从NAND FLASH芯片手册可知,要操作NAND FLASH需要先发出命令,那么怎么传入命令?
答2.在DATA0~DATA7上既传输数据,又传输地址,也传输命令:

  1. 当ALE为高电平时传输的是地址。
  2. 当CLE为高电平时传输的是命令。
  3. 当ALE和CLE都为低电平时传输的是数据。

问3. 数据线既接到NAND FLASH,也接到NOR FLASH,还接到SDRAM、DM9000等等, 那么怎么避免干扰?
答3. 这些设备,要访问之必须"选中"(CE片选引脚),没有选中的芯片不会工作,相当于没接一样。

问4. 假设烧写NAND FLASH,把命令、地址、数据发给它之后,NAND FLASH肯定不可能瞬间完成烧写的,怎么判断烧写完成?
答4. 通过状态引脚RnB来判断:它为高电平表示就绪,它为低电平表示正忙。

问5. 怎么操作NAND FLASH呢?
答5. 根据NAND FLASH的芯片手册,一般的过程是:
①发出命令
②发出地址
③发出数据/读数据

看上面的命令表格,不容易看,我们看一下读ID的时序图:
每个NAND FLASH都内嵌一些ID(譬如:厂家ID,设备ID),时序图从左往右看,纵向放是一列一列的看。
08-Nand flash
对于我们s3c2440来说,内部集成了一个NAND FLASH控制器,2440和外设连接的简易图,如下图所示:08-Nand flash

1.2 Nand flash操作

NAND FLASH控制器,帮我们简化了对NAND FLASH的操作,下面来分析一下不使用NAND FLASH控制器使用NAND FLASH控制器对外设NAND FLASH的操作:

发命令:下图中,左侧是对Nand flash发命令的具体机制原理,右侧是我们对S3C2440d的操作(即仅对NFCMMD寄存器操作,左侧中的具体步骤寄存器帮我们做了)。08-Nand flash
发地址,表中左侧和右侧的区别和上面的发命令一样。
08-Nand flash
08-Nand flash
08-Nand flash

1.3 U-boot读ID

好了,我们来体验一下使用U-boot操作Nand flash。下图(表)的左侧是我们读Nand flash芯片手册得到的读ID的步骤(读操作时序图是下下一幅图),下图(表)的中间是读ID对S3C2440的操作,右侧是如果用u-boot来操作的话u-boot的命令:
08-Nand flash
读操作时序图:
08-Nand flash
对于存储为256M的NAND FLASH,需要28条地址线,来表示这个地址值,根据原理图可以,只用8根地址线,所以需要4个周期的地址,为了兼容更大容量的NAND FLASH,要发出5个周期的地址:(如下图所示)
08-Nand flash

1.4 U-boot读数据

08-Nand flash