大容量NAND Flash TC58DVG02A1FT00在嵌入式系统中的应用

时间:2006-03-30

      摘要:随着嵌入式系统产品的发展,对存储设备的要求也日益增强。文章以东芝的NAND E2PROM器件TC58DVG02A1F00为例,阐述了NAND Flash的基本结构和使用方法,对比了NAND和NOR Flash的异同,介绍了容量NAND Flash在嵌入式系统中的应用方法,以及如何在Linux操作系统中加入对NAND Flash的支持。

      关键词:嵌入式 NAND Flash Linux 内核 TC58DVG02A1F00
1 NAND和NOR flash
目前市场上的flash从结构上大体可以分为AND、NAND、NOR和DiNOR等几种。其中NOR和DiNOR的特点为相对电压低、随机读取快、功耗低、稳定性高,而NAND和AND的特点为容量大、回写速度快、芯片面积小。现在,NOR和NAND FLASH的应用为广泛,在CompactFlash、Secure Digital、PC Cards、MMC存储卡以及USB闪盘存储器市场都占用较大的份额。
NOR的特点是可在芯片内执行(XIP,eXecute In Place),这样应该程序可以直接在flash内存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,但写入和探险速度较低。而NAND结构能提供极高的单元密度,并且写入和擦除的速度也很快,是高数据存储密度的选择。这两种结构性能上的异同步如下:
*NOR的读速度比NAND稍快一些。
*NAND的写入速度比NOR快很多。
*NAND的擦除速度远比NOR快。
*NAND的擦除单元更小,相应的擦除电路也更加简单。
*NAND闪存中每个块的擦写次数量否万次,而NOR的擦写次数是十万次。
此外,NAND的实际应用方式要比NOR复杂得多。NOR可以直接使用,并在上面直接运行代码。而NAND需要I/O接口,因此使用时需要驱动程序。不过当今流行的操作系统对NAND Flash都有支持,如风河(拥有VxWorks系统)、微软(拥有WinCE系统)等公司都采用了TrueFFS驱动,此外,Linux内核也提供了对NAND Flash的支持。
2 大容量存储器TC58DCG02A1FT00
2.1 引脚排列和功能
TC58DVG02A 1FT00是Toshiba公司生产的1Gbit(128M×8Bit)CMOS NAND E2PROM,它的工作电压为3.3V,内部存储结构为528 bytes×32pages×8192blocks。而大小为528字节,块大小为(16k+512)字节。其管脚排列如图1所示。各主要引脚如下:
I/O1~I/O8:8个I/O口;
CE:片选信号,低电平有效;
WE:写使能信号,低电平有效;
RE:读使能信号,低电平有效;
CLE:命令使能信号;
ALE:地址使能信号;
WP:写保护信号,低电平有效;
RY/BY:高电平时为READY信号,低电平时为BUSY信号。
2.2 与ARM处理器的连接
当前嵌入式领域的主流处理器当属ARM。图2是以ARM7处理器为例给出的NAND Flash与ARM处理器的一般连接方法。如前所述,与NOR Flash不同,NAND Flash需要驱动程序才能正常工作。
图中PB4,PB5,PB6是ARM处理器的GPIO口,可用来控制NAND Flash的片选信号。CS1是处理器的片选信号,低电平有效。IORD、IOWR分别是处理器的读、写信号,低电平有效。写保护信号在本电路中没有连接。
2.3 具体操作
地址输入,命令输入以及数据的输入输出,都是通过NAND Flash的CLE、ALE、CE、WE、RE引脚控制的。具体方式如表1所列。
表1 逻辑表
  CLE ALE CE WE RE
命令输入 1 0 0 时钟上升沿 1
数据输入 0 0 0 时钟上升沿 1
地址输入 0 1 0 时钟上升沿 1
串行数据输出 0 0 0 1 时钟下降沿
待机状态 X X 1 X X
NAND Flash芯片的各种工作模式,如读、复位、编程等,都是通过命令字来进行 控制的。部分命令如表2所列。
表2 命令表
  周期(Hex) 第二周期(Hex)
串行数据输入 80
读模式1 00
读模式2 01
读模式3 50
复位 FF
自动编程(真) 10
自动编程(假) 11
自动块删除 60 D0
状态读取1 70
状态读取2 71
ID读取1 90
ID读取2 91
串行数据输入的命令80表示向芯片的IO8、IO7、IO6、IO5、IO4、IO3、IO2、IO1口发送0x80,此时除IO8为1外,其余IO口均为低电平。
2.4 时序分析及驱动程序
下面以表2中的读模式1为例分析该芯片的工作时序。CLE信号有效时通过IO口向命令寄存器发送命令00H。此时NAND Flash处于写状态,因此WE有铲,RE无效。发送命令后,接着发送要读的地址,该操作将占用WE的1、2、3、4个周期。注意,此时发送的是地址信息,因此CLE为低,而ALE为高电平。当信息发送完毕后,不能立刻读取数据,因为芯片此时处于BUSY(忙)状态,需要等待2~20ms。之后,才能开始真正的数据读取。此时WE为高电平而处于无效状态,同时CE片选信号也始终为低以表明选中该芯片。
这段时序的伪代码如下:
Read_func(cmd,addr)
{
RE=1;
ALE=0;
CLE=1;
WE=0;
CE=0;
Send_cmd(cmd);//发送命令,由参数决定,这里为00
WE=1; //上升沿取走命令
    CE=1;
CLE=0; //发送命令结束
ALE=1; //开始发送地址
For(i=0;i<4;i++)
{
WE=0;
CE=0;
Send_add(addr);//发送地址
WE=1; /上升沿取走地址
CE=1;
}
//所有数据发送结束,等待读取数据
CE=0;
WE=1;
ALE=0;
Delay(2ms);
While(BUSY)
Wait;//如果还忙则继续等待
Read_data(buf);//开始读取数据
}
3 Linux系统对NAND Flash的支持
Linux操作系统虽然已经支持NAND Flash,但要使用NAND Flash设备,还必须先对内核进行设置方法如下:
(1)在/usr/src/(内核路径名)目录中输入make menuconfig命令,再打开主菜单,进入Memory Technology Devices(MTD)选项,选中MTD支持。
(2)进入NAND Flash Device Drivers选项,NAND设备进行配置。不过此时对NAND的支持仅限于Linux内核自带的驱劝程序,没有包含本文介绍的Toshiba芯片,为此需要对Linux内核进行修改,方法如下:
(1)修改内核代码的drivers.in文件,添加下面一行:
dep-tristate 'Toshiba NAND Device Support'CONFIG-MTD-TOSHIBA $CONFIG-MTD
其中CONFIG-MTD-TOSHIBA是该设备的名称,将在Makefile文件中用到。
$CONFIG-MTD的意思是只有选有$CONFIG-MTD时,该菜单才会出现,即依赖于$CONFIG-MTD选项。宋,Toshiba的NAND设备将被加入Linux系统内核菜单中。
(2)修改相应的Makefile文件,以便编译内核时能加入该设备的驱动程序。
obj-$(CONFIG-MTD-TOSHIBA)+=toshiba.o
此行语句的意思是如果选择了该设备,编译内核时加入toshiba.o(假设驱动程序是toshiba.o),反之不编译进内核。

  
上一篇:TrueFFS原理及其在CF卡上的实现
下一篇:基于ISP1581型接口电路的USB2.0接口设计

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料