首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >STM32F746ZG -如何更新闪存中256 KB扇区的某些部分

STM32F746ZG -如何更新闪存中256 KB扇区的某些部分
EN

Stack Overflow用户
提问于 2019-06-01 20:47:52
回答 2查看 285关注 0票数 0

我正在使用STM32F103并将我的代码转移到STM32F746。F103能够在1KB和2KB的基础上以页为单位更新闪存。我有STM32F746ZG核板,我的代码很大,flash占用了0x08038000。我想将其他小应用程序保存在0x08040000(sector_5)上。这个应用程序由几个2KB大小组成。我需要在Sector_5中存储多个应用程序,而M7不能以1KB或2KB为增量使用闪存。

以下是STM32F746ZG的扇区大小。

代码语言:javascript
运行
复制
#define ADDR_FLASH_SECTOR_0 ((uint32_t)0x08000000) // 32 Kbytes
#define ADDR_FLASH_SECTOR_1 ((uint32_t)0x08008000) // 32 Kbytes
#define ADDR_FLASH_SECTOR_2 ((uint32_t)0x08010000) // 32 Kbytes
#define ADDR_FLASH_SECTOR_3 ((uint32_t)0x08018000) // 32 Kbytes
#define ADDR_FLASH_SECTOR_4 ((uint32_t)0x08020000) // 128 Kbytes
#define ADDR_FLASH_SECTOR_5 ((uint32_t)0x08040000) // 256 Kbytes
#define ADDR_FLASH_SECTOR_6 ((uint32_t)0x08080000) // 256 Kbytes
#define ADDR_FLASH_SECTOR_7 ((uint32_t)0x080C0000) // 256 Kbytes

从Sector_5到Sector7,STM32F746由每个256 KB扇区大小的闪存组成。如果我想使用Sector_5,我必须擦除整个扇区。如果我只想更新Sector_5前面的大约2KB,并保持2KB之后的区域不变,该怎么办?这意味着我只将内容从0x08040000更新到0x08042000。我必须保持从0x08042001到0x0807FFFF。

我甚至不能将256KB的闪存复制到RAM中。因为F746只有240KB的内存,而我的许多任务已经使用了内存,所以没有足够的内存来复制一个扇区。在这种情况下,请让我知道如何更新闪存中256KB的一部分。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-02 03:51:13

在ST的闪存技术上,如果不先擦除它,就无法在扇区的任何地方进行更新。因此,如果第一个2KB中有内容,则在不擦除扇区其余部分的情况下无法对其进行更新。

一种可能性是,您可以保留一个扇区作为临时缓冲区,而从不将其用于实际存储。假设你使用扇区7来做这个。因此,当您要更新扇区5时,请擦除扇区7,将扇区5复制到扇区7,然后擦除扇区5并将相关内容复制回来。

另一种可能是为此添加外部EEPROM或SRAM。SPI闪存EEPROM相当便宜,通常有100,000个写入周期,因此也非常适合此用途。

票数 2
EN

Stack Overflow用户

发布于 2019-06-01 22:49:04

这要看情况了。在许多STM32微控制器上,您可以在不擦除闪存的情况下将闪存的位清零。当然,你不能设置这些位--它只能通过擦除操作来完成。一些芯片不允许这样做,因为闪存扇区有自己的CRC。

如果您的芯片允许写入0xff填充的闪存,则可以将数据存储在此扇区的另一个位置。如果没有,您需要将数据复制到另一个扇区,重新创建该扇区,然后将数据写回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56406902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档