硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1972|回复: 7
收起左侧

[客户分享] 连续数据储存的轻量级磨损均衡

[复制链接]

12

主题

41

回帖

77

积分

初级会员

积分
77
发表于 2024-8-21 14:09:50 | 显示全部楼层 |阅读模式
本帖最后由 jasonZJR 于 2024-8-22 09:36 编辑

在使用flash时,不管是mcu内部还是外置类似W25Qxx的储存器,在擦除时都会使寿命减少,在常规使用方法下(写一次数据就需读出,擦除,修改,写入),频繁的擦除操作对flash都不太友好,既然寿命是定植,那就只能减少擦除的次数,看过一些磨损均衡的方案,有的占用资源比较多,有的不太适合小flash使用,于是自己根据其原理写了一个出来。

大致思路:
1.增加一个data head,起到标记头,记录数据长度,CRC16,简单验证头信息。
2.每次写入数据前,查找最后一个data head,并获取空闲地址,如没有data head,空闲地址就是0。
3.找到空闲地址后,插入data head,紧接着插入数据,然后写入flash。
4.如果当前剩余空间不足以容纳新的数据,如果是多扇区则标记本扇区写满,然后将数据写入下一个扇区并标记;如果是单扇区则擦除后再写本扇区。
5.读同步骤2,找到最后一个data head即可。
6.数据恢复,当验证data head失败时,认为本段数据出现错误,不可恢复,则会自动将上一次存储的数据作为最新的数据使用。

优势:占用资源少,具备flash读写即可,可以不用整个扇区读出,只需在开始位置获取第一个data head,然后根据head里记录的长度,就能获取下一个data head或者空闲地址。51单片机也能很好的使用。内外flash都可以用。支持新增数据,支持数据恢复(上一次存储的数据)。
劣势:不支持删除数据,不可一次性存入超过扇区大小 - data head的数据量。

存储模型的思路就是对于接口来说仅有一个扇区可用,接口内部会根据配置在1个或多个扇区来回读写数据。


目前已在GD32,stc51上测试并验证。如果有好的建议我可以学习一下,优化我自己的代码。

支持多个扇区的均衡磨损,data head改为crc校验,对后边的整个数据区进行校验,即使用户数据和data head一样,也不会通过校验
下图第一横线为00 00,代表此扇区已写满,被标记为不可用状态,第二横线为data head
3.png
下图第一横线为此扇区未写满,被标记为活动状态,第二横线为data head
4.png

目前的测试时间消耗如下:
GD32F103     - W25Q16模拟总线  - 6+326 - 7ms - 跨扇区69ms @72MHz
GD32F103     - 内部Flash             - 6+326 - 6ms - 跨扇区8ms   @72MHz
STC8H8K64U - 内部Flash             - 6+14   - 3ms - 跨扇区4ms   @22.1184MHz

核心源码
data_storage.c (35.67 KB, 下载次数: 51)





评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-8-21 16:40:14 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

3

主题

85

回帖

94

积分

初级会员

积分
94
发表于 2024-8-21 19:59:15 | 显示全部楼层
像是flassh模拟eeprom
回复

使用道具 举报

98

主题

360

回帖

654

积分

金牌会员

积分
654
发表于 2024-8-22 08:44:20 | 显示全部楼层
作为研究学习值的推荐。
回复

使用道具 举报

2

主题

119

回帖

125

积分

初级会员

积分
125
发表于 2024-8-22 08:49:01 | 显示全部楼层
楼主,上个代码瞧瞧
回复

使用道具 举报

12

主题

41

回帖

77

积分

初级会员

积分
77
 楼主| 发表于 2024-8-22 09:27:29 | 显示全部楼层
云琴箫龙 发表于 2024-8-22 08:44
作为研究学习值的推荐。

感谢阅读~~~~~~~~~~~
回复

使用道具 举报

12

主题

41

回帖

77

积分

初级会员

积分
77
 楼主| 发表于 2024-8-22 09:28:32 | 显示全部楼层
gjeoi 发表于 2024-8-21 19:59
像是flassh模拟eeprom

没有具体了解flash模拟eeprom
回复

使用道具 举报

12

主题

41

回帖

77

积分

初级会员

积分
77
 楼主| 发表于 2024-8-22 09:36:44 | 显示全部楼层

已上传~~~~~~~~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 16:25 , Processed in 0.048952 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表