[研电赛技术支持] GD32F470开发经验分享:BKPSRAM的使用

[复制链接]
 楼主| caizhiwei 发表于 2023-6-3 10:03 | 显示全部楼层 |阅读模式
本帖最后由 caizhiwei 于 2023-6-3 10:05 编辑

        BKPSRAM(备份SRAM)应用于备份域,即使当VDD供电电源掉电时,该SRAM仍可保持其内容。 附加SRAM(ADDSRAM)只在一些特殊的GD32F4xx器件中可用。 由于采用AHB互联矩阵,上述SRAM块可以同时被不同的AHB主机访问,例如,即使CPU正在访问SRAM0,USBHS也可以访问SRAM1。
        BKPSRAM 具有64kb的空间,如果您设备中使用 RTC后备电池,那么这个区域的sram可以用起来了。
不多说,直接上源码(项目级别的幼稚园码)
1.初始化:
  1. void BSP_BkpSRAM_Init(void)
  2. {
  3.         rcu_periph_clock_enable(RCU_BKPSRAM);
  4.         pmu_backup_ldo_config(PMU_BLDOON_ON); //使能备份域LDO
  5.         pmu_backup_write_enable();
  6.         //启用备份SRAM的低功耗稳压器,以保持它在VBAT模式的内容
  7.         pmu_lowdriver_mode_enable();  
  8.         //等备份SRAM的低功耗稳压器已准备就绪
  9.         while(pmu_flag_get(PMU_FLAG_BLDORF)==RESET){};
  10. }
然后,就是读写接口了:
  1. /******************************************************************************
  2. * 功能                        :        写入数据到备份SRAM中
  3. * 参数                        :        AddrOffset:地址偏移,0-4KB范围;pData:要写入的数据;
  4.                                         DataLen:要写入的数据元素的个数
  5. * 返回                        :        TRUE or FALSE
  6. * 说明                        :         注意:地址偏移+写入的数据长度不能超过4KB
  7. ********************************************************************************/
  8. bool BSP_BKPSRAM_Write_U32_Buff(uint32_t AddrOffset, uint32_t *pData, uint32_t Data_num)
  9. {         
  10.         if(pData == NULL) return false;  //无效的地址
  11.         if(Data_num == 0) return false;         //无效的数量
  12.         if(AddrOffset >= BACKUP_SRAM_SIZE) return false; //起始地址有误
  13.         if((AddrOffset + Data_num*4) >= BACKUP_SRAM_SIZE) return false; //空间不够
  14.         memcpy((uint32_t *)(BKPSRAM_BASE + AddrOffset), pData, Data_num*4);
  15.         return true;        
  16. }


  17. //BKPSRAM数据读取
  18. // 元素的个数
  19. bool BSP_BKPSRAM_Read_U32_Buff(uint32_t addr_offset,  uint32_t *buff, uint32_t num)
  20. {
  21.     if(addr_offset >= BACKUP_SRAM_SIZE) return false; //起始地址有误
  22.         memcpy( buff, (uint32_t *)(BKPSRAM_BASE + addr_offset), num*4);
  23.         return true;
  24. }
最后来一个测试:

  1.     BSP_BKPSRAM_Write_U32_Buff(0, (uint32_t *)Crc32Table, 10);
  2.     BSP_BKPSRAM_Read_U32_Buff(0, buffer, 10);
  3.     put_dump ( buffer, 10, 4);
如有疑问,希望大家评论留言哦~



sagade 发表于 2023-6-3 15:22 | 显示全部楼层
老哥,“BKPSRAM 具有64kb的空间”, 这个是笔误吧,不是4KB大小吗?
BKPSRAM有什么应用场景吗,关键数据是不敢存在这里的
 楼主| caizhiwei 发表于 2023-6-3 16:52 | 显示全部楼层
sagade 发表于 2023-6-3 15:22
老哥,“BKPSRAM 具有64kb的空间”, 这个是笔误吧,不是4KB大小吗?
BKPSRAM有什么应用场景吗,关键数据是 ...

手快,笔误,确实是4KB。
在项目中,可以实现掉电存储,但是又比写Flash 快很多哦

评论

老哥,请问这个BKPSRAM后备RAM,掉电真的能保存数据吗? 我想单片机工作时保存一些采集的数据,下次开机能读到以前采集的数据, 我不用后备电池,关机,单片机彻底不工作。 可以吗??  发表于 2023-9-8 09:00
caigang13 发表于 2023-6-3 17:04 来自手机 | 显示全部楼层
这个主要是低功耗应用比较多吧
Bowclad 发表于 2023-9-27 20:53 | 显示全部楼层
测试一下
Undshing 发表于 2023-9-27 21:27 | 显示全部楼层
这个性能挺不错的啊,低功耗可以吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

100

主题

856

帖子

16

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

100

主题

856

帖子

16

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