zyj8848 发表于 2023-3-11 08:23

如何使用GD32A503模拟EEPROM

#申请原创# #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。 三、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的操作成功。 注:如果想操作数据闪存部分,操作方法跟操作主闪存块一样。

飞跃吧 发表于 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
页: [1] 2
查看完整版本: 如何使用GD32A503模拟EEPROM