利用Flash、EEPROM存储变量

来源:互联网 发布:基调网络监测挂机 编辑:程序博客网 时间:2024/06/13 04:33


在许多常见的应用中,微处理器要求用非易失性存储器来存放其可执行代码、变量和其他暂态数据。ROM、EPROM或Flash Memory(快闪存储器)常被用来存放可执行代码(因这些代码不会被频繁修改),而变量数据的存储只能用Flash或EEPROM(因Flash和 EEPROM对于数据修改有足够的灵活性)。若可执行代码采用Flash存储,对于变量的存储,有三种方案可供选择:

方案一


采用两个独立的非易失性存储器:一个Flash存储器和一个EEPROM。
由于Flash和EEPROM在市场上随处可以买到,目前这种方案用得比较普遍。Flash和EEPROM共享公共的地址总线、数据总线和两条控制总线 (OE和WE),微处理器用两条独立的控制线分别调用Flash和EEPROM:CE(Flash)和CE(EEPROM)。

方案二


只用一个Flash存储器,再用其部分扇区仿真EEPROM。
这种方案把一个较大的Flash存储器分成两个不同的功能区:可执行代码存放在一个区,其余的存储空间则专用于EEPROM仿真。


这种方案的工作原理是什么呢?
Flash可以逐个字节地写入,但不能逐个字节地擦除,而只能以扇区为单位来擦除(扇区大小可从8K字节到整个芯片大小)。通过以下方法可以克服这种扇区 擦除所带来的不便:把数据依次写入一个扇区,写满后,再把这些新写入的数据拷贝到另一个备用的存储单元内。因此,EEPROM仿真建立在两个Flash扇 区的基础上:第一个扇区用来读写数据,第二个则是备用扇区,


专门存放第一个扇区写满时对这些最新变量值的拷贝。
Flash存储器不能同时处理二个存储单元。因此,用于控制对EEPROM仿真扇区进行Flash操作的软件代码必须存放在Flash存储器之外。这就要 在应用中增加一个存储器,通常是SRAM。用于EEPROM仿真的可执行代码存放在Flash存储器内,大小约为16K字节。SRAM所需的例行子程序大 约为1K到4K字节。

方案三


FlASH 单芯片解决方案。FlASH 是一种单电压供电的复合存储器,组合了Flash和EEPROM两个独立存储单元。FlASH 的EEPROM存储单元提供了EEPROM所具有的全部灵活性:它既可以逐个字节地读写,也可逐页读写(一页是64字节)。最为重要的是,在对Flash 进行读操作的同时可以对EEPROM进行写入。这样,单芯片的FlASH 就具有与独立的Flash和EEPROM存储器同样的功能。FlASH 的Flash和EEPROM存储单元共享公共的数据总线、地址总线和控制总线。唯一的不同是芯片使能输入信号:CEF(Chip Enable Flash)用于控制Flash存储单元,而CEE(Chip Enable EEPROM) 用于控制EEPROM存储单元。


双存储器:单片封装中具有两种类型的存储器
方案二和方案三分别用不同的方法把Flash和EEPROM组合在单一芯片上。因此,为了选择最合适的存储器件,用户就必须搞清楚存放在这些双存储器上的数据类型。


双重非易失存储器包含两个独立的存储单元,我们分别称之为单元A和单元B。单元A是一个常规的Flash,其最小编程单元是扇区;单元B在功能上相当于 EEPROM,可对字节编程。单元B既可以用Flash技术,也可用EEPROM技术来实现,这视制造商选择的方法而定。这样,我们就可以把双重非易失存 储器分为两类:方案二所采用的Flash Flash和方案三所采用的Flash EEPROM。
现在让我们来看一下这些存储器的不同应用。由于单元A的Flash功能对于两类存储器是一样的,可以根据单元B的EEPROM功能被更新的次数把应用分为三类:
很少更新(1到10次)、若干次更新(10到1000次)和很多次更新的应用。

很少更新的应用
在整个应用的生命周期单元B内的数据只更新一两次。一个典型的例子是若单元B内存放的是可执行代码,在修复一个主要故障时可能会更改这些代码。这些应用通常是更新整个单元B,因而不必逐个字节地修改。
如果采用的是Flash Flash,那么单元B的第一次写操作是直接写入的,而随后的写入操作就要受存放在单元A中的EEPROM仿真软件的控制,首先控制单元B的Flash扇区的擦除(约需1秒的时间),然后控制新数据的写入操作。
显然,若单元B是EEPROM,更新是简单易行的。然而,应用并不能从EEPROM逐字节写入的功能中获益,这时最佳选择是Flash Flash方案。

更新若干次的应用
在应用的整个生命周期内,单元B将被更新10-1000次。典型的例子如:每周重新保存一次配置的系统或每周需要新配置的应用,这些应用一般只更新单元B的部分内容(几个字节),其余的内容则保持不变。
若采用Flash Flash,只写入部分内容的最简易的方法是使用Flash存储器的扇区划分。这种情况下,EEPROM仿真软件必须先把新数据写入一个空白的Flash 扇区,然后擦除原来的扇区,并将该扇区定义为新的空白扇区。这意谓着单元B内必须一直备有一个空白扇区,这样,被仿真的EEPROM实际上要求两倍的 Flash空间。另外,EEPROM仿真软件的执行时间可能很长且难以预料,有时候这将妨碍实时操作的进行,这一点也应该注意 。
如果采用Flash EEPROM,就不会出现上述问题,因为单元B的更新是作为标准的EEPROM写操作执行的。

更新很多次的应用
在应用的整个生命周期内,EEPROM的内容可能被更新10,000-100,000次,这种情况通常是变量数据的更新。一般说来,有待更新的字节遍布于 整个单元B,几乎不可能只更新存储器的一小部分内容。这种情况下,如采用Flash Flash就会带来严重的问题:所需要的Flash存储器大小可能会六倍于等效的EEPROM(意即须用1.5MB的Flash来仿真256KB的 EEPROM),这将导致巨大的软件系统开销。
由于此时的应用要求具有写入任意选定字节的能力,毫无疑问,应选用Flash EEPROM方案。
FLASH 在应用中的优点
显然,FLASH 很适合于那些微处理器要访问很长的可执行代码和中、大量数据存储的应用。此外,Flash 方案还有下面两个重要特征: 减少了PCB的面积。例如,一个TSOP40封装的M39432与独立的TSOP32封装的4M Flash和TSOP28封装的256K EEPROM相比,大约可节约40%的PCB面积。

大多数采用非易失存储器的应用中都含有序列号、制造参数和可跟踪性参数,这些参数与其他变量存放在一起,并且在整个产品生命周期内不能被修改。FLASH 方案可提供长度为64字节的一页用于一次性写入,此后便不能再作修改。


总之,当EEPROM用来存储须经常更改的变量时,显然不能用Flash代替。相反,当需要存储大块的数据阵列,并且修改次数在100次以下时,才可用 Flash Flash来存储这些数据。还要注意一点,带有EEPROM仿真的双存储器Flash Flash方案需要软件开发。

欲了解进一步详情,请参见ST网站(www.st.com)上的应用说明AN931和AN997。  
原创粉丝点击