学海荡舟手机网

主页 > 实用文摘 > 教育文摘_22 > > 详细内容

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

 摘要:随着嵌入式系统产品的发展,对存储设备的要求也日益增强。文章以东芝的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 逻辑表

 clealecewere
命令输入100时钟上升沿1
数据输入000时钟上升沿1
地址输入010时钟上升沿1
串行数据输出0001时钟下降沿
待机状态xx1xx

nand flash芯片的各种工作模式,如读、复位、编程等,都是通过命令字来进行 控制的。部分命令如表2所列。

表2 命令表

 第一周期(hex)第二周期(hex)
串行数据输入80
读模式100
读模式201
读模式350
复位ff
自动编程(真)10
自动编程(假)11
自动块删除60d0
状态读取170
状态读取271
id读取190
id读取291

串行数据输入的命令80表示向芯片的io8、io7、io6、io5、io4、io3、io2、io1口发送0x80,此时除io8为1外,其余io口均为低电平。

2.4 时序分析及驱动程序

下面以表2中的读模式1为例分析该芯片的工作时序。由图3可知,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),反之不编译进内核。