当前位置: 首页 > news >正文

单片机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]=page0;

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

page1:/FFFFFFFFFFFFFFFFFFFFFF/

page2:/FFFFFFFFFFFFFFFFFFFFFF/

page3:/FFFFFFFFFFFFFFFFFFFFFF/

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

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

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

    

     

http://www.dtcms.com/a/79952.html

相关文章:

  • 分布式训练与多GPU加速策略
  • 创造型设计模式
  • IP查询底层逻辑解析:数据包与地理位置
  • 【虚幻引擎UE5】SpawnActor生成Character实例不执行AI Move To,未初始化AIController的原因和解决方法
  • 嵌入式4-Modbus
  • 网络类型及数据链路层协议【复习篇】
  • MySQL身份验证的auth_socket插件
  • 使用 `pytest` 框架时,可以通过极限封装将 YAML 文件的读取、解析
  • Kotlin v2.1.20 发布,标准库又有哪些变化?
  • 设计模式在事件处理系统中的应用
  • Qt之MVC架构MVD
  • cmake教程
  • JAVA URL和URI差异对比
  • C语言入门知识(上)
  • 搭建React简单项目
  • lua垃圾回收
  • javaAPI文档中文版(在线版)
  • 绿盟面试题
  • centos家用笔记
  • 智能汽车图像及视频处理方案,支持视频智能拍摄能力
  • ModuleNotFoundError: No module named ‘flask‘ 错误
  • Cursor/windsurf+MCP+Blender自动建模还有多远
  • JimuReport与deepseek结合,颠覆现有BI模式
  • ASFF:Learning Spatial Fusion for Single-Shot Object Detection
  • 蓝桥杯 积木画
  • llama源码学习·model.py[3]ROPE旋转位置编码(4)ROPE的应用
  • Python八字排盘系统实现分析
  • flutter报错:Could not find com.meituan.android.walle:plugin
  • centos7.9 脚本一键升级到openssl-3.4.0,openssh-9.9p1
  • JSON 解析中需要清理的危险字符