W25Q128频繁存贮数据的问题??坛友,原子哥帮忙啊

2019-07-21 08:47发布

大家好,我现在的项目,使用一片16M 的 SPI Flash W25Q128,来存贮我得到的传感器数据,我每次写16个字节,但现在遇见一个问题,就是一旦掉电,系统重新启动时,我必须要知道已经写到哪个位置了,该从哪里写了..

我是这样想的:
所以我必须建立一个计数变量cnt,来记录写了多少次了,下次就写cnt*16, 这个变量要是存到Flash的一个扇区的一个地址的话,就要擦写16*1024*1024/16 = 1024*1024 = 1048576次,那么Flash这个地址肯定爆了,如果要存到不同的地址,还要开辟一个32位的变量,因为毕竟要存1048576 = 0x100000次,而且每存一次还要写入32位4个字节,那么我存1048576 次,就需要1048576 *4=4194304字节的空间,我汗,1024个扇区啊,严重浪费,并且即使这样的话,开机还要遍历着找这个记录变量,耗费好多时间,不知有什么好办法???


大家有谁做过吗,帮想想办法,呵呵,谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
33条回答
robin_7766
1楼-- · 2019-07-22 17:13
我想LZ是想做一個類似USB storage的東西.
由於Flash (不管NAND or Nor)寫入都是有Life time的問題.
所以不能對同一個Block頻繁做寫入的動作,必須順序寫入不同的Block,以延長產品的壽命.
所以必須記住現在寫在哪個位置,就算中途斷電,等下次上電的時候繼續在新的位置做寫入動作.
不知這是不是LZ的問題?

*PS:我不知到有效的解決方法,所以對不起LZ了.
stonenth
2楼-- · 2019-07-22 19:09
因为有擦除寿命,避免频繁擦除就可以。
之前做过一个类似的,比如就说这保存16字节,可以在16字节前加上四字节地址。每二十字节为一组数据,每次写数据都带上地址,上电时每隔二十个字节读一下,看看写到哪个位置停止了,下次有数据就在这个位置接着写。
sdwhupk
3楼-- · 2019-07-22 20:59
 精彩回答 2  元偷偷看……
sdwhupk
4楼-- · 2019-07-22 22:30
如果你还可以加存储器的话,可以加个铁电存储器或者是EEPROM,这样就可以把计数器的值保存在一个固定位置了。
nilianghua
5楼-- · 2019-07-22 23:32
这个问题 比较简单啊 你把存入 FLASH里面的地址记录下来就可以了 ,每次保存都把地址保存在固定的位置,要保存时可以先读取一下
zdfwyh
6楼-- · 2019-07-23 01:03
其实也不麻烦,你增加一个掉电检测功能,当判断出掉电之后立即将计数器保存到flash中,平时将计数器放在RAM中即可

一周热门 更多>