硬汉嵌入式论坛

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

[其它] EasyFlash的初始化速度

[复制链接]

17

主题

187

回帖

238

积分

高级会员

H7 TOOL 大法好!

积分
238
发表于 2025-10-16 08:28:59 | 显示全部楼层 |阅读模式
大家好! 我的项目是断路器, 有一种情况是 刚上电工作, 但是马上跳闸, 这时候需要产生跳闸记录,
我之前测试了FlashDB,这个库虽然功能强大, 但是 初始化需要200ms的时间, 这200ms已经 错过了 上面描述的业务情况;
我知道裸写 裸读肯定的最快的, 但是 裸写 裸读没有掉电保护,不好维护;

我听说EasyFlash ,不知道 速度快不快
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
119430
QQ
发表于 2025-10-16 10:41:20 | 显示全部楼层
帮顶。
回复

使用道具 举报

26

主题

394

回帖

472

积分

高级会员

积分
472
发表于 2025-10-16 11:13:00 | 显示全部楼层
本帖最后由 tovinz 于 2025-10-16 11:14 编辑

写个裸的就行了。这些库只是抽象了一下用法而已。

掉电保护给个简单的思路
微信图片_2025-10-16_111117_536.jpg
1:     连扇区擦除还没来得及,就掉电了,重新上电后还是完整的旧数据,而且校验通过,不需要恢复,但时新的写入操作没有成功的
2,3:主数据区正在执行擦除或者执行了擦除后正在进行写入操作,但是写入没有完成,掉电了。重新上电后发现主数据区数据校验失败,备份数据区校验通过,把备份数据区的内容恢复到主数据区
       (这里有个问题,恢复到主数据区的过程中也会执行擦除写入操作,在这过程中也有断电的可能,其实还是回到了2,3这个情况)
4:     主数据区写入完成,备份数据区还没来得及擦除,掉电了。重新上电后发现主数据区校验通过,备份数据区校验也通过,但是两个数据不一样,就将主数据区的数据恢复到备份数据区
       (这里有个问题,恢复到备份数据区的过程中也会执行擦除写入操作,在这过程中也有断电的可能,其实就跳到了5,6这个情况)
5,6:主数据区写入完成,备份数据区正在执行擦除或者执行了擦除后正在进行写入操作,但是写入没有完成,掉电了。重新上电后发现主数据区数据校验通过,备份数据区校验失败,就将主数据区的数据恢复到备份数据区
       (这里有个问题,恢复到备份数据区的过程中也会执行擦除写入操作,在这过程中也有断电的可能,又回到5,6这个情况)
7:    两个数据区都完整的被写入了,就成功写入,不需要恢复。

其中总的原则很简单,就是:
(1)如果有一个是校验失败另一个校验通过,用校验通过的去恢复校验失败的
(2)如果两个校验都通过但是数据不相同,就用主数据去恢复备份数据
回复

使用道具 举报

4

主题

428

回帖

440

积分

高级会员

积分
440
发表于 2025-10-16 13:49:58 | 显示全部楼层
速度和FlashDB关系不大,是你用外置flash慢的,换st的内置flash速度快到起飞。
对了空间越大速度越慢。他要检查初始区块头。

[13:45:01.104]发→◇reboot

[13:45:01.109]收←◆reboot[I/SYS] UID = 20363753 50435015 00540032
[D/SYS] (../User/bsp/bsp.c:267) System Clock information
[D/SYS] (../User/bsp/bsp.c:268) SYSCLK_Frequency = 80MHz
[D/SYS] (../User/bsp/bsp.c:269) HCLK_Frequency   = 80MHz
[D/SYS] (../User/bsp/bsp.c:270) PCLK1_Frequency  = 80MHz
[D/SYS] (../User/bsp/bsp.c:271) PCLK2_Frequency  = 80MHz
[I/FAL] RT-Thread Flash Abstraction Layer (V1.0.0) initialize success.
[FlashDB] FlashDB V2.1.1 is initialize success.
[FlashDB] You can get the latest version on https://github.com/armink/FlashDB .
[I/SYS] The system now boot 118 times.
回复

使用道具 举报

0

主题

296

回帖

296

积分

高级会员

积分
296
发表于 2025-10-16 14:03:55 | 显示全部楼层
可以考虑用芯片的备份RAM区域(电池供电)记录关键的信息。然后正常工作的时候再写到flash的记录中。
回复

使用道具 举报

17

主题

187

回帖

238

积分

高级会员

H7 TOOL 大法好!

积分
238
 楼主| 发表于 2025-10-20 10:05:27 | 显示全部楼层
tovinz 发表于 2025-10-16 11:13
写个裸的就行了。这些库只是抽象了一下用法而已。

掉电保护给个简单的思路

非常有道理, 感谢大哥, 最后两句总结很到位, 我按照大哥的思路去开展 / 验证, 感谢大哥
回复

使用道具 举报

17

主题

187

回帖

238

积分

高级会员

H7 TOOL 大法好!

积分
238
 楼主| 发表于 2025-10-20 10:07:17 | 显示全部楼层
cctv180 发表于 2025-10-16 13:49
速度和FlashDB关系不大,是你用外置flash慢的,换st的内置flash速度快到起飞。
对了空间越大速度越慢。他 ...

是的, 我当时是选择 初始化 全片8M , 我用的是 GD25Q64, 本身也不是FlashDB慢, 是因为 查询 校验8M空间 本身就不快
回复

使用道具 举报

17

主题

187

回帖

238

积分

高级会员

H7 TOOL 大法好!

积分
238
 楼主| 发表于 2025-10-20 10:08:40 | 显示全部楼层
regbbs 发表于 2025-10-16 14:03
可以考虑用芯片的备份RAM区域(电池供电)记录关键的信息。然后正常工作的时候再写到flash的记录中。

有道理唉 , 芯片自身有备份区域, 在 触发掉电中断的时候, 就可以最快速 存入芯片的备份存储, 感谢大哥, 无疑这个速度是最快的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 01:32 , Processed in 0.047445 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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