mountfushan 发表于 2022-11-7 16:50:00

写文件的效率和flash寿命问题。

最近交接了别人的一个项目,用nand flash做的存储器,我看他在向文件写入1000组数据时,用for循环的方式,每次写入一组(一组8个字节)。但是不是应该用for循环的方式把要写入的内容拼接好,然后一次性写入更合适么?这样分次写入效率低就算了,会不会导致更多的擦除操作,降低flash的寿命。我不太了解文件系统的底层,希望有大佬解答一下。

eric2013 发表于 2022-11-7 16:59:01

这个要看NAND擦写均衡效率了,加入管理的话,好很多。

这种写法,慢是肯定的。没有整块操作快。

mountfushan 发表于 2022-11-7 17:09:18

谢谢大佬的解答,实在不想老改别人的代码。改完出了问题,解释不清。

eric2013 发表于 2022-11-8 09:50:33

mountfushan 发表于 2022-11-7 17:09
谢谢大佬的解答,实在不想老改别人的代码。改完出了问题,解释不清。

嗯,这种玩法也行,影响不大。

caicaptain2 发表于 2022-11-8 09:57:11

可能是为了节省ram吧。如果一次性写入,需要准备很多kb的缓存。 其实,flash主要是擦除费芯片,写入的影响还好。

caicaptain2 发表于 2022-11-11 10:36:29

贴一下flash的擦写规则,网上搜索的。
常用FLASH擦写规则
最小擦除单位:扇区
可选择擦除单位:扇区、块、全片
最大编程(写入)单位:页( 256 Byte),大于256 Byte则需要循环写入。
Flash 写入数据时和 EEPROM 类似,不能跨页写入,一次最多写入一页,W25Q128的一页是 256 字节。写入数据一旦跨页,必须在写满上一页的时候,等待 Flash 将数据从缓存搬移到非易失区,重新再次往里写。
最小编程(写入)单位:1 Byte,即一次可写入 1~256 Byte的任意长度字节。
未写入时FLASH里面的数据为全1,即0xFF。
只能由 1 —> 0 写入,不能由 0 —> 1 写入,即如果已经写入过了,则需要先擦除(擦除后数据变为全1)再写入。
示例:0xF0(1111 0000),即高4位可写入,低4位不可写入。
————————————————
版权声明:本文为CSDN博主「ParryHuc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33155449/article/details/121199397

mountfushan 发表于 2022-11-15 16:19:36

主要是担心频繁的写入少量数据,耗时长是次要的,影响flash寿命才是最关键的。
页: [1]
查看完整版本: 写文件的效率和flash寿命问题。