单片机中把部分Flash虚拟成Eeprom使用时,如何延长使用寿命

2021-06-10 20:54发布

大家好,好久没有和大家聊关于技术的话题了,今天给大家出一点干货啊。

我们在有一些应用的里面呢,经常要把flash中的一部分当做EEPROM来使用,特别是有些单片机特别是他是不带经常要把flash中的一部分当做EEPROM来使用的。当我们存取的数据又不是很大的时候如果我们可以把。有一些没有用到的flash的Page当做EEPROM使用,那也是可以的。但是这个一般的单片机的flash的使用寿命只能差除一万次,个别的单片机的flash只能擦除一千次,在有些数据手册上是这么写的,我觉得一千次的话确实有点少了,我们开发过程中可能都不够用。

part-00284-2283.jpg

我们就按一万次来说吧,一万次实际上已经不少了。如果我们在产品的生命期内,这个保存的数据需要修改次数不是那么多的情况下呢,比如说总共我只是修改不会超过十万次,,那么当然十万次也比这个一万次次数要多很多了,那肯定如果直接这么擦除写的话,这个肯定不能满足我们的需求的。

那么如何我们才能延长它的使用寿命呢?这个flash的使用寿命主要一个擦除的次数,还有一个写的次数,我们知道我们在使用flash的时候必须把整页进行擦除,然后才能重新写入数据,这是笼统的说法,实际上并不是这样的。当然我们写flash应当按照flash 的那个流程那个规则来写,这个我就不说了。

flash擦除之后,或者单片机新出厂时,它的flash的值默认都是0XFF,只要是0XFF状态呢就可以写入的,这个是没有任何问题的。举个例子,如果有一页flash的前面我们写入了10个字节,这十个字节不是0XFF了,那么后面还有很长的空间的字节还是0XFF状态。那么我们就可以直接对后面的0XFF的字节空间进行写,用不着整页进行擦除。认识到这一点,我们就知道有用什么方法来延长它的寿命了。

一般情况下,我们存取的数据只是一些设置的参数,或者一些比较少的数据量,那么我们可以比如说这个要存取的这个数据总共是一百个字节,假如说这个一页的大小是2K,不同的单片机不太一样,我以2k 为例,也就是2048个字节,可以存取二十个这样的同样数据。

part-00124-2321.jpg

我讲到这里,恐怕有些朋友已经知道了怎么做了。就是说我们第一次存存在这个第0到99。第二次存的时候就存到100到199。

第3次存在200到299,这么一直存下去,存最后一百个字节空间之后再擦除这个,然后重复这么一个过程就可以了。这样的话,假如你的数据小的话,是不是就一万次就成了二十倍,就变成了二十万次了,就满足了我们的需求。