Board logo

标题: 大容量NAND Flash TC58DVG02A1FT00在嵌入式系统中的应用(2) [打印本页]

作者: yuyang911220    时间: 2016-9-24 21:57     标题: 大容量NAND Flash TC58DVG02A1FT00在嵌入式系统中的应用(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;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),反之不编译进内核




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0