Flash或者EEPROM等寿命限制存储器延长使用寿命的方法
前言:防止数据丢失的方法,就是备份。
一、对于flash,每一扇区的大小一般是1KB或者4KB,使用寿命一般为10万次。
(1)第一种延长使用寿命的方法为,假设需要内存数据与flash数据同步,那么充分利用已分配的全部空间,对每一个数据结构体中需要定义一个字节作为删除标识,也就是说表示这个结构体数据已经删除,同时flash中也要标记删除,然后不要急于去擦除一个扇区的数据,应该根据要存储的数据结构体,根据分配的flash块,一个数据一个数据往后写入,这个在协议和数据的结构设计上就要有要求,要求数据的结构应该包含flash需要操作的标识,等全部写满以后,如果还要再写入,那么就需要寻找有删除过的记录,或者擦除过的扇区,单条写入擦除扇区的方法就是对当前扇区的数据进行拷贝,然后插入要写入的数据之后重新写入那个扇区,如果整块已经全部写满,那么就需要增加策略做下一步的处理
对于这种情况下的擦除,我们一般有非常多的数据,因此擦除就要根据时间轮询擦除,而对于一个扇区是否擦除,我们采用的方法是在每个扇区的最后或者头位置置一个字节的标志,如果数据量很大,我们还需要轮询写入,写入和擦除均需要等待。
(2)第二种延长寿命的使用方式为,不需要内存数据与flash数据同步,那么就是说数据都是在flash中存储的,需要的时候再读取flash中的数据,那么这种一般使用的是类似上述的方法,不要急于查处某一块扇区,更不能每写入一次就删除一块扇区,除非总的数据就只有一个扇区,否则这个flash的寿命就只有10万次,当然要根据应用情况在判定,如果不是使用频繁的应用自然也可以使用这种方法。
设计flash的使用时,永远使用一般是使用页,一半是备份页。
如果对数据的操作很频繁,例如1S或者1min操作一次,那么就需要考虑flash的寿命问题,首先必须将存储的数据表示为一个结构体,然后根据已分配的空间,进行循环存储,《1》或者如果一个结构体按照一个扇区进行定义,那么就是需要两块扇区进行循环存储,循环存储的方法,就是先拷贝扇区中的数据,然后擦除新块的数据,将数据写入新块,最后记录当前数据的存储情况,其实这种存储方法的重要一点是,需要在申请的数据区域的头256个字节中存储一些标识,从而知道当前数据具体存储的位置和情况,当这块要擦除时也要注意,必须先保存头的数据,可以暂时保存在内存中《2》当存储的数据段不是很长,一个扇区内可以存储多个数据段,那么就需要将当前块的flash分为允许存储很多段数据的数量,然后根据这些数量进行多个存储,当存储满的时候可以使用删除的位置,但是一般比较难以标识,所以可以直接切换到备份页,这样子不断的循环。
二、对于EEPROM,一般是单字节操作。使用寿命一般为100万次。
(1)一般eeprom的数据量较小,因此不需要内存与eeprom数据同步,也就是说直接在eeprom中直接存取即可,但是由于有寿命限制,那么读写就不能总是在同一块内进行,使用循环存储和删除表示法。。