![]() |
|
||||||||||||||
| | 网站首页 | 文章中心 | 下载中心 | ARM技术交流社区 | 供求信息 | 在线咨询 | 数据手册 | | ||
|
||
|
||||||||||||||||||||||||||||||||||||||
| IntelStrata系列闭速存储器的特点及应用 | ||||||||||||||||||||||||||||||||||||||
作者:佚名 文章来源:不详 点击数: 更新时间:2006-11-3 ![]() |
||||||||||||||||||||||||||||||||||||||
摘要:Intel公司推出了Strata系列闭速存储器,该存储器单片容量大,可按字节/字模式或不超过32字节的缓冲模式编程,并可实现块擦除过程的挂起和唤醒。在实时数据缓冲系统中有着广泛的应用前景。本文以64M位的28F640J5为例介绍其功能特点,并结合AT89C52单片机应用系统给出了具体的应用编程。 关键词:闪速存储器 存储块 挂起 唤醒 完全状态检查 28F640J5 1 前言 闪速存储器以其容量大、现场可编程、系统断电后仍能可靠地保存数据和性价比高等诸多优点而在实时数据缓冲及处理系统中显现出良好的应用前景。但从目前来看,一般闪速存储器(如ATMAEL公司的29C040A)的容量最多只能达到4M位,且大都采用扇区编程模式。由于扇区尺寸较大而且固定(如256字节),因此,一般应用中需扩展单独的RAM芯片作编程缓存区,这样,将需要占用系统地址空间,并增加系统成本[1]。 Intel公司推出的Strata系列闪速存储器28F640的单片容量可达64M位(8M字节),能按字节/字模式或不超过32字节的缓冲模式进行编程,可对操作结果进行完全状态检查,并可实现擦除过程的挂起和唤醒等一系列独特的功能,28F640的推出为进一步提高应用系统的实时性并降低系统成本提供了可能。 本文以28F640J5为例,重点介绍了Strata系列闪速存储器的功能特点,对28F640J5和ATMAEL公司的29C040A的主要不同点作了总结性比较,并结合28F640J5在程控交换机呼叫信息多任务实时缓冲系统中的应用,给出了具体的应用编程技巧。 2 28F640J5的引脚配置及功能特点 图1所示为56脚SSOP封装的28F640J5逻辑引脚配置。28F640J5的主要功能特点为: ●A0~A22共23根地址线允许访问的地址空间达8M字节,是目前单片容量最大的闪速存储器芯片之一。64M位容量的存储单元被划为固定的64个大小为128k字节、可独立进行擦除的存储块,单个存储块的典型擦除时间为1秒,不支持整片擦除操作。 ●读写可配置为按字节(BYYE#输入为低,使用DQ0~DQ7)或按字(BYTE#输入为高,内部关闭A0输入缓冲器,使用DQ0~DQ15)进行,可以方便地应用于8位或16位系统设计。 ●采用多级访问片选(CE0、CE1、CE2)控制机制,配合RP#及读/写允许OE#/WE#控制,可为多片存储器应用系统的设计提供很大的灵活性。 ●配置了绝对保护接地引脚VPEN。VPEN接地可以避免对存储块的擦除、编程和加解锁操作,因而增强了数据的安全性。 ●配置了复位/掉电引脚RP#。当RP#为低时,将禁止写操作,这一方面是为防止电源波动破坏数据,另一方面,使用中动态地拉低RP#可以实现芯片在无操作期间进入掉电模式,从而达到降低系统功耗的目的。RP#由低高高可使芯片复位,从而自动进入读阵列模式。而RP#与器件加锁、块加锁命令相配合还可使器件具备灵活安全的软硬件数据保护功能。 ●支持Intel基本命令集、闪速存储器一般操作命令集和可扩展的命令集,操作规范、安全、方便。通过向Strata系列闪速存储器的命令用户接口(CUI)写入不同的命令可实现对存储器相应的操作。 ●支持字节/字模式或按1~32字节的缓冲模式编程,因而在应用系统设计中一般无需外扩编程缓存RAM芯片。典型编程时间小于200μs。如果起始地址与写缓冲区的边界对齐(起始地址的低五位A4~A0=00000B),便可获得最大的编程性能和较低的编程功耗。 ●支持存储块擦除过程的挂起和唤醒,使读取或者编程其它存储块的担任可在某存储块擦除的过程中插入进行,从而提高了系统数据缓存和处理的实时性能。 ●支持对编程、擦除、加锁及解锁操作结果的完全状态检查,可以及时发现错误并确定错误类型。 表1总结了Intel公司28F640J5与ATMAEL29C040A闪速存储器的主要性能差别。
3 28F640J5的应用 图2为笔者开发的程控交换机呼叫信息实时缓冲系统的应用示意图。该系统利用2个RS-232C串口通过MODEM分别与交换机(PBX)和缓冲器与桌面系统相连,这样就能保证将实时接收到的PBX呼叫信息存于闪速存储器中,而桌面系统可随时通过专门的软件与系统进行交互或读出系统缓存的呼叫信息。整个存储器空间采用循环方式,即每个128k存储块读完之后被及时擦除并计入自由空间。由于擦除只能按块进行,因此,为了使呼叫信息读出不重复且上电后空闲容量计算正确,每条信息在被正确读出后应将它的首字符所在的单元清零。这是因为#00H不是呼叫信息,单元内容非#FFH时只有清零才能可靠地指示本条信息已读出。 应用时,在软件响应桌面系统的请求下,系统准备发送一条新的呼叫信息时就将涉及到存储器28F640J5的主要操作,下面给出笔者在这种应用时编写的汇编源代码。其中待编程信息缓存区交替使用AT89C52的内部RAM的2个16字节。这里对几个地址概念作出解释,按照图3所示系统中单片机AT89C52与28F640J5的简化连接,8M字节的存储器地址空间配置为000000H~7FFFFFH。所谓器件地址指的是这一空间中的任一有效地址,块地址为指定要操作的存储块内的任一有效地址,而单元地址是一个唯一具体的字节或字(A0任意)存储地址。按照Strata系列闪速存储器的命令集定义,各种操作必须在相应正确的地址下进行。 以下为Intel Strata系列闭速存储器的应用编程实例的部分源代码。 a-sector-rxed EQU 00H;指示是否有16字节待编程 CrossBlk EQU 01H;指示是否有一个存储块待擦除 OkFlag EQU 02H;通用标志 Erasing EQU 03H;指示块擦除过程是否结束 Suspended EQU 04H;指示块擦除过程是否已被挂起 BufCount DATA 30H;编程缓冲区写长度计数器 RsecBuf DATA 31H;当前待编程信息缓存区首地址(如AT89C52内部RAM的80H) r4save DATA 14H;以下这三个变量用于保存正在发送信息的首地址,即保存发送前读地址指针r4,r3,r2的值,其目的是提供重发、设置已发标识、块擦除操作所需地址 r3save DATA 13H; r2save DATA 12H; ;*********************** MAIN:mov SP,#0C0H;初始化堆栈指针 …………;进行系统的初始化工作 MainLoop;………;其他操作 J_ChSumOK: ;以下代码准备发出一条新的呼叫信息 lcall WRFlash;保证及时缓存来自PBX的信息 lcall ClrAChar;将上一条已读出的信息首单元清零 JU_Blk:jnb CrossBlk,Sed New; Clr CrossBlk; lcall Bl_Ers;擦除前一个已读完的存储块 Sed_New:lcall RdAddSv;r4save,r3save,r2save←r4,r3,r2 Co_Sed:lcall HowRd;信息是否已读空(r7,r6,r5与r4,r3,r2是否相遇) jnb OkFlag,MainLoop;已无信息可发,继续主循环 sdcall:lcall SendCall;发送信息的过程中嵌入调用“ERFlash” EndMain;ljmp MainLoop;继续主循环 ………; 其他操作 ;************************ WR_Flash:jnb asectorrxed,EndPro;是否要进行缓冲编程? jnb Erasing,StartPro;是,正在擦除块 lcall Ers_sus;是,挂起块擦除 jb Suspended,StartPro;已挂起,开始编程 clr Erasing;块擦除已完成 StartPro:lcall Wr_buf;对当前写地址缓冲区编程 jnb Erasing,No_Sus;块擦除已完成? lcall Res_sus;否,唤醒当前块擦除操作 No_Sus:…………; 更新写地址指针 EndPro:ret ;******************** ClrAChar:mov pl,r4save;发布字节编程命令(器件地址) Mov a,#40h; movx@dptr,a; mov dph,r3save;清零单元的单元地址 mov dpl,r2save clr a movx @dptr,a:写入编程字节#00H xtt:movx a,@dptr:读状态寄存器(器件地址) jnb acc.7,xtt;检查编程是否结束? EndAClr:lcall FullChk;编程已结束,做完全状态检查 Ret; ;************************* Wr_buf:mov th0,#0a0h; r7,r6,r5为写地址指针 mov t10,#00h; clr TF0;设置Timeout=16ms rep_WC:mov pl,r7;发布缓冲区编程命令(块内地址) mov a,#0E8h; movx @dptr,a; movx a, @dptr;读扩展状态寄存器(XSR) jb ACC,7,StratWr;缓冲区有效,转去编程 jnb TF0,rep_WC;否,但Timeout未发生,继续发布命令 ………;发生Timeout,不能进行缓冲区编程 PassIt;mov a,#70H; 发布读SR命令 Movx @dptr,a Sjmp RdSR; StsrtWr:mov a,#16; Mov BufCount,a;设置循环写入次数为16 Dec a Movx @dptr,a; 写入(缓冲区长度-1) Mov r0,RsecBuf;指定当前源数据缓存区超始地址 Mov dph,r6,设置前具体编程目标起始地址 Mov dpl,r5; d-o_wr:mov a,@r0;循环从源读数据,然后写入目标单元地址 movx @dptr,a; zx;inc dpl, inc r0; djnz a3r4,do_wr; Confirm:mov a,#0D0H; 确认缓冲区编程 Movx @dptr,a; Rd_SR:movx a,@dptr;读SR,检查编程是否结束 Jnb ACC.7,Rd-SR; Lcau FullChk;已结束,对结果做完全状态检查 Exit_Pro:ret ;************************* Bl_Ers:mov pl,r4save; Mov a,#20h; 发布块擦除命令(器件地址) Movx @dptr,a; Mov a,#0D0H;确认擦除法操作(块内地址) Movx @dptr,a; Setb Erasing;设置正在进行块擦除指示标志 Rpt_Rd3:lcall WR_Flash;必要时可挂起擦除,实现编程 Jnb Erasing,End_Ers;擦除过程已完成? Mov pl,r4save; 否,发布读SR命令 Movx a,@dptr; Jnb ACC.7,rpt_Rd3;擦除过程已完成? Clr Erasing;清除设置正在进行块擦除指示标志 End_Ers:lcau FullChk;做完全状态检查 Ret ;************************* Ers_sus;clr Suspended; Mov pl,r4save; Mov a,#0B0h;发布块擦除挂起命令(器件地址) Movx @dptr,a; Rpt_rdl:movx a,@dptr;读SR Jnb ACC.7,rpt_rdl; Jnb ACC.6,TodArray;块擦除过程被成功挂起或已结束? Pended:Setb Suspended;是,设置擦除过程挂起指示标志 ToRdArray:mov a,#0FFh;回到读阵列单元模式(器件地址) Movx @dptr,a; Ers0k; ret; ;************************ Res_sus:mov pl,r4save; Mov a,#0D0h;发布块擦除过程唤醒命令(器件地址) Movx,@dptr,a; Ret ;********************* 4 结束语 28F640J5特别适用于对存储容量、实时性和安全性要求较高的数据缓存系统,但与AT29C040A不同,由于其编程前并不先将扇区单元擦降为#FFH,所以除要求将单元改写为#00H的情况之外,不能在已写有数据的位置新写入数据(Strata闪速存储单元在写入时采用是的“与”操作,所以只有那些为1的位才能被正确编程),而只有等该单元所在的块被擦降(存储的块所有单元均为#FFH)所方能重用。所以这种存储器并不适用于要求随机修改数据的场合。 |
||||||||||||||||||||||||||||||||||||||
| 文章录入:armopen 责任编辑:armopen | ||||||||||||||||||||||||||||||||||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | ||||||||||||||||||||||||||||||||||||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 没有相关文章 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系我们 | 友情链接 | 版权申明 | 网站公告 | |||
|