大容量NAND Flash TC58DVG02A1FT00在嵌入式系统中的应用
处理器的一般连接方法。如前所述,与NORFlash不同,NANDFlash需要驱动程序才能正常工作。
图中PB4,PB5,PB6是ARM处理器的GPIO口,可用来控制NANDFlash的片选信号。CS1是处理器的片选信号,低电平有效。IORD、IOWR分别是处理器的读、写信号,低电平有效。写保护信号在本电路中没有连接。
2.3具体操作
地址输入,命令输入以及数据的输入输出,都是通过NANDFlash的CLE、ALE、CE、WE、RE引脚控制的。具体方式如表1所列。
表1逻辑表
CLEALECEWERE命令输入100时钟上升沿1数据输入000时钟上升沿1地址输入010时钟上升沿1串行数据输出0001时钟下降沿待机状态XX1XX
NANDFlash芯片的各种工作模式,如读、复位、编程等,都是通过命令字来进行控制的。部分命令如表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。此时NANDFlash处于写状态,因此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;
Del 《大容量NAND Flash TC58DVG02A1FT00在嵌入式系统中的应用(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/142480.html
图中PB4,PB5,PB6是ARM处理器的GPIO口,可用来控制NANDFlash的片选信号。CS1是处理器的片选信号,低电平有效。IORD、IOWR分别是处理器的读、写信号,低电平有效。写保护信号在本电路中没有连接。
2.3具体操作
地址输入,命令输入以及数据的输入输出,都是通过NANDFlash的CLE、ALE、CE、WE、RE引脚控制的。具体方式如表1所列。
表1逻辑表
CLEALECEWERE命令输入100时钟上升沿1数据输入000时钟上升沿1地址输入010时钟上升沿1串行数据输出0001时钟下降沿待机状态XX1XX
NANDFlash芯片的各种工作模式,如读、复位、编程等,都是通过命令字来进行控制的。部分命令如表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。此时NANDFlash处于写状态,因此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;
Del 《大容量NAND Flash TC58DVG02A1FT00在嵌入式系统中的应用(第2页)》