Flash模拟EEPROM的方法

来源:互联网 发布:工资管理系统c语言 编辑:程序博客网 时间:2024/05/21 06:21

1.   EEPROM

      EEPROM是“electrically erasable, programmable, read-only”(电可擦写可编程只读存储器)的缩写。 DRAM断电后存在其中的数据会丢失,而EEPROM断电后存在其中的数据不会丢失。 另外,EEPROM可以清楚存储数据和再编程,也就是说EEPROM数据是可以覆写的。如Write(add1,ptr1,len1),add1为写入地址,ptr1为需要写入次地址数据的指针,len为数据的长度。但需要改变add1处的值为ptr2时只需要简单的把ptr2值在直接写入Write(add1,ptr2,len2)。因为EEPROM的容量一般比较小,所以的写入速度很快

2.  Flash

      Flash是一种基于半导体的存储器,具有系统掉电后仍可保留内部信息,及在线擦写等功能特点,是一种替代EEPROM存储介质的新型存储器。因为它的读写速度比EEPROM更快,在相同容量的情况下成本更低.

Flash写:由1变为0,变为0后,不能通过写再变为1。

Flash擦除:由0变为1,不能只某位单元进行擦除。

Flash的擦除包括块擦除和芯片擦除。块擦除是把某一擦除块的内容都变为1,芯片擦除是把整个Flash的内容都变为1。通常一个Flash存储器芯片,分为若干个擦除block,在进行Flash存储时,以擦除block为单位。

当在一个block中进行存储时,一旦对某一block中的某一位写0,再要改变成1,则必须先对整个block进行擦除,然后才能修改。

3. 使用Flash模拟EEPROM的目的就是为了省掉EEPROM节约成本。

       但是Flash在擦除时速度是比较慢的,一个64K的block擦除需要1S+的时间,所以实际用户会感觉到明显的延时。在应用中一般常变的数据需要存储在EEPROM中,如当前节目,当前音量等,因为写的很频繁(基本换台一次就的写一次),如果存在Flash中,速度太慢,会让人受不了。而且Flash的擦写寿命要远小于EEPROM,因此过于频繁的擦写会降低Flash的使用寿命。而一些需要大量空间而且不是常变的数据就保存在Flash中,如节目数据,卫星,天线数据等。

4.实现方法

为了方便说明首先定义几个值

EEPROM数据     BYTE  EEPROM_Data[EEPROM_Size]

EEPROM 大小     WORD EEPROM_Size  2k

逻辑EEPROM个数 BYTE Logic_EEPROM_Num

当前数据所在的逻辑EEPROM位置  BYTE Current_Position

在此以一个2M,每个Block_Size = 64K的flash为例,模拟一个EEPROM_Size = 2K的EEPROM

使用任意使用一个未使用过的block来模拟这个2K的EEPROM。因为一个block为64K,所以

Logic_EEPROM_Num = 64K/2K = 32

每次只写Flash用于模拟EEPROM的这个Block的一个2K的Logic_EEPROM,但需要再次写入新的数据时首先读出上次写入的数据到EEPROM_Data中,并且根据需要新写入的数据更新EEPROM_Data,如果再写入当前数据所在的逻辑EEPROM位置的下一个逻辑EEPROM区,也就是Current_Position+1. 当然如果

Current_Position+1 > Logic_EEPROM_Num

表示所有的逻辑EEPROM分区都已经写过了,所以需要首先擦除整个Block,再将EEPROM_Data写入到第一个逻辑EEPROM分区中,这时Current_Position = 1, 这样只有EEPROM_Data改变32次,才需要擦除一次整个Block,对于用户来说,已经是可以接受的了.

 

原创粉丝点击