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