当前位置: 华文世界 > 数码

FLASH 模拟 EEPROM

2024-03-08数码

1. 简介

FLASH 和 EEPROM 都是非易失性储存器,在掉电后数据还会保留。FLASH 和 EEPROM 最 大的区别是擦除方式不同,EEPROM 可以按字节进行擦除,但 FLASH 最小擦除单位是页,一 页通常包含多个字节甚至几 K 字节。FLASH 和 EEPROM 擦写属性决定了 EEPROM 容量小 但擦写寿命比较高,而 FLASH 容量非常大,但擦写寿命短。 在 MCU 主频高的情况下,可以采用 FLASH 模拟 EEPROM 来降低成本。

本文介绍了一种采 用 FLASH 模拟 EEPROM 的方法,实现了 EEPROM 按字节进行数据修改,可防止复位或掉 电产生的数据丢失,当采用的 FLASH 存储空间越大,EEPROM 性能越好。

2. EEPROM 备份区结构

本文以63页DATA FLASH模拟2K字节EEPROM来介绍FLASH模拟EEPROM的方法。

2.1. GD32A50x FLASH 简介

GD32A50x提供高达384KB片上FLASH,其中bank0 256KB,bank1 128KB。基地址和大小如 表2-1. 384KB闪存基地址和大小所示。

表 2-1. 384KB 闪存基地址和大小

2.2. EEPROM 数据备份结构

表 2-2. FLASH 页数据备份存储结构1

表 2-2. FLASH 页数据备份存储结构2

3. FLASH 模拟 EEPROM

方案 3.1. 算法实现

3.1.1. 参数宏

表 3-1. 参数宏

3.1.2. API 函数

函数 eeprom_init 函数 eeprom_init 用于初始化 EEPROM 备份区,并获取当前正在用于 EEPROM 备份的 FLASH 页相对编号。

表 3-2. EEPROM 初始化1

表 3-2. EEPROM 初始化2

表 3-2. EEPROM 初始化3

函数 eeprom_write

函数 eeprom_write 用于索引当前可写的地址,并将数据写到对应 FLASH 地址。注意该函数 的入参 ee_addr 是模拟 EEPROM 地址,范围为 0-135。

表 3-3. EEPROM 写函数

表 3-3. EEPROM 写函数1

表 3-3. EEPROM 写函数2

表 3-3. EEPROM 写函数3

3.1.3. 测试结果

测试在 EEPROM 中改写第一个字节共 16 次。写入数据如图 3-1. 读写数据所示。

图 3-1. 读写数据

代码如表 3-5. 测试 demo 所示。

表 3-5. 测试 demo

表 3-5. 测试 demo2

测试结果如图 3-2. EEPROM 备份区数据所示

图 3-2. EEPROM 备份区数据 图 3-2. EEPROM 备份区数据