大家好,我现在的项目,使用一片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个扇区啊,严重浪费,并且即使这样的话,开机还要遍历着找这个记录变量,耗费好多时间,不知有什么好办法???
大家有谁做过吗,帮想想办法,呵呵,谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
看楼下
首先,既然是会出现掉电,那么就要允许丢数据(数量可能不会太多)。
在这个前提下可以,说说我的项目用的方法。
写一个简单的小文件系统,每天保存一个文件。刚开始保存时,写入存储时间等参数(但是不写文件长度),然后不断的写数据,一天结束时,保存文件长度,这样一个文件就是完整的。
如果中间断电了,可以对这个文件进行恢复,补上文件长度(可能会丢失少量的数据,但可以接受)。恢复的方法就是从头看哪里是连续的0xFF,就说明不是又要数据了。
需要注意的是如果数据存在正负,0xFFFF=-1,可能会把-1当成未写入的位置,这就需要通过其他方式回避了
一周热门 更多>