标题: 关于STM32f103RCT6的flash检测问题 [打印本页]

作者: 胡凯哥    时间: 2021-9-11 17:56
标题: 关于STM32f103RCT6的flash检测问题
大佬们,本人正在学STM32,STM32的flash可以擦写10万次,是整个flash擦写10万次,还是一个片区(2KB)的空间可以擦写10万次,如果是一个片区擦写10万次的话,当0x08004000到0x08004800这个片区擦写了10万次,坏死了。怎么用程序检测这个片区是否已经坏死,坏死以后将数据保存到下一个片区。本人用的是stm32f103RCT6的开发板。然后使用的是页擦除。就是每次写入数据之前,都要擦除0x08004000到0x08004800这个片区。
作者: abob    时间: 2021-9-11 18:19
那就只能写入后 读出来看看对不对了。 这样很麻烦。 每次都要读。  干脆 你就每次把所有片区写满后 留下当前片区 剩下全擦除 循环使用就好了。  设计的时候计算好寿命就行了。
作者: daemondong    时间: 2021-9-13 08:46
如果确定要达到或超过10万次,你应该用轮流写的方式,比如0x08004000-0x08004800,0x08004800-0x08005000,0x08005000-0x08005800,0x08005800-0x08006000, 这样就40万次了。
作者: yzwzfyz    时间: 2021-9-13 09:11
只是承诺一个概数,10万次用不坏的。承诺10万次的人做不到那么准。
作者: 胡凯哥    时间: 2021-9-13 12:17
daemondong 发表于 2021-9-13 08:46
如果确定要达到或超过10万次,你应该用轮流写的方式,比如0x08004000-0x08004800,0x08004800-0x08005000, ...

是不是这样的哦!这个只是我想的那样,10万次是整个flash的擦写次数,还是一个片区的擦写次数?
作者: 胡凯哥    时间: 2021-9-13 12:21
yzwzfyz 发表于 2021-9-13 09:11
只是承诺一个概数,10万次用不坏的。承诺10万次的人做不到那么准。

我也知道他们做不了那么准。现在我的问题是:怎么检测flash片区是否已经被擦坏(通过程序实现),擦坏以后需要把数据往下一个片区存放。
作者: daemondong    时间: 2021-9-13 12:46
胡凯哥 发表于 2021-9-13 12:17
是不是这样的哦!这个只是我想的那样,10万次是整个flash的擦写次数,还是一个片区的擦写次数?

所有flash每个字节都是10万次,这个是物理性能。所以你要大于10万次,只能轮流用。
作者: 188610329    时间: 2021-9-13 14:12
片区,是逻辑上的,不是物理上的, 坏的时候,并不是这个片区,那个片区坏,而是整个Flash 呈现不稳定存储不稳定状况。你是无法确定,具体哪里坏的,因为,坏,不是说一下子不能读些,或者说一下子就全变00,或者FF了,而是,可能你存了0xFF, 其中低位坏了,只有高位还好,就变 0xFE了,这是针对一个字节而言,对于整个片区,就是各个地方随机性出现储存不稳定状态。再往后才是写不进数据,应该说,写操作执行是成功的,但是,内容是错的。二这种情况,不会只存在于这个片区,而是整个Flash, 如果你的程序同在一个物理Flash中,程序也会不稳定。
所以,如果你的写操作频繁,建议所有能写得地方,轮写,写满后擦除。超过一小时才写1次的话……,就不要操这个心了,10年都写不够10万次,而你做的东西,绝对用不满10年。
作者: 胡凯哥    时间: 2021-9-13 15:18
188610329 发表于 2021-9-13 14:12
片区,是逻辑上的,不是物理上的, 坏的时候,并不是这个片区,那个片区坏,而是整个Flash 呈现不稳定存储 ...

明白了,谢谢!
作者: zyluglugl    时间: 2021-9-14 07:16
可以用外部存储呀,干嘛跟他较上劲呀!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1