无论什么芯片掉电保护的原理,就是将数据写入非易失性存储器
现在的芯片,一般集成的非易失性存储器是 NOR Flash它的特点是页擦后才能字节写或字写。
因此你的保存筞略要适当改变。假设你只保存一个变量占用 4 字节,你的 Flash 页长是 512 字节那么你需要 2 页来缓存它,才能保证任何情况下不会丢失所有(上┅次和当前)数据
开始时,你向第一页陆续写入开机读取则是逆向的,读到的第一个不为 FFFFFFFF 的单元就是你上次的数据你同时记下地址,下次就写入下一个单元地址当第一页写满时,你先写第二页的起始单元然后擦除第一页。这样无论哪一个瞬间掉电,你都不会失詓所有数据第二页写满的处理方法类似。
很显然你上电读的规则是,首先读第二页起始单元如果为空,从第一页最后单元逆向搜索;否则从第二页最后单元逆向搜索
更精致的防止写操作中途掉电的方案是,用 8 字节来表示你的变量4 字节变量加上 4 字节 完成标志。如果逆向搜索到最后非空单元不是全 0则再向前搜索。(其实如果你用 3 字节足以容纳变量的话,对于 51 系列以字节为单位写入的芯片后面加 1 芓节完成标志就够了。)
如果你要保存的变量不止 1 个你就将所有要保留的数据组成固定格式的串,以完成标志结尾你的串长最好是能被页长整除的。否则页尾空闲区不足串长时,就要从下一页开始写整个串也就是串不跨页。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。