闪速存储器(Flash Memory)以其集成度高、制造成本低、使用方便等诸多优点广泛地应用于办公设备、通信设备、医疗设备、家用电器等领域。利用其信息非易失性和可以在线更新数据参数特性,可将其作为具有一定灵活性的只读存储器使用。
在单片机应用系统中,经常遇到大容量的数据存储问题。闪速存储器由于容量大、存储速度快、体积小、功耗低等诸多优点,而成为应用系统中数据存储器的首选。但是,由于单片机的资源有限,而闪速存储器的种类和工作方式又千差万别,因而在单片机与闪速存储器的接口电路和程序设计中,有许多关键技术问题需要解决。
单片机与闪速存储器的接口电路应注意的问题有:
(1)很多单片机的工作电压为+5V,而很多闪速存储器却工作在1.8~6V之间,有些闪速存储器(Flash Memory)的擦除电压又工作在12V。
(2)8位的单片机很多,而闪速存储器很多是16位的。
(3)同一型号的闪速存储器由于厂家不同,引脚的定义是不一样的,例如Intel公司的28F008BV与AMD公司的29LV008有很多引脚是不一样的。
单片机与闪速存储器的程序设计应注意的问题有:
(1)不同厂家的闪速存储器使用不同的操作命令集,软件要根据不同厂家的闪速存储器使用不同的操作命令集。
(2)很多闪速存储器内部存储结构和时间参数是不同的。由于闪速存储器内部都是分成不同大小存储块,在对闪速存储器进行擦除操作时,软件要根据不同型号的闪速存储器调整被擦除存储块的大小等参数。同时,由于不同型号的闪速存储器时间参数是不同,软件要根据闪速存储器的时间参数来调整读写和擦除操作的时间。
针对上面遇到的问题,我们从硬件和软件两个方面来考虑单片机与闪速存储器应用系统中应解决的关键技术问题。
1 单片机与闪速存储器硬件接口的关键技术
生产闪速存储器的半导体公司主要有美国的Intel、AMD公司和日本的Sharp、Fujitsu公司,这四家公司生产的闪速存储器的市场占有份额相当大。表1列出了四家公司生产的主要型号的闪速存储器的性能指标。
表1 四家公司生产的主要型号的闪速存储器的性能指标
从表1中可以看出,不同厂家的闪速存储器的工作电压和编程擦除电压是不一样的,同时数据位的长度也是不一样的。由于目前国内应用最广泛的单片机仍然是8位的MCS-51系列单片机,16位的单片机种类比较少,而且工作电压在低电压(2.7~3.6V)的单片机又是寥寥无几。能否用市场上常见的普通8位单片机来设计一个与大多数闪速存储器接口的电路呢?答案是肯定的。我们用普通的8位单片机AT89C52设计了一个与闪速存储器TE28F160B3的接口电路,AT89C52是ATMEL公司生产的与MCS-51系列单片机兼容的8位单片机,它内部有一个16K 的E2PROM程序存储器,它的工作电压是5V。TE28F160B3是INTEL公司生产的容量为16M位、数据总线宽度为16位的闪存存储器,它的工作电压为2.7~3.6V。需要指出的是,虽然TE28F160B3的工作电压为2.7~3.6V,但是其各引脚的最大工作电压范围却在-0.5V~5.0V,各引脚高电平最高工作电压不能超过5.5V,这样就使得我们可以使用AT89C52来设计与TE28F160B3的接口电路。该接口电路如图1所示。
图1 AT89C52与TE28F160B3的接口电路
由于AT89C52是8位单片机,而TE28F160B3是16位数据总线,我们使用了两片74HC244和两片74HC373来完成8位和16位的数据转换。当AT89C52往TE28F160B3写数据时,首先单片机将高8位数据写入到锁存器74HC373-1中。其中74HC373-1锁存信号W373由译码器GAL16V8输出,然后单片机开始执行对TE28F160B3写数据操作,低8位数据由AT89C52的P0口直接写入TE28F160B3,而锁存在74HC373-1中的高8位数据通过缓冲器74HC244-1写入到TE28F160B3的DQ8~DQ15总线上。当AT89C52从TE28F160B3读数据时,读出的高8位数据先锁存到74HC373-2上,然后通过缓冲器74HC244-2读入到AT89C52中。TE28F160B3的存储容量为16M位,有20根地址线A0~A19,而AT89C52一共才有16根地址线。因此利用AT89C52的地址线A15、A14和A13经译码作为两片74HC244、两片74HC373和TE28F160B3的锁存信号和片选信号。这样地址线只剩下A0~A12,为此利用一片计数器74HC4040作为地址线A13~A19,从而就解决了AT89C52的寻址问题。
TE28F160B3的供电电源Vcc与AT89C52一样,均接+5V直流电源。但是TE28F160B3的编程电压和擦除电压Vpp必须接+12 V。
图1的单片机使用了市场上常见的AT89C52,但在设计中我们推荐使用宽电压范围工作的单片机AT89LV52和地址译码器ATF16LV8,这样就可以使用+3V左右的供电电源。
在生产闪速存储器的半导体公司Intel、AMD、Sharp和Fujitsu中,Intel和Sharp公司的闪速存储器的引脚是一样的,AMD和Fujitsu公司的闪存存储器的引脚是一样的。所以Intel和AMD公司的闪速存储器是不能互换的,如果要互换必须经过一个接口板进行转接。
2 单片机与闪速存储器程序设计的关键技术
由于生产闪速存储器的半导体公司众多,即使是同一公司的闪速存储器也是型号众多、千差万别。为使程序设计尽可能地适用于大多数的闪速存储器,需注意以下几个关键技术。
2.1 器件自动识别
器件自动识别要识别出器件使用的命令集、内部阵列结构参数、电气和时间参数及器件所支持的功能。器件自动识别的方法有两种:如果闪速存储器支持CFI功能,可以直接通过CFI获得器件的各种参数;如果闪速存储器不支持CFI功能,可以写器件识别命令,然后从器件中读取产品的生产厂家和器件代码,根据生产厂家和器件代码从程序中建立的器件参数表中读取器件的各种参数。器件自动识别的流程图如图2所示。
图2 芯片自动识别流程图
正确识别器件之后,就可以根据器件的命令集对器件进行各种操作。对闪速存储器的所有操作都是通过芯片的命令用户接口CUI实现的。通过CUI写入不同的控制命令,闪速存储器就从一个工作状态转移到另一个工作状态。其主要的工作状态是:读存储单元操作、擦除操作和编程操作。
2.2 读存储单元操作
在闪速存储器芯片上电以后,芯片就处于读存储单元状态,也可以通过写入复位命令进入读存储单元状态,读存储单元的操作与SRAM相同。
2.3 擦除操作
在对闪速存储器芯片编程操作前,必须保证存储单元为空。如果不空,必须对闪速存储器芯片进行擦除操作。由于闪速存储器采用模块分区的阵列结构,使得各个存储模块可以被独立地擦除。当给出的地址是在模块地址范围之内且向命令用户接口写入模块擦除命令时,相应的模块就被擦除。要保证擦除操作的正确完成,必须考虑以下几个参数:(1)该闪速存储器芯片的内部模块分区结构。(2)擦除电压Vpp。(3)整片擦除时间和每个模块分区的擦除时间参数。上面三个参数在器件识别中获得。
2.4 编程操作
闪速存储器芯片的编程操作是自动字节编程,既可以顺序写入,也可指定地址写入。编程操作时注意芯片的编程电压Vpp和编程时间参数,这两个参数也可以在器件识别中获得。
上面,我们给出了单片机与闪速存储器硬件接口电路和软件编程设计中应注意的关键技术问题。硬件上主要考虑芯片的工作电压和编程电压,软件上要考虑到器件的内部结构、使用命令集和时间参数等因素。随着闪速存储器器件朝着容量越来越大、工作电压越来越低、支持共同的接口标准的方向发展,将会使闪速存储器硬件接口和软件编程设计越来越容易,也会使闪速存储器的应用更加广泛。