1 闪存介绍
闪存(FLASH MEMORY闪烁存储器)是一种可以在线进行电擦写,并在掉电后信息不丢失的存储器。是近年来发展最快的一种存储器芯片。由于这种芯片具有不挥发的特性,因而可广泛应用于外部存储领域,如存储个人计算机和电子笔记本OS应用程序和系统数据等。同时它还具有在线电擦写、低功耗、大容量、擦写速度快等特点,并可在内部加入嵌入式算法以便对芯片进行操作。目前由于闪存具有与DRAM等同的低价位成本,因而使得它在寻呼机系统、智能仪表、嵌入式系统、笔记本电脑等领域得到了广泛的应用。表1所列为内存与其它存储器和特性比较。
表1 各种半导体存储的特性比较
种 类 | 读出速度 | 变更方式 | 写入速度 | 数据保持功率 | 相对位成本 | |
RAM | DRAM | (1~9)*10ns | 重写 | 10ns~90ns | (1~9)*100μw | 1 |
SRAM | (1~9)*10ns | 重写 | 10ns~90ns | (1~9)*100μw | 4 | |
NVRAM | 100ns | 重写 | 10ms | 不要 | 1000 | |
ROM | EEPROM | 100ns | 重写 | 10ms | 不要 | 10 |
EPROM | 100ns | 紫外线擦除+电气写入 | 100s900s | 不要 | 1.2 | |
闪烁存储器 | 100ns | 紫外线擦除+电气写入 | 10s | 不要 | 1 | |
OTP | 100ns | 不可 | 不要 | 0.8 | ||
掩膜ROM | 100ns | 不可 | 不要 | 0.5 |
2 闪存LH28F160S5T主要特点
LH28F160S5T是SHARP公司推出的16Mbit的闪存产品,它具有以下特点:
●5V工作电压,5V写入电压;
●具有通用Flash接口(CFI);
●可扩充的命令集;
●高速写入性能,写入速度可达2μs/Byte;
●高速读出性能,读取速度为70ns;
●高密度对称式分块结构,具有32个64kbyte的可擦除块;
●用户可配置×8或者×16模式;
●强大的数据保护特性;
Vpp=GND完全写保护,具有灵活的块上锁,电压跳变时可中止擦除/写入;
●100,000次的擦写寿命;
●可通过指令用户接口(CUI)和状态寄存器(SR)实现自动擦除/写入;
●工业标准56-TSOP封装,芯片大小为14mm×20mm。
3 闪存LH28F160S5T引脚说明
LH28F160S5T的56脚TSOP封装的引脚分布如图1所示。
各引脚功能说明如下:
A0~A20:21位地址输入引脚。在2M×8bit模式下,寻址范围为2M字节;在1M×16模式下,应将A0悬空;
DQ0~DQ15:16位双向输入/输出数据线。在×8模式下,DQ8~DQ15引脚无效;
CE0#、CE1#:片选信号输入端,低电平有效,只有两个信号同时有效时,片选才有效;
OE#:输出使能信号,输入低电平有效。该脚为低时,写无效;
WE#:写有效信号,输入低电平有效;
STS:准备好/忙(RY/BY#)信号,输出高电平为准备好,低电平为忙。编程或擦除时可以通过检测此引脚的状态来判断芯片内部操作是否完成。由于此引脚为开漏输出,,因此,在使用时需要外接上拉电阻到Vcc;
RP#:芯片复位信号,输出低电平有效。当此引脚为低电平时,任何正在运行的内嵌编程或擦除算法立即终止,只有在复位后,内部状态机才处于读模式。此脚可以连接系统复位电路,这样系统处理器就可以在上电复位时从闪速存储器中读取已固化好的程序;
WP#:写保护信号,低电平效。为低时,芯片禁止擦除/写入;
BYTE#:模式选择信号,置低时,为×8模式,并将DQ8~DQ15置为无效;为高时,为×16模式,并将A0置为无效;
Vpp:为擦除/写入电压提供输入的引脚,当时行擦除/写入操作时,Vpp=5V。为低电平时,芯片处于写入保护状态;
Vcc:电源供电引脚,芯片工作电压为5V;
NC:悬空,内部无连接。
4 操作命令及工作状态
4.1 操作命令
闪存的擦除/写入操作是指对特定的地址写入特定的指令序列,通过这个命令用户接口(CUI)可以启动内部写状态机(WSM),从而使其自动完成指令序列要求的内部操作,其中包括:复位(reset)操作、整片擦除(chip
erase)操作、块擦除(block erase)操作、字(节)写入和多字(节)写入操作等。具体的指令序列见表所列2。
表2 闪存LH28F160S5T的擦除/写入指令序列表
操作命令序列 | 复位 | 多字(节)编程 | 字(节)编程 | 段擦除 | 片擦除 | |
需要总写周期数 | 1 | 4 | 2 | 2 | 2 | |
第一个周期 | 操作 | 写 | 写 | 写 | 写 | 写 |
地址 | X | WA | WA | BA | X | |
数据 | FFH | E8H | 40H | 20H | 30H | |
第二个周期 | 操作 | 空 | 写 | 写 | 写 | 写 |
地址 | 空 | WA | WA | BA | X | |
数据 | 空 | N-1 | WD | D0H | D0H | |
第三个周期 | 操作 | 空 | 写 | 空 | 空 | 空 |
地址 | 空 | WA | 空 | 空 | 空 | |
数据 | 空 | WD | 空 | 空 | 空 | |
第四个周期 | 操作 | 空 | 写 | 空 | 空 | 空 |
地址 | 空 | WA | 空 | 空 | 空 | |
数据 | 空 | D0H | 空 | 空 | 空 |
表中的X表示任意有效地址;WA为要写入数据的存储地址,此地址在WE#脉冲的下降沿被锁存;BA为要擦除的块地址,块地址由A20、A19、A18、A17和A16的取值决定;WD为要在地址WA处写入的数据,此数据在WE#脉冲的上升沿被锁存;N为要写入的字(节)个数。
4.2 工作状态
LH28F160S5T有以下几种主要工作状态:
●待命状态
当CE0#或CE1#为高电平时,芯片处于待命状态。此时芯片的功耗极小,输出呈高阻态(与OE#状态无关)。
●复位操作
在复位引脚RP#为低电平脉冲(脉冲宽度大于500ns)时,芯片复位。同时还可以通过向任何一个有效地址写入复位指令FFH来使芯片复位。当复位信号到来时,任何正在进行的段擦除、片擦除或编程等操作将立即被终止。芯片复位后,内部状态机自动处于读状态。
●读操作
当CE0#、CE1#和OE#同时为低电平时,标准的读周期即可从数据总线DQ0~DQ15(×8模式时DQ8~DQ15悬空)上输出存储器阵列的数据。芯片在上电复位后将自动处于读操作状态。
●片擦除
整片擦除操作需要2个总线周期来写入片擦除命令序列,第一个周期在有效地址处写指令30H,第二周期写入指令D0H。在写入第一个指令后,系统将检测STS引脚的状态,如果为1(闲状态),则写入下一个指令。然后由写状态机(WSM)来完成擦除工作。整片擦除需要大约11s的时间。
●段擦除
一次段擦除操作需要2个总线周期来写入段擦除操作指令序列,第一个周期在段地址(位于擦除段内的任何一个地址)处写指令20H,第二周期写入指令D0H;后面就由WSM来完成当前段的擦除,而后继续检测STS,为闲时便进行下一段的擦除。整段除时间约0.34s。
●字(节)编程操作
一次字(节)编程操作需要2个总线周期,第一个周期写入字节编程命令,第二个周期写入具体的编程数据。地址在CE0#、CE1#或WE#的最末一个下降沿时被锁存,数据在CE0#、CE1#或WE#的最早的上升沿时被锁存,在CE0#、CE1#或WE#最末的上升沿时,由WSM自动完成编程操作。单字(节)写入速度约为9.24μs/byte(word),多字(节)写入速度可达2μs/byte(word)。
5 硬件接口
通常对内存的编程是通过通用编程器业实现的,用户将要写入的程序转换成通用编程器能够接受的格式,再将程序写入通用编程器的闪存中。利用闪存可在线编程的特点,笔者在开发基于双DSP(TMS320C32)的图像处理板时,在存储图像处理程序中用了两片闪存LH28F160S5T,并利用这套硬件系统和仿真软件直接对LH28F160S5T进行了编程,这样,不仅节省了通用编程及接插件的费用,还减少了对用户程序进行格式转换的麻烦,从而大量节省了系统开发时间。在TMS320C32DSP仿真环境下直接对LH28F160S5T进行编程的系统硬件接口电路示意图如图2所示(以×8模式为例)。
在图2中,将仿真器一端通过仿真信号线与图像处理板上的TMS320C32DSP芯片相接,另一端通过接口板与PC机相接;地址译码电路由PLD实现;图像处理板上扩充的32位RAM是由4片8位RAM芯片组成,其中RAM0的数据线接DSP的D0~D7,OE接DSP的STRB0-B0;RAM1的数据线接DSP的D8~D15,OE接DSP的STRB0-B1;RAM2的数据线接DSP的D16~D23,OE接DSP的STRB0-B2;RAM3的数据线接DSP的D24~D31,OE接DSP的STRB0-B3;RAM0~RAM3上地址线直接与DSP的地址线相接,写信号WE与DSP的R/W信号相接,片选信号CE与地址译码电路的某输出线相接。这种图像处理板上扩充的32位RAM的地址为:100000H~17FFFFH。
6 软件方法
根据闪存在线编程的特点,笔者采用下面的方法来实现对闪存LH28F160S5T的编程。
首先将写入程序编译链接生成扩展名为OUT(DSP要求的文件格式)的目标文件后,在DSP仿真环境下,装载到本图像处理板上的程序RAM中的某区域,如起始地址为100000H的区域;然后将写入控制程序装载到程序RAM的另一个区域,如起始地址为170000H的区域,并保证两个程序没有重叠(这只需在这两个程序的链接命令文件中定义好装载起始地址即可)。最后运行该写入控制程序,并从程序RAM中的100000H单元开始,逐字地将用户程序写入到闪存LH28F160S5T中,从而完成对闪存LH28F160S5T的编程。
在对闪存LH28F160S5T写入之前,应对其原有的内容进行擦除。擦除原有内容可以采用整片擦除方式,也可以以块为单位进行擦除,如果64k byte为一块,那么,2Mbyte共有32块。这里应该注意的是:DSP与闪存LH28F160S5T的时序匹配问题,因此,在对闪存LH28F160S5T的任一单元进行写入前,都必须先判断准备好/忙信号STS#(RY/BY#)的状态,当它为高电平时,表示闪速存储器LH28F160S5T已准备好,可以写入数据;而当STS#(RY/BY#)为低电平时,则不能给LH28F160S5T闪速存储器中写入数据。由于从程序RAM单元中取出的数据为32位,而闪存LH28F160S5T的数据宽度为8位,且其数据线与DSP低8位数据线相连。因此,从程序RAM中取出的每一个数据都需要通过移位的办法向闪存LH28F160S5T写入4次。
对LH28F160S5T进行编程控制的源程序如下:
.GLOBAL _MAIN ;定义主函数
.TEXT ;定义代码段
_MAIN:
LDI 6H,IOF ;设置XF1为输入口,XF0为输出口,并输出1
用以下程序可以对闪存LH28F160S5T原有内容进行擦除:
LDI @ADDR_F,AR0;闪存LH28F160S5T起始地址赋给AR0
LDI @OFFSET,IR0;地址增量赋给IR0
LDI 31,RC ;共擦除32块
RPTB CLEAR ;重复执行到CLEAR处,共执行RC+1次
CALL XF1 ;调用子程序XF1
LDI 20H,R0 ;向LH28F160S5T中AR0所指单元送第一个数20h
STI R0,*AR0 ;
CALL XF1 ;
LDI 0D0H,R0 ;送第二个数D0h
CLEAR:STI R0,*AR0++(IR0);地址值增加64k,指向下一块
利用以下程序可以将用户程序逐字写入闪存LH28F160S5T中:
LDI 10H,R1 ;对LH28F160S5T单元写入数据前,先写入10H
LDI @ADDR-F,AR1;闪存LH28F160S5T起始地址赋给AR1
LDI @ADDR-S,AR0;用户程序存放的起始地址赋给AR0
LDI @LENGTH,RC;程序长度-1值赋给RC
RPTB WRITE ;重复执行到WRITE处,共执行RC+1次
CALL XF1 ;
STI R1,*AR1 ;写数据前,先写入10H
CALL XF1 ;
LDI *AR0++,R0 ;取用户程序一个字(32位),地址值加1指向下一字
STI R0,*AR1++ ;将低8位写入闪存 LH28F160S5T,闪存地址加1
CALL XF1
STI R1,*AR1 ;先写入10H
LSH -8,R0 ;右移8位
CALL XF1
STI R0,*AR1++ ;将次低8位写入闪存 LH28F160S5T,闪存地址加1
CALL XF1
STI R1,*AR1 ;先写入10H
LSH -8,R0 ;右移8位
CALL XF1
STI R0,*AR1++ ;将次高8位写入闪存LH28F160S5T,闪存地址加1
CALL XF1
STI R1,*AR1;先写入10H
LSH -8,R0;右移8位
CALL XF1
WRITE:STI R0,*AR1++;将高8位写入闪存LH28F160S5T,闪存地址加1
RETS ;程序结束
下面的这段程序是判断XF1输入是否为高电平的子程序;
XF1:
LOP:TSTB 80H,IOF ;检测XF1是事为高电平
BZ LOP ;若低,跳至LOP继续查询
RETS ;子程序返回
.DATA ;定义数据段
ADDR_S.WORD 100000H ;用户程序存放的起始地址
ADDR_F .WORD 900000H ;闪存LH28F160S5T的起始地址
LENGTH .WORD 4FFFFH ;用户程序长度-1,这里段定为50000H
OFFSET .WORD 10000H ;擦除时,地址的增量为64k(每块为64k)
.END ;结束
7 结束语
本文详细论述了闪存LH28H160S5T在TMS320C32DSP仿真环境下的编程方法,这些方法同样可以作为在单片机、微处理器及PC机其它多种应用系统中对应存编程的直接参考。