关于N76E003的FLASH保存需要修改几十万次掉电数据的问题讨论
最近要做一个项目,由于成本考虑,就选择了N76E003。这个项目有几个数据需要掉电保存,而且会被修改几十万次,我对cpu的FLASH做了一些规划保存的方案,各位帮忙看看可行不?
我保存的数据大概在4个左右,所以我把就准备把FLASH的最小页128Byte分成32Byte一个单元,总共4个单元;
每个单元32byte保存我的数据格式为:
byte 01:0xA5
byte 02:0x5A
byte 03:本页FLASH擦除次数(高位)
byte 04:本页FLASH擦除次数(低位)
byte 05~08:数据1(第一遍)+数据2(第一遍)+数据3(第一遍)+数据4(第一遍)
byte 09~12:数据1(第二遍)+数据2(第二遍)+数据3(第二遍)+数据4(第二遍)
byte 13~16:数据1(第三遍)+数据2(第三遍)+数据3(第三遍)+数据4(第三遍)
byte 17~20:数据1(第四遍)+数据2(第四遍)+数据3(第四遍)+数据4(第四遍)
byte 21~24:数据1(第五遍)+数据2(第五遍)+数据3(第五遍)+数据4(第五遍)
byte 25~28:数据1(第六遍)+数据2(第六遍)+数据3(第六遍)+数据4(第六遍)
byte 29~32:数据1(第七遍)+数据2(第七遍)+数据3(第七遍)+数据4(第七遍)
比如从8K地址(0X2000)~16K地址(0x4000)为保存数据的FLASH空间,那么从0x2000开始的第一个FLASH最小页128byte先擦除,然后把数据写入128byte中的第一个单元(1~32byte),当数据有修改的时候,保存到这个页FLASH的第二个单元(33~64byte),以此类推,一直到保存到第四个单元(也就是87~128byte)后,再有数据修改,就把这页FLASH擦除,再从第一个单元开始写(因为擦除后,所有的byte都变成了0xFF,我对前面32byte写,不会影响后面FLASH内的数据,后面FLASH的数据还是保持0XFF,所以第二次可以再对后面的数据进行写)。当这页FLASH被反复擦写达到5000次(由于一页FLASH被分成4个单元,相当于有效数据被修改了5000*4=20000次),就抛弃这一页,换成下一页的128Bye进行数据保存。(如果5000次内有发现数据的第一遍和第七遍中有不一致的,说明有对应的bit有损坏,直接跳转到下一页保存数据,即便知道有损坏了,由于我是保存了7遍,把不对的剔除掉还是比较容易的,使用比较的方式,把相等数据最多的那个数作为正确数据的正确性应该可以达到95%吧,呵呵)
0x2000~0x4000之间总共有64页,一页对应的可以保存20000次数据,64页就可以保存64*20000=128万次。
各位高人,觉得我的思路可行吗?提一下意见,大家讨论一下。 |
如果5000次内有发现数据的第一遍和第七遍中有不一致的,说明有对应的bit有损坏。你存的本来就是修改数据怎么通过判断数据不一致,来断定数据有损坏。如果数据是不变的,就没有存储这么多次的意义,如果是变的,那前后数据肯定就会不一样。这里我没看明白,麻烦解释一下。