本帖最后由 穿西装的强子 于 2025-6-6 11:52 编辑
#申请原创# @21小跑堂 以GD32F4为例,假设我们需要将一个扇区反复写入一个用户参数,例如参数有20个bytes,而反复擦写flash会导致损坏,按GD32F4的数据手册上介绍,擦除次数只有10万次,因此反复擦写太快有超过的风险。 为了解决这个问题,我们想到了将扇区所有空间都利用起来,使用索引的方式进行写入,这样就不会反复的擦除,只有在最开始的时候才会擦除,大大的减少了擦除的次数。
写入流程
1. 识别FLASH扇区索引,未存储区域,例如 0x08050020 无数据,记录索引为 0x08050020。
2.写数据,按索引 0x08050020 开始写,不擦除flash,写一次,索引自加(数据长度)。
3.写到扇区最后,如 0x08070000 ,索引变为 0x08050000,开始写,这个时候才擦除一次扇区,然后继续写入数据。
一、Flash 写入次数计算128K存储,假设每次存24个Bytes,整个存储可以存5461次,再擦除一次扇区,扇区可以擦写10万次,存储次数10万*5461,每10秒存一次,可以写193年。 二、硬件平台与开发环境
- MCU:GD32F4xx
- 开发工具:Keil MDK 或 IAR Embedded Workbench
- SDK:GD32F4xx Standard Peripheral Library
三、Flash 轮询写入实现步骤 |