1、 NAND FLASH
2、 NAND FLASH 与 NOR FLASH 比较

NOR 的特点是可在芯片内执行,这样程序应该可以直接在 FLASH 内存内运行,不必再把代码读到系统 RAM 中。NOR 的传输效率很高,但写入和读出速度较低。而 NAND 结构能提供极高的单元密度,并且写入和擦除的速度也很快,是高数据存储密度的最佳选择。

 

这两种结构性能上的异同主要为:NOR 的读速度比 NAND 快;NAND 的写入速度比 NOR 快很多;NAND 的擦除速度远比 NOR 快;NAND 的擦除单元更小,相应的擦除电路也更加简单;NAND 的实际应用方式要比 NOR 复杂得多;NOR 可以直接使用,并在上面直接运行代码,而 NAND 需要 I/O 接口,因此使用时需要驱动程序。

 

3、NAND FLASH 在系统中的控制

在没有 NAND FLASH 硬件接口的环境中,通过软体控制 CPU 时序和硬件特殊接线方式实现仿真 NANDFLASH 接口,进而实现在嵌入式系统中脱离 NANDFLASH 专用硬件接口进行对 NAND FLASH 读、写、擦除等操作的实现方法。

 

本方法主要工作在以下两个方面:

 

软件方面:针对特殊硬件线路的软体设计和严格的 CPU 时序控制;

 

硬件方面:硬件的线路设计,利用 NOR FLASH 专用硬件接口控制 NAND FLASH。

 

首先建立的开发平台如图 1 所示。

 

 

本平台使用 Intel 的 PXA270 Processor,无内建 NAND FLASH Controller,使用 NOR FLASH Controller 控制 NAND FLASH,具体的线路连接方式如图 2 所示。

 

 

NAND FLASH 的 I/O0~I/07 引脚用于对 FLASH 发送操作命令和收发数据,ALE 用于指示 FLASH 当前数据为地址信息,CLE 用于指示当前数据为操作命令信息,当两者都无效时,为数据信息。CE 引脚用于 FLASH 片选。RE 和 WE 分别为 FLASH 读、写控制,R/B 指示 FLASH 命令是否已经完成。逭里选用的是 CE don‘t care 的 NAND FLASH。

 

NAND FLASH 的读写操作以 page 方式进行,一次读写均为一个 page,erase 方式以 block 方式进行。这种方式,使其读写速度大大提高。

 

在时序方面,以读操作为例,其时序如图 3 所示。

 

 

操作过程主要分为以下几个步骤:

 

(1)发送读操作命令

 

CE 有效,CLE 有效,WE 有效,I/O0~I/O8 上面数据为 command 代码数据。

 

(2)发送地址数据(需要读取的 FLASH 地址)

 

CE 有效,ALE 有效,WE 有效,I/O0~I/O8 上面为所需地址数据。由于地址数据较多,所以需要分几次依次发送。每次发送都需要产生 WE 信号以将其写入 NANDFLASH 芯片。

 

(3)等待 R/B 信号,最后读出数据

 

在最后一个地址数据写入 FLASH 之后,R/B 信号即变低。等待芯片完成整个 page 数据读取之后,R/B 信号变高。此时,CE 有效,ALE,CLE 均拉低,依次产生 RE 信号,从 I/O0~I/O8 读取出所需数据。

 

对于写操作和擦除操作,其基本原理相同,只是信号顺序略有改变,就不再赘述。

 

由于使用了 CPU 地址线 A1,A2 连接 CLE,ALE 引脚,对 CPU 低 2、3 位地址的读写操作就意味着对 NANDFLASH 进行读写命令 / 数据操作。如果此程序工作在 OS

 

上的 application 层的话,MMU 已经屏蔽程序对底层硬件

 

的直接访问,所以需要对 MMU 进行设定,为 NANDFLASH 开辟一块。Memory 映像区域,这样就可以通过 OS 对底层的 NAND FLASH 进行操作。以该系统为例,使用 CPU 的 CS1 引脚控制 NAND FLASH 的 CE 信号,先将其映像为 0x24000000 地址,此时,对 0x24000000 地址读写即对 NAND FLASH 芯片进行数据读写,而对 Ox24000002 地址写数据,使 CPU 的 A1 地址引脚为高,即对 NAND FLASH 发送 command 命令,同样,对 0x24000004 地址写数据,即对 NAND FLASH 发送 address 数据。

 

在对 NAND FLASH 发送命令 / 数据之后,由于程序运行速度比 FLASH 芯片快很多,需要在每一次操作之后插入若干等待周期,并利用 CPU 的 GPIO 检测芯片 R/B 信号。直至芯片完成本次操作再进行下一步操作。

 

需要注意的是,在对 FLASH 发送命令数据过程中的等待,没有反馈信号可以检测,只能通过反复调试确定其所需等待时间。

 

在设计中采用 CPU 的 CS1 信号对 NAND FLASH 进行 CE(片选)控制。此处不能采用 CPU 的 GPIO 进行控制,因为在嵌入式设备的 ARM CPU 中,CPU 本身采用了指令、数据自动预读的高速缓存技术和流水线技术。因此,当程序在 NOR FLASH 里面直接运行的时候(目前绝大多数嵌入式系统采用的方式),在运行任何两段相连的代码中间,CPU 都有可能对 NOR FLASH 进行指令或数据的预读操作,从而产生大量的 RE,OE 信号和地址信号。如果使用 GPIO 控制 NAND FLASH 的 CE 信号则无法避免这种影响。CPU 的 CS1 信号是由 CPU 内部自动产生,因此在 CPU 预读期间,CS1 信号可以有效屏蔽 NANDFLASH 芯片。并且,由于 NAND FLASH 芯片支持 CEdon’t care 模式,在 CE 无效的情况下,芯片本身的工作状态并不会被干扰,由此保证了 NOR FLASH 和 NANDFLASH 在同一 CPU 界面中互不干扰的稳定运行。对于 CS1 信号的宽度等参数,也需要在实验中进行调节,才能保证整个系统快速稳定的运行。

 

4 、NAND FLASH 在系统中的读写速度

经过测试在该系统平台中,OS 为 Palm OS 5.4;CPU 使用 PXA270 312 MHz;SDRAM 使用 Samsung 的 16 bdata width HYB25L256160AF-7.5@104 MHz;NANDFLASH 选用 Samsung 128 MB 8 b I/O NAND FLASHK9F1G08U0A 达到在文件系统下面的读 / 写的速度为 3 MB/s,擦除的速度为 65 MB/s,在手持式设备中运用性能已经够了。