EEPROM是非易失存储器的一种。

非易失存储器在掉电时数据不丢失,可以永久存储,一般用于存储设置相关的数据。

与之相对的为易失存储器,易失存储器在掉电时数据丢失,常用于存储运行过程的数据,其又分为DRAM(动态随机存储器)和SRAM(静态随机存储器),单片机的内部RAM为SRAM。

非易失存储器主要有几类:

Flash,其特点数据存储单元的数据可以由1写到0,而不能从0写到1。只能通过整页擦除(page, 256bytes),或者整个sector(STM32F051为1kByte),或者是整个block(STM32F051为64kByte)将存储单元的数据从0改成1。单片机通过SPI的接口外接Flash。其擦写的寿命一般为10万次。

EEPROM,其特点数据存储单元的数据可以由1写到0,也可以从0写到1,也就是可以对单字节的数据进行任意的读写操作。单片机通过IIC的接口外接EEPROM。其擦写的寿命一般为10万次。

铁电存储器最主要的特点是读写速度快,并可以像非易失性存储器一样使用。因铁电晶体的固有缺点,擦写次数是有限的,超出了限度,FRAM就不再具有非易失性。最大擦写次数高达100万次,比flash寿命长10倍。

前几年比较火的PIC系列处理器有内置的EEPROM,而近年来比较流行的ST的STM32F05X系列以及STM32F1xx系列的处理器,都没有内置的EEPROM,都可以通过内置的Flash实现EEPROM功能。

正如上所述,Flash和EEPROM相比,最主要的区别在于Flash不能擦除单个字节。

因此采用Flash实现单字节读写时,需要有编写专门的软件模块实现该功能。

具体步骤如下:

1. 从内置Flash中取出两块存储区,一块存储区用于正常存储,另一块作为数据的备份。

2. 在单片机的RAM空间中分配与存储区相同大小的空间,用做数据的缓存。

3. 当需要改写数据时,首先将数据缓存至RAM缓存中。

4. 擦除Flash数据的存储区,将RAM缓存中的数据写入数据区,并写入CRC校验值。

5. 擦除Flash备份的存储区,将RAM缓存中的数据写入备份区,并定入CRC校验值。

6.单片机上电时,分别从Flash的数据区和备份区读出数据,并计算CRC值,根据CRC值判断选择数据区的数据或者是备份区的数据。

综上,是当单片机内部没有EEPROM,或者是内部的Flash不适合用于存储永久保存的数据时,可以通过外置的EEPROM存储设备的设置数据(比如产品的LED灯的颜色,亮度等),以及用户的设置数据(比如门禁产品用,用户的卡号数据以及密码数据等)。与Flash相比,由于EEPROM可以单字节进行读写,因此很多数据都可以直接写入到EEPROM,不需要通过复杂的搬移->擦写->搬移等逻辑在Flash中实现可靠的数据永久存储。