关于MCU内部flash存储数据的寿命及提高擦写次数的方法

最近在做便携式储能电源的项目,其中需要用flash实时存储电池的电量(1~100),由于芯片的最小擦写次数时10000次,所以,对于flash的擦写寿命进行了研究,下面是网友的一些见解,觉得有些道理,这里记录一下,以防后续忘记,也供大家参考。

一,FLASH寿命测试(源自网络,有兴趣者可自行测试)

测试的flash型号是sst39vf160,由于测试时间的问题,只测试了一个扇区4个字节,用了整整一个星期才完成所有测试,测试结果总结如下:
    1、flash有寿命限制,sst39vf160手册上说是10万次,实验片的实测却超过80万次。
    2、每一个位的寿命是独立的,也就是说,一个字节的bit0失效了,bit1仍然可以正常操作。
    3、flash的寿命指的是被改写的次数,如果一次擦除或写操作不改变某一个位的内容,该位就不会被磨损。比如一个字节被反复执行“擦除-写入0xfe”操作,把bit0损坏后,该字节高7位的寿命丝毫不受影响。
    4、flash磨损后,总是表现为擦除不干净,多擦除几次又能够擦干净,随着磨损程度的加剧,越来越难以擦除干净,但只要擦干净了,写入一定是正确的。但写入的数据是否牢固就没有办法测了。
    5、只要原来内容是1的位,总是可以被写入,但只要原来内容是0的位,就只有擦除才能改为1.

    实测数据,对一个字节反复写0和擦除,寿命指的是写0的次数。
    第一次擦除不干净的寿命:876842次
    第一次出现连续两次擦除仍然不干净的寿命:1169465次
    第一次出现连续4次擦除仍然不干净的寿命:1769609次
    第一次出现连续8次擦除仍然不干净的寿命:1886879次

二,为什么FLASH擦写有次数限制?

FLASH的非易失存储原理是往浮栅MOS管的栅极中注入电荷,只要电荷在,MOS管在电路中的开关状态就不变。而改变浮栅存储的电荷,需要对浮栅加压操作,这个操作会破坏浮栅的物理结构,进而影响MOS存储单元的寿命。也就是说,只有逻辑状态改变才影响MOS管的浮栅寿命。FLASH的写入-擦除循环仅指浮栅注入电荷、释放电荷的循环,逻辑状态不变,对浮栅而言擦写操作其实是不执行的,自然对其物理结构没有影响。

 

三,如何提高FLASH的擦写次数

采用“空间换时间”的方法。所谓“空间换时间”,是指利用相对多的代码空间来换取相对多的存储次数。即在一页内,可以依次将数据写入FLASH,当写满一页后,再全部擦除。比如一个扇区为512字节,现存储32字节的数据块,一页就可以写16个数据块,写满后再全部擦除,这样该页的擦写次数就可以提高16

下面以32字节的数据块为例,来简要说明“空间换时间”的软件实现方法。

(1)保存数据:每次保存数据时,从地址到地址依次(以32为步进)判断INDEX的内容。如果为FFH,表示该地址空间未写过数据,写入需要更新的数据;如果不为FFH,表示该地址空间已写过数据,继续查询;如果所有的INDEX(16个)都不为FFH,表示该页已经写满,执行擦除指令后从首地址写入数据。

(2)读取数据:每次读取数据时,从地址到地址依次(以32为步进)判断INDEX的内容,这是为了查询到最新的数据。如果不为FFH,表示该地址已写过数据,读取数据;如果所有的INDEX(16个)都为FFH,表示该页还未写入数据。

一句话,就是找到第一个为0xff的地址,这个地址为下一次存放数据的地址,而这个地址的前一个地址为上次存放的数据。

 

MCU Flash是一种用于嵌入式系统的非易失性存储器,通常用于保存历史数据。它可以通过简单的数据库实现数据的持久化存储和读取。 首先,我们可以在MCU Flash中创建一个数据表来存储历史数据。每个数据表可以有多个字段,比如时间戳、传感器数据等等。通过定义合适的数据格式和存储结构,我们可以很容易地在MCU Flash中编写和读取数据。 当有新的历史数据到达时,我们可以将其写入MCU Flash中的数据表中。这可以通过将新数据添加到数据表的末尾来实现。如果数据表已满,我们可以使用循环缓冲区的方式,覆盖最旧的数据。同时,我们还可以记录数据表的大小、索引和其他必要的元数据,以便后续的读取和管理。 对于数据的读取,我们可以按照时间顺序或者其他指定的条件从MCU Flash中读取数据。通过解析数据表中的数据结构和元数据,我们可以轻松地按需读取历史数据。 为了提高数据的可靠性和防止数据丢失,我们可以使用一些技术来进行数据备份和错误检测。比如使用冗余校验码(如循环冗余校验码)进行数据完整性校验,或者使用数据备份和恢复机制来应对硬件故障。 总之,MCU Flash可以作为一个简单的数据库来保存历史数据。通过定义合适的数据结构和元数据,并采用适当的数据存储和读取方法,我们可以实现数据的持久化存储和读取,从而方便地处理历史数据
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值