一、概述
FLASH存储器和EEPROM均属于非易失性存储器类别,即便在断电后,其内部存储的数据仍能得以保留。两者的主要差异在于擦除方式的不同。EEPROM允许按字节进行擦除操作,而FLASH的最小擦除单位是页,一页通常包含多个字节甚至数千字节。鉴于FLASH和EEPROM的擦写特性,EEPROM虽然容量较小但拥有较高的擦写寿命,而FLASH则具有大容量的优势但擦写寿命相对较短。在MCU主频较高的情境下,通过FLASH模拟EEPROM的方式能够有效降低成本。
二、EEPROM备份区架构详述
本文以63页DATA FLASH模拟2K字节EEPROM为例,详述了如何使用FLASH来模拟实现EEPROM的功能。GD32A50x微控制器提供了高达384KB的片上FLASH,其中包括两个存储Bank,Bank0为256KB,Bank1为128KB。其基地址和大小如表2-1所示。
表 2-1:384KB闪存基地址及大小
对于EEPROM的数据备份结构也进行了详细描述,具体的数据备份存储结构如表2-2所示。
三、实施方案与算法实现
3.1 参数宏定义
详细的参数宏定义如表3-1所示。
3.2 API函数详解
eeprom_init API函数用于初始化EEPROM备份区,并获取当前用于EEPROM备份的FLASH页的相对编号。关于其初始化的详细信息如表3-2所示。
eeprom_write函数被用于索引当前可写的地址,并将数据写入到对应的FLASH地址中。该函数的参数ee_addr是模拟的EEPROM地址,其范围为0至135。eeprom_write函数的更多细节如表3-3所示。
图 3-1:数据读写情况
测试所用的代码详见表3-5的测试demo。
表 3-5:测试demo及结果
经过测试,EEPROM备份区的数据情况如图3-2所示。
总结而言,本文通过使用FLASH来模拟EEPROM的功能,不仅在成本上有所优化,而且有效解决了因掉电而可能丢失数据的问题。对于EEPROM备份区的详细架构、算法实现以及API函数等均做了详尽的阐述与解析。实际测试结果也验证了该方案的可行性与可靠性。