您现在的位置:首页 > 技术资料 | 上载库存 |
AM30L V0064D在单片机系统中的典型应用
摘要:AM30LV0064D是AMD公司生产的一种新型超与非(U1traNAND)结构的闪速存储器(FLASH)。本文介绍它的工作原理,以及它与at89ls8252单片机的硬件接口电路和PLD内部逻辑控制设计的代码,并对编程操作的软件流程进行了描述。 关键词:AM30LV0064D U1traNAND 闪速存储器 1 概述 AM30LV0064D是AMD公司生产的一种新型非易失性闪速存储器。或非(NOR)结构的FLASH具有高速的随机存取功能,但成本较高;新的UltraNAND结构的FLASH相对于NOR结构的FLASH,具有价格低,容量特别大的优势,支持对存储器高速地连续存取。谝芯片工作电压范围在2.7~3.6V,特别适用于需要批量存储大量代码或数据的语音、图形、图像处理场合,在便携式移动存储和移动多媒体系统中应用前景广阔。 2 工作原理与命令字设置 AM30LV0064D采用与工业级NAND结构兼容的UltraNAND结构,内部包含1024个存储块(单元容量为8K字节+256字节缓存);存储块中的数据按页存放,每页可存储512字节,还有16字节缓存用作与外部数据交换时的缓冲区,每块共16页。所以,主存储区一共有16 384数据页,相当于64 Mbit的数据存储器。 图1为AM30LV0064D的内部结构和主要引脚示意图。 CE--片选使能输入; ALE--地址输入使能; CLE--命令字输入使能; SE--缓冲区使能输入,低电平有效; RE--读使能输入,低电平有效; WE--写使能输入,低电平有效; WP--写保护输入,低电平有效; RY/BY--内部空闲/忙信号输出; I/O7~0--8位数据输入/输出口; VCC--3.3V核心电源; VCCQ--I/O口电源; VSS--地。 AM30LV0064D的读、编程和擦写等操作都可以在3.3V单电源供电状态下进行,同时它提供的VCCQ引脚在接5V时,I/O口可兼容5V电平。AM30LV0064D支持对主存高速地连续存取和编程操作,连续读取数据的时间可小于50ns/字节(随机读取数据的响应时间为7μs,所以连续读取时第一个数据的响应时间也是7μs);对FLASH的编程是以页为单位的,步骤是先写入数据,再执行编程命令,编程速度为200μs/页(平均约400ns/字节);芯片擦除操作以存储块为单位,擦除其中某一块对其它存储块的数据没有影响,擦除时间2ms/存储块,而且还有延缓擦降/得擦除命令,允许用户在必要时暂缓擦除操作,转而处理对其它存储块进行数据读、写、编程等操作;此外,主机可以通过读RY/BY引脚状态的方法了解FLASH内部操作是否已经完成,RY/BY也可用于实现硬件判忙接口。AM30LV0064D还具有写保护功能,这一功能通过将WP引脚设为低电平实现。
AM30LV0064D通过片选引脚CE使能,先是CLE和WE信号有效,通过I/O口写入命令字;接着ALE和WE有效,写入数据存取的起始地址。最后根据命令要求,读数据或数据。由于具有多元的控制总线,对应AM30LV0064D的操作方式也是多样的。根据命令字的定义可进行以下操作,如表2所列。
注:SA表示起始地址,BA表示块地址,Etc.表示操作同前一个周期。 3 应用电路设计 AM30LV0064D的外围电路设计简单。其控制总线包括CE(片选)、CLE(命令字锁存使能)、ALE(地址锁存使能)、WE(写使能)、RE(读使能)、SE(预留区使能)、WP(写保护)等。对于那些具有可编程的I/O口的微控制器或DSP来说,可以直接把引脚与控制线相连。如果没有可编程的I/O口,则需要加一些简单的逻辑控制。下面介绍AM30LV0064D与at89ls8252单片机接口时的一种应用设计电路。由于单片机缺少UltraNAND闪存所需的多元控制总线,在本设计中,采用地址译码的方法增加了控制端口,这部分逻辑可以用1片PLD(可编程逻辑器件)完成。具体接口电路如图2所示。 以下是PLD内部逻辑设计的源代码: PORT0=!A14&!A13&!A12&!A11; /*读写数据端口*/ PORT1=!A14&!A13&!A12&!A11; /*CLE写端口*/ PORT2=!A14&!A13&!A12&!A11; /*设置ALE端口*/ PORT3=!A14&!A13&!A12&!A11; /*清ALE端口*/ PORT4=!A14&!A13&!A12&!A11; /*设置SE端口*/ PORT5=!A14&!A13&!A12&!A11; /*清SE端口*/ PORT6=!A14&!A13&!A12&!A11; /*设置WP端口*/ PORT7=!A14&!A13&!A12&!A11; /*清除WP端口*/ PORT8=!A14&!A13&!A12&!A11; /*设置CE1端口*/ PORT9=!A14&!A13&!A12&!A11; /*清除CE1端口*/ PORTA=!A14&!A13&!A12&!A11; /*读RY/BY状态端口*/ PORTB=!A14&!A13&!A12&!A11; /*设置CE2端口*/ PORTC=!A14&!A13&!A12&!A11; /*清除CE2端口*/ /*逻辑方程*/ READY.OE=PORTA&READ;/*Ready只通过PORTA读取*/ READY=RY_BY; CLE=PORT1; ALE=WRTIE & PORT2#ALE&!(WRITE & PORT3)#ALE & PORT2); SE=WRITE&PORT4#SE&!(WRITE & PORT5)#SE & PORT4; WP=WRITE & PORT6#WP&!(WRITE & PORT7)# WP & PORT6; CE1=WRITE &PORT8#CE &!(WRITE &PORT9)#CE &PORT8; CE2=WRITE & PORTB#CE&!(WRITE & PORTC)#CE &PORTB; WE=WRITE & (PORT0#PORT1); RE=READ&PORT0; 下面重点介绍通过单片机对AM30LV0064D进行数据编程的软件流程:单片机启动编程程序,将IS61LV256中的数据读出后再写到FLASH中,每次写512字节的数据(半页为256字节)。然后,对相应页进行编程,编程命令字写入后定期查询RY/BY引脚,看编程是否已经完成,如果完成再读取FLASH的状态寄存器,可以知道编程是否成功。具体流程如图3所示。
|