摘要:跟着嵌入式体系产品的开展,对存储设备的要求也日益增强。文章以东芝的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(128M8Bit)CMOS NAND E2PROM,它的作业电压为3.3V,内部存储结构为528 bytes32pages8192blocks。而巨细为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为例剖析该芯片的作业时序。由图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;i4;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),反之不编译进内核。