如何使用GD32A503模拟EEPROM

[复制链接]
 楼主| zyj8848 发表于 2023-3-11 08:23 | 显示全部楼层 |阅读模式
#申请原创# #GD-FAQ#


一、介绍
目前在MCU系统上有三种常用方法实现EEPROM功能。第一种是使用MCU外挂真正的EEPROM,在GD32A503V EVAL开发板上就有外挂AT24C02C这款EEPROM,可使用I2C对其操作,此种方式优点是不占用闪存,缺点是价格昂贵。第二种方式是通过软件模拟来实现EEPROM功能,优点是便宜,缺点是实现EEPROM功能的额外代码占用了闪存空间。第三种方式就是使用固件来实现EEPROM功能,GD32A503有采用这种方式,即通过SRAM+FLASH来实现EEPROM功能,这种方式不需要任何额外代码,并且功能的实现对用户来说绝对透明。
二、GD32A503 EEPROM功能
以GD32A503VD为例,它拥有64KB的扩展闪存块,可配置成0/64,16/48,16/48,32/32,48/16,64/0的数据闪存和备份EEPROM。4KB的共享RAM,可配制成基本SRAM,EEPROM SRAM和快速编程SRAM。EEPROM SRAM+备份EEPROM可以实现4KB模拟EEPROM的功能,其中备份EEPROM和EEPROM SRAM的比例越大,仿真EEPROM性能越好。
当系统复位或者共享RAM被配置成EEPROM SRAM后,数据将从备份EEPROM中加载到共享RAM中。当读EEPROM时,数据可以直接从共享RAM中读取。当写EEPROM时,数据写入共享RAM中并记录到备份EEPROM中。其中EEPROM的操作地址如下图所示为0x08C00000-0x08C00FFF。
76983640bc9a120a3c.png
三、EEPROM demo讲解
以下是EEPROM读写的demo程序,首先需要将闪存和选项字节解锁,而后将64KB的扩展闪存块设置为48KB的数据闪存和16KB的备份EEPROM,再进行选项字节的复位,使设置生效。随后将4KB的共享RAM配置成EEPROM SRAM。后面就可以对模拟EEPROM进行读写操作了。操作成功后,LED2会被点亮。
int main(void)
{
    fmc_unlock();
    ob_unlock();
    /* configure the dataflash size as 48k and EEPROM backup size as 16k */
    if(0xC000 !=dflash_size_get()){
       ob1_eeprom_parameter_config(OB1CS_DF_48K_EF_16K, OB1CS_EPSIZE_4K);
        ob_reset();
    }
    /* configure the sharedRAM as EEPROM SRAM */
   fmc_sram_mode_config(EEPROM_SRAM_MODE);
   
    /* initialize led on theboard */
    gd_eval_led_init(LED1);
    gd_eval_led_init(LED2);
    /* program and check if itis successful. If not, light the LED1. */
    eeprom_program();
    eeprom_program_check();
      ob_lock();
    fmc_lock();
    /* if all the operationsare successful, light the LED2. */
    if(LED2 == lednum) {
        gd_eval_led_on(LED2);
    }
    while(1);
}
将demo下载到MCU后,如下图所示,调试模式下可以看到,目标地址0x08C00000-0x08C00800都被写入0x01234567,且重新上电后,数据不丢失。代表对模拟EEPROM的操作成功。
12343640bc9c476a61.png
注:如果想操作数据闪存部分,操作方法跟操作主闪存块一样。

飞跃吧 发表于 2023-3-23 19:14 | 显示全部楼层
学习了,可以提供例程学习一下嘛,非常感谢!
zmsh_2008 发表于 2023-5-31 15:21 | 显示全部楼层
这个可以提供源码吗?
eefas 发表于 2023-6-6 12:11 | 显示全部楼层
如何使用片上flash来模拟EEPROM
averyleigh 发表于 2023-6-6 12:30 | 显示全部楼层
擦除页时要关闭中断?              
10299823 发表于 2023-6-6 12:52 | 显示全部楼层
编写针对EEPROM数据的读写函数,实现对EEPROM数据的读取、写入、修改等操作。需要注意的是,在进行数据写入时,需要先将Flash解锁并进行擦除操作,然后才能进行写入。
wilhelmina2 发表于 2023-6-6 13:08 | 显示全部楼层
Flash有一定的擦写次数限制
beacherblack 发表于 2023-6-6 13:26 | 显示全部楼层
需要谨慎使用擦除操作,避免误操作导致Flash损坏。
robertesth 发表于 2023-6-6 13:39 | 显示全部楼层
flash可以模拟eeprom,那为什么还需要外置eeprom
jtracy3 发表于 2023-6-6 13:47 | 显示全部楼层
用flash模拟EEPROM               
backlugin 发表于 2023-6-6 14:09 | 显示全部楼层
找些例程看看,部分代码              
hearstnorman323 发表于 2023-6-6 14:14 | 显示全部楼层
FLASH能用来做eeprom吗?可用多少
10299823 发表于 2023-6-6 14:38 | 显示全部楼层
GD32A503的flash当EEPROM用要分大端小端么
albertaabbot 发表于 2023-6-6 17:11 | 显示全部楼层
根据所选用的单片机型号和Flash规格,选择一个Flash区域作为EEPROM模拟区域。
mickit 发表于 2023-6-6 18:03 | 显示全部楼层
需要合理设计EEPROM数据的布局和结构,尽量减少写入次数,以延长Flash寿命。
updownq 发表于 2023-6-6 18:09 | 显示全部楼层
在GD32单片机中,可以使用Flash来模拟EEPROM
pmp 发表于 2023-6-7 13:08 | 显示全部楼层
先要了解stm32内部flash的使用过程,需要解锁,擦除页,再确定flash地址,向这一地址写入需要保存的数据,写好后再上锁就可以了。
lihuami 发表于 2023-6-7 13:13 | 显示全部楼层
根据实际应用需求,定义EEPROM数据存储的布局和结构。可以使用结构体或数组来管理EEPROM数据。
lifengzhi467430 发表于 2024-3-30 01:26 | 显示全部楼层
学习了,可以提供例程学习一下嘛,非常感谢!  
lifengzhi467 发表于 2024-3-30 12:27 来自手机 | 显示全部楼层
楼主好,我正在调eeprom这个功能,但是老有问题,可以发一下源码参考下吗?感谢!lifengzhi467@163.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

8

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部