如何使用Flash模拟EEPROM-CSDN博客

目录

1、FLASH与EEPROM简介

2、FLASH模拟EEPROM原理

2.1、EERPOM数据结构

2.2、EERPOM物理结构


在讲解这篇博文前,首先要明白为什么使用Flash存储来模拟EEPROM?

主要有以下几个原因:

  • 成本效益:许多微控制器(MCU)和系统芯片(SoC)内置有Flash存储,但没有专门的EEPROM。使用已有的Flash存储模拟EEPROM可以减少额外硬件成本。
  • 更大的存储容量:通常,Flash存储提供比EEPROM更大的存储容量。这使得在没有牺牲太多物理空间的情况下可以存储更多数据。
  • 灵活性和可扩展性:通过软件,可以灵活地设计和调整EEPROM模拟的大小和结构,以适应不同的应用需求。这种方法比使用固定大小的物理EEPROM更具可扩展性。
  • 数据持久性:尽管Flash存储的写入次数有限,但它仍然能够提供足够的耐用性来满足大多数应用的需要。通过适当的数据管理和穿戴均衡策略,可以最大限度地延长Flash存储的寿命。
  • 数据保护和安全性:许多现代微控制器提供了Flash存储的安全功能,如写入保护、加密等,这有助于保护存储在Flash中的数据不被未经授权访问。
  • 易于编程和集成:使用Flash存储来模拟EEPROM可以充分利用现有的Flash编程工具和技术,同时也简化了硬件设计。

在使用Arduino开发时,有个内置库可以使用Flash模拟EEPROM,极大的方便了嵌入式数据存储的开发。

如果使用库函数,只是知道调用API,很难理解Flash模拟EEPROM的原理和方法,本篇博文将以AT32F413(flash:256KB)这款MCU为例,详细介绍如何使用Flash模拟EEPROM。

实现代码:https://download.csdn.net/download/m0_38106923/88717668

1、FLASH与EEPROM简介

FLASH和EEPROM都为非易失性存储器,在断电后数据仍然可以长期保存,这为FLASH模拟 EEPROM提供了条件,FLASH与EEPROM特点对比如下表所示:

FLASH模拟EEPROM优点:  

  • 低成本:可节约一颗EEPROM芯片;  
  • 存储、读取速度快:通讯速度快于使用I2C或者SPI通讯的EEPROM元件;  
  • 抗干扰能力强:由于FLASH在单片机内部,不会存在通讯总线被外部干扰的问题;  
  • 容量可调:可根据实际使用,灵活调整存储空间大小。

2、FLASH模拟EEPROM原理

2.1、EERPOM数据结构

由于FLASH在写入数据前,需要将FLASH数据先擦除为0xFF,而FLASH擦除时通常为扇区擦除,例如AT32F403A的扇区大小为2K字节,这个特性决定了不能简单的将旧数据擦除然后写新数 据,因为这样会导致存储在这个扇区内的其他数据也被擦除,并且也会导致FLASH频繁擦除而降低 其使用寿命。  

所以FLASH模拟EEPROM的思路是:

  • 新数据存储不影响旧数据; 
  • 尽量减少FLASH擦除次数,延长FLASH使用寿命。  

基于以上的考虑,我们设计了以下存储结构:

EERPOM结构

EEPROM由两个页组成:页0和页1,在使用的时候,1个页处于有效状态,另外一个页处于擦除 状态,读取或者写入数据都在有效状态的页进行。  

数据格式

存储的数据格式为数据 + 数据地址,地址和数据都是16位方式存储,每一次存储占用32位也就是 4个字节。图中data列为数据,data address列为数据地址,flash address列为数据存储的实际 flash地址偏移量。例如上图中页0的flash address=12处,数据为0x3003,数据地址为0x0002。  

页状态标志

在第一个数据存储区,存储页状态标志status,页状态标志有3种:  

  • 有效状态:EEPAGEVALID,status = 0x0000,读取和写数据在此页进行;  
  • 数据转移状态:EEPAGETRANSFER,status = 0xCCCC,另外一页满了,正在传输有效数 据到本页;  
  • 擦除状态:EEPAGEERASED,status = 0xFFFF。  数据写入  每一次写入数据前,都会从页起始地址开始寻找第一个未存储数据的区域(值为0xFFFFFFFF),然后将待写入的数据和数据地址写到未存储数据的区域。例如上图中页0的flash address = 20处,值 为0xFFFFFFFF,就是第一个未存储数据的区域。  

当知道了页的大小后,就可以算出最大的变量存储个数:页容量/4-1。例如当页大小为1K时,最大 可存储的变量数量为1024/4-1=255。需要注意的是,在实际使用中,应该尽量留出较多的空闲容 量,这样可以减小FLASH擦除次数,提高FLASH寿命。  

另外数据地址不可以超过最大能存储的变量数量,例如当页大小为1K时,最大可存储的变量数量为 1024/4-1=255,那么数据地址data address不可以大于255。

数据读取

每一次读取数据都会从页结束地址开始向前寻找最后一个存储的有效数据,例如现在要读取地址为 0x0000的数据。从上图中看到flash address = 4和flash address = 16都是地址为0x0000的数 据,因为最后一次存储的数据为flash address = 16处的数据,所以此时读取地址0x0000的数据为 0x1234。  

数据转移

当一页数据存满了之后,会将数据传输到空闲页,将会执行以下操作(以页0满,页1空为例):  

  • 将页1状态标记为数据传输状态(EEPAGETRANSFER);  
  • 将所有有效数据复制到页1;  
  • 擦除页0;  
  • 将页1状态标记为有效状态(EEPAGEVALID)。

EEPROM写入流程如下所示:

2.2、EERPOM物理结构

实现的EEPROM结构如下图所示,一个页可以由1个或者多个扇区组成,可以根据实际应 用灵活的选择扇区数量,扇区数量越多,可以存储的数据量就越多。通常EEPROM存储区定义在整 个FLASH末尾,这样程序的烧录、执行和EEPROM区域互不影响。

实现代码:https://download.csdn.net/download/m0_38106923/88717668 

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44079197

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值