EEPROM掉电保护
EEPROM(带电可擦可编程只读存储器)是用户可更改的只读存储器(ROM),其可通过高于普通电压的作用来擦除和重编程(重写)。不像EPROM芯片,EEPROM不需从计算机中取出即可修改。在一个EEPROM中,当计算机在使用的时候可频繁地反复编程,因此EEPROM的寿命是一个很重要的设计考虑参数。EEPROM是一种特殊形式的闪存,其应用通常是个人电脑中的电压来擦写和重编程 。
本章主要科普EEPROM掉电保存。
首先说一下EEPROM的使用寿命,还是比较长的,本次讲解的型号是M24C02-WMN6TP,官方手册上面介绍的是400万次的写周期
日常我们写数据,大部分人都是在同一个地址写,同一个地址读,有没有发现这个空间没有利用完!这个型号有128和256bytes的大小,但是我们总在一个地址写和读,长时间这样,该地址空间有没有可能写坏了!
既然这样,我们为了避免在同一个地址长时间的写,我们可以采用循环写,将地址空间写满,那么问题来了,如果某一时刻单片机掉电了,掉电后写入地址和读出的地址丢失,怎么找回呢?
我们可以在EEPROM上面,划分一个地址出来,用来固定存放当前写的地址空间,先写数据再写地址,这样掉电了我们可以在该地址空间读出数据,找到上次存档的地址空间。
但是这样操作,这个存储的地址长时间的写入操作,也可能被写坏了,那该怎么办呢?
现在在同一个地址写,我们改一下,不在同一个地址写,将内存空间分为两部分,一部分写数据,一部分写地址,另外将地址数据做一下改进,用一个系数n,n是表示地址空间被写了几次,那么这个地址空间将会不断递增,考虑到实际情况,我们将用四个空间来存储地址数据,即n占三个字节,最大为FFFFFF,换成十进制就是16777215,对比与EEPROM的写入次数来讲,很大,毕竟写入次数采400万,这个最大是1677万。
当掉电后,我们直接读地址数据空间,四个四个的读,找到最大的那个数据,然后根据这个地址数据来读取数据空间的值。
再有一种笨方法-比大小,就是不使用地址空间,掉电后,将每次存入的数据依次读出,比较大小,大的即为掉电前的数据,前提是你存入的数据是递增的。
另外建议加一个字节的检验数据,读出的时候校验一下,保证数据的可靠性。
如果有哪位大佬有别的解决方案,欢迎留言!