flash内存分配和使用注意事项

flash内存分配和使用注意事项

依据汇顶的GR5513 SOC级芯片的内部flash进行说明。

提示:flash的写操作只能由1变为0,不能由0变为1;若由0变为1需要进行擦除操作。

Flash存储地址:0x0100_0000 ~ 0x0107_FFFF或0x0300_0000 ~ 0x0307_FFFF,共512 KB。

1.flash存储映射
GR551x封装了一个采用XQSPI总线接口的可擦除外部Flash存储器。该Flash物理上由若干个4 KB大小的Flash
Sector组成;逻辑上可根据不同的应用场景,分成不同用途的存储区域。

在这里插入图片描述
• System Configuration Area(SCA):系统配置区,主要用于存储系统启动参数配置信息。
• User App:Application Firmware存储区域。
• Unused Space:空闲区域。开发者可以自行使用该区域。比如,在DFU升级过程中,用Unused
Space临时存储新的Application Firmware。
• Non-volatile Data Storage(NVDS):非易失性数据存储区域。
注意说明:NVDS缺省占用Flash的最后一个扇区(Sector)。

2.对空闲区域进行地址分配
一个扇区4K(即4096(0-4095),即0xFFF个地址),每个地址都能存一个字节(最大0xff)。
一个扇区的地址范围就是:0x000-0xFFF
Flash存储地址:0x0100_0000 ~ 0x0107_FFFF。

倒数第1个扇区107F000-107FFFF4KByte
倒数第2个扇区107E000-107EFFF4KByte
倒数第3个扇区107D000-107DFFF4KByte
倒数第4个扇区107C000-107CFFF4KByte
倒数第5个扇区107B000-107BFFF4KByte
倒数第25个扇区1067000-1067FFF4KByte
倒数第26个扇区1066000-1066FFF4KByte
倒数第27个扇区1065000-1065FFF4KByte

依次进行地址分配,需要用多少个扇区就计算出扇区的起始地址和结束地址即可。

uint32_t FLASH_Write_Address = 0x01066000;  //0x0106_6000 - 0x0107_Dfff
uint32_t FLASH_SectorToErase = 0x01066000;

例如擦除24个扇区进行数据存储使用,擦除方法如下:
hal_flash_erase(FLASH_SectorToErase,0x18000);  //直接擦除24个扇区
//或者一个扇区一个扇区进行擦除
for(i = 0;i<24;i++{
	hal_flash_erase(FLASH_SectorToErase+ 4096 * i,0x1000);   //两个扇区的起始地址之间是差4096个字节
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西瓜籽@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值