单片机flash存储也做磨损均衡

最近在做一个项目,需要保存设置数据,掉电不丢失。那么首先想到的是加个24c02,是一个eeprom,但是客户板太小,没有办法进行扩展。后面就找了一个带ee的OTP单片机,发现擦写次数有限,只有1000次,这明显就不是ee,就是一片flash。感觉1000次的擦写,太少了,那怎么样才能提高使用次数呢?

后面就想到,当前的很多固态硬盘都不是slc的颗粒,也同样可以用好久。那么是使用什么技术达到呢,那就是磨损均衡。

既然固态硬盘可以做磨损均衡,达到长时间使用,那就想想办法,对单片机的flash操作也做个简单的磨损均衡。因为考虑到单片机的资源有限,就做个简单一点的方法好了,而且需要存储的数据也不多,不用考虑太复杂,越简单越好。

实现方法如下:

1.在单片机内存建立一个页缓冲,把需要存储的数据都都按照一定顺序保存在缓存里面

2.做个指向单片机内部flash的一个页指针,指向当前存储页

3.在当前页在里面做个55标记,用与和空白页进行区分,方便查找搜索当前页数据。

4.每修改一次参数,就往下一页写,并把当前页擦除。

5.这样就可以实现页面的均衡磨损。

下面就做个示意图


/*页指针*/

byte ucPage=2;

/*页缓存*/

byte aucPageDatBuf[8]=page2;

page0:/FFFFFFFFFFFFFFFFFFFFFF/

page1:/FFFFFFFFFFFFFFFFFFFFFF/

page2:/55Dat1Dat2***************Dat7/

page3:/FFFFFFFFFFFFFFFFFFFFFF/


/*页指针*/

byte ucPage=3;

/*页缓存*/

byte aucPageDatBuf[8]=page3;

page0:/FFFFFFFFFFFFFFFFFFFFFF/

page1:/FFFFFFFFFFFFFFFFFFFFFF/

page2:/FFFFFFFFFFFFFFFFFFFFFF/

page3:/55Dat1Dat2***************Dat7/


/*页指针*/

byte ucPage=0;

/*页缓存*/

byte aucPageDatBuf[8]=page3;

page0:/55Dat1Dat2***************Dat7/

page1:/FFFFFFFFFFFFFFFFFFFFFF/

page2:/FFFFFFFFFFFFFFFFFFFFFF/

page3:/FFFFFFFFFFFFFFFFFFFFFF/

如此循环。。。。。。。。。

按照这个思路,每一页可以擦写1000次,那么有n个页面就可以擦写1000*n次,这样把空白的flash充分利用起来,就可以大大增加非易失性参数的存储器的擦写次数。

这种方法对flash单片机存储参数同样适用。

相关推荐
-曾牛1 天前
【汇编语言入门】从第一个加法程序吃透汇编核心基础
汇编·单片机·嵌入式硬件·汇编语言·病毒分析·lcx·逆向开发
三品吉他手会点灯2 天前
STM32F103 学习笔记-21-串口通信(第3节)-STM32串口初始化结构体和固件库讲解
笔记·stm32·单片机·嵌入式硬件·学习
Lester_11012 天前
单片机EEPROM写入数据之前为什么要先擦除?
单片机·嵌入式软件
点灯小铭2 天前
基于单片机的多功能LCD万年历时钟设计与温度显示系统
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
点灯小铭2 天前
基于单片机的玉米播种机漏播检测装置设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
三佛科技-187366133972 天前
FT32F072KBBU7/C8AT7/CBAT7系列32位RISC内核MCU详细解析
单片机·嵌入式硬件
三佛科技-187366133972 天前
AiP33620系列2线串口共阴极8段8位恒流LED驱动芯片解析
单片机·嵌入式硬件
清风6666662 天前
基于单片机的条形码识别系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
TEC_INO2 天前
STM32_5:I2C
stm32·单片机·嵌入式硬件
单片机系统设计2 天前
基于stm32的智能健康监测/老人摔倒/智能防摔
stm32·单片机·嵌入式硬件·毕业设计·健康系统