MCU模拟eeprom基本功能

 MCU模拟eeprom基本功能

 

如果你的MCUflash足够大。并且你的MCU提供自编程flash指令。则可以通过flash模拟出一片eeprom区域。用于存储数据
       本文参考ST公司AN2594文档。使用ST提供的范例。旨在了解如何使用Flash模拟出一片eeprom。






       由表我们得到擦除时间的比较。内部模拟的显然速度快了。然而我要提醒的是如果你存放于模拟EEPROM的数据需要频繁更改。这里的频繁指的是时间小于页擦除时间。由于模拟的eeprom是使用flash,所以只能整页进行擦除。所以建议频繁修改的数据不要使用模拟的eeprom。但是如果只是单纯存放掉电前的数据或者1s钟记录一段数据则是可以考虑的。这样可以节省外部eeprom的成本。




       上图我们得到ST公司提供的例程是使用两页的flash进行模拟。为什么用两页呢。如果只用一页,我考虑了一下。由于只有一页。数据只能一直往下写。会有满的时候。而且更改数据后。前面的数据不会被擦除。当其中一页写满了。就会将该页不重复的数据由下到上得搬到第二页,同时擦除第一页。


        这张图就是最关键的一张图。有利于了解如何存放数据和读取数据。模拟出的eeprom有两部分组成。分别是虚地址和数据。都为16bit。虚地址存在在高位。数据存在低位。
       比如一开始在虚地址0x7777H写入数据0x1232H。数据存放如图所示。如果再在同一地址写入另外一个数,则数据存在下一个位置。但是前面的数据并不会马上被擦除掉。如果此时要使用ST的函数读取0x7777H虚地址的数据。那么读出来的是0X1245H而不是0x1232H。因为读取的时候是从下往上读取。读取到第一个符合该地址的数据。这样就很好理解了。
        当数据写满的时候。这时写入的新数据将被存在第二页。此时会自动调用函数将第一页不重复的数据拷贝到第二页。比如我们的虚地址0X7777H和0X5555H的数据。如图所示。然后将第一页擦除。两页交替使用。说到这里,你也许明白为什么频繁修改的数据不适合存在模拟的eeprom里面了。如果频繁修改。那么很快一页就写满了。然后需要擦除这一页。需要20ms。后面的事你都明白啦?
       由于我的知识有限,只能了解那么多。如果要将程序移植到别的单片机。可以参照这样的思路。呵呵。

下面是一点学习心得。
// Note  By ChenFen
/*
1.使用STM32内部Flash 模拟EEPROM进行读写,定义两页Flash分别为page0 page1
     Flash模拟的起始地址修改位置为eeprom.h中的EEPROM_START_ADDRESS
2.修改eeprom.h 文件中的 NumbOfVar 实现所需存储变量数量
3.修改 VirtAddVarTab[NumbOfVar] 实现虚拟地址的修改
4.写入时写入数据紧跟后面写入虚地址VirtAddVarTab(0<=i<NumbOfVar)
5.每个Page第一个地址写入该页状态(Earse,Reveice,Vild)
6.相同地址再次写入时不会把上次写的擦掉,而是在模拟EEPROM区尾部未写过的地方再次写入数据、  虚地址,
   读的时候是从尾部开始匹配地址,也就是读取最后一次写的内容。
    7.模拟EEPROM区分为2页,如果一页满了把这一页内地址不重复的数据复制到另一页后擦除,2页交替使用。
8.添加字符串存储函数,改变为1个16bit地址存储两位字符串的8bit ASCII码

 

 

STM32的应用手册AN2594提供内部Flash模拟EEPROM的方法,此方法可以很好的应用于外部Flash其他带内部Flash的MCU上。

1.Flash与EEPROM的区别

EEPROM:Electrically erasable programmable read-only memory,电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片。

Flash:闪存,它结合了ROM和RAM的长处,不仅具备EEPROM的性能,还可以快速读取数据(NVRAM的优势),使数据不会因为断电而丢失。

EEPROM需要更多的元件及硅,为了降低系统成本,较多的MCU均使用Flash代替EEPROM存储代码及数据。

 

  EEPROM FLASH
 写入时间

几毫秒

随机字节:5-10ms

页:字/100us(5-10ms/页)

 字编程时间:20us
 擦除时间  页/片擦除时间:20ms
 写入方式

一旦启动,无需CPU干涉

只需要供电 

 一旦启动,需要CPU干涉
 读访问

串行:100us

随机字:92us

页:字节/2.25us

 并行:100ns

字/几个CPU周期

访问时间:35ns

 写/擦除

周期

 10K-1000K周期 10K-100K周期

  • Flash写访问速度快;
  • 外部串行EEPROM写入不会受CPU复位影响,适当的去耦电容可以保持写入的完成;
  • EEPROM不需要擦除,Flash擦除需要时间,Flash的软件设计需要充分考虑复位及中断情况;

2.实现EEPROM模拟

FLASH模拟EEPROM【STM32_AN2594】

至少需要两个大小一样的页:一个提供逐字编程,另一个提供接收前页数据。当其中一页写满了。就会将该页不重复的数据由下到上得搬到第二页,同时擦除第一页。每页的前16位半字标记页状态。

页有三种状态:

  • 擦除:空白页;
  • 接收数据:从其他整页接收数据;
  • 有效用页:包含有效数据,知道所有有效数据转移到其他页才改变状态;

每个变量元素包含虚地址和数据,以便搜索和更新。当数据修改后,修改后的虚地址和数据保存在一个新的位置,取数据时返回最后的数值。FLASH模拟EEPROM【STM32_AN2594】

从上面这幅图了解如何存放数据和读取数据。模拟出的EEPROM有两部分组成,分别是虚地址和数据,都为16bit。虚地址存在在高位,数据存在低位。

比如一开始在虚地址0x7777H写入数据0x1232H。数据存放如图所示。如果再在同一地址写入另外一个数,则数据存在下一个位置。但是前面的数据并不会马上被擦除掉。如果此时要读取0x7777H虚地址的数据。那么读出来的是0X1245H而不是0x1232H。因为读取的时候是从下往上读取。读取到第一个符合该地址的数据。

当数据写满的时候。这时写入的新数据将被存在第二页。此时会自动将第一页不重复的数据拷贝到第二页。比如我们的虚地址0X7777H和0X5555H对应的数据,紧接0X6666H。如图所示。然后将第一页擦除。两页交替使用。写入数据的过程判断该页是否已满,从上往下搜索,找到FFFF,就可以直接写入。若搜索完整页,均无FFFF,说明该页已满,需要写入下一页,并执行搬移与擦除操作。

数据需要频繁更改,不建议使用次方式。

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flash模拟EEPROM是一种通过使用Flash存储器来模拟EEPROM功能的技术。可模拟EEPROM数量取决于Flash块的大小和预期的数据访问次数。通过将Flash划分为多个扇区并使用相应的算法,可以实现对数据的读写操作,从而模拟EEPROM的存储功能。这种方法可以在一定程度上弥补在一些MCU控制器中没有片上EEPROM的不足。相较于原生Flash规范,Flash模拟EEPROM具有更高的PE(program/erase)耐久性,因为使用大量的Flash存储器来实现一定数量的模拟EEPROM,Flash的PE周期减少了。因此,通过合理设计和使用Flash模拟EEPROM技术,可以在不增加外部EEPROM的情况下满足存储需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [如何将Flash模拟EEPROM (EEPROM Emulation)](https://blog.csdn.net/lianyunyouyou/article/details/120047739)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [FLASH模拟EEPROM实验.zip_STM32F103 flash_flash 模拟eeprom_flash模拟eepro](https://download.csdn.net/download/weixin_42659196/86156637)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Flash如何模拟EEPROM](https://blog.csdn.net/wgp2hpp/article/details/101360402)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值