打印
[应用方案]

使用Data Flash模拟EEPROM

[复制链接]
2439|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vivilyly|  楼主 | 2024-4-10 13:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、简介
EEPROM具有可byte write/byte read以及高达百万次可靠的擦写次数,通常被使用者用来存放程序中会时常变更的非挥发性资料。对于单晶片产品,通常不具有内建的EEPROM能够提供给使用者,而是基于Flash来存放使用者的资料。但是Flash的擦写次数无法与EEPROM比拟。现在我们提出一个机制,能够组合两个page以上的Data Flash来模拟EEPROM使用,使用SRAM加速读写资料的速度、能够达到百万次可靠的擦写次数、记录擦写循环次数,并且可以将资料量分成数个较小的资料群以减少Data Flash page数量。

● 使用 SRAM 加速读写资料速度
当进行资料写入的时候,会同步写入Data Flash和SRAM;一旦当前使用的Data Flash page已经写满,就会使用下一个Data Flash page,并且能够直接将SRAM存放的资料存入,节省一般将资料移入新的Data Flash page,需要搜寻全部Data Flash中已写入的资料的时间。 当需要读取资料的时候,可以直接由SRAM中读出资料,无须从Data Flash中寻找需要的资料,能够节省搜寻过程的时间,Data Flash中的资料只用来初始化SRAM。
● 达到百万次可靠的擦写次数
这样使用Data Flash模拟EEPROM的方法,能够使用byte write/byte read以及超过百万次可靠的擦写次数。
● 记录擦写循环次数
使用者可以由写入Counter的值了解Data Flash page的擦写循环次数。
● 将资料量分成数个较小的资料群以减少 Data Flash page 数量
对于NuMicro® Cortex®-M0系列,如图 1-1所示,如果使用者需要存放的资料量增加,为了满足要求的可靠擦写次数,需要的Data Flash page数量会大量增加。因此,我们建议使用者可以将 要存放的资料量分成数个较小的资料群,利用较少的Data Flash page数量就可以达到需要的可靠擦写次数。

2、模拟EEPROM
本节将介绍如何使用Data Flash模拟EEPROM,并且利用SRAM加速资料读写的速度。
2.1 机制原理
在使用Data Flash模拟EEPROM时,使用者必须使用至少2个page以上的Data Flash,并且将每一page的Data Flash,以每两个字节为单位划分成若干个区块,如图 2-1所示,以NuMicro®Cortex®-M0系列为例,每一个page的Data Flash大小为512字节。第一个区块记录目前擦写循环次数的Counter值,其余存放资料的地址和值。同时SRAM也划分一个区块,用来记录存放的资料。当使用者要存放资料的时候,会将资料的地址和值依序写到第一个Data Flash page,并且将值 写入对应地址的SRAM。如果第一个Data Flash page的空间被写满时,会将目前已写入的有效资 料(非0xFF) 从SRAM整理到第二个Data Flash page,并清除第一个Data Flash page。
使用SRAM来存放资料,可以减少从Data Flash读取资料的时间;当Data Flash page写满要将资料整理到下一个Data Flash page的时候,直接从SRAM读出资料,无须从Data Flash中寻找需要的资料,能够节省搜寻Data Flash中有效资料的时间。
Counter值能夠帮助使用者了解,目前已经使用过的可擦写次数。使用者可以有效掌握剩余的可靠擦写次数,推算产品的可用年限。


2.2 初始化Data Flash
在使用者开始执行主程序前,首先需要初始化要调用的Data Flash page。由于只有保存资料的Data Flash page具有有效的Counter值(非0xFFFF),我们可以通过寻找有效的Counter值来找出保存资料的Data Flash page。接着除了指向可以写入资料的地址,还需要将已保存的资料写到SRAM。详细流程请参考图2-2,并请考函数Init_EEPROM()和Search_Valid_Page()。


2.3 写入资料
当使用者有资料写入的时候,首先比对是否已与SRAM中的资料相同。如果资料相同,则不需要执行写入,略过写入资料步骤;如果资料不同,则需要更新资料。
资料写入时,会同时写入到Data Flash和SRAM,接着判断目前使用的Data Flash page是否已经写满。如果还有未写入的空间,就指向下一个地址;如果Data Flash page已经写满,则将SRAM中有效的资料(非0xFF)写入下一个调用的Data Flash page储存。 相对于一般需要搜寻整个Data Flash page的方式,直接从SRAM中写入有效资料,可以大幅缩 短,当目前Data Flash page已经写满,要调用下一个Data Flash page的时间。
如果目前使用的Data Flash page已经是可调用的最后一个Data Flash page,就将Counter增加计数1,再将SRAM中有效的资料(非0xFF)写入第一个可调用的Data Flash page。
使用者可以读取Counter的值,了解目前已经使用过的可擦写次数。
完成资料写入后,清除已写满的Data Flash page。当有新的资料需要写入的时候,将写入新的Data Flash page。


2.4 读取资料
读取资料的时候,只需要将SRAM中的值读出即可,不需要从Data Flash page中寻找最后更新的资料,可以大幅节省读取资料需要的时间。详细流程请参考图 2-4,并请参考函数Read_Data()。


2.5 读取 Counter 值
使用者可以读取Counter的值了解目前Data Flash page已经使用多少次可擦写循环,并推算目前剩余的可靠擦写次数。请参考函数Get_Cycle_Counter()。

2.6 资料读写范例
在主程序运行之前,首先需要初始化Data Flash。如图 2-5所示,我们选择组合两个page的Data Flash来模拟EEPROM使用。初始化过程会先找出目前储存有效资料的Data Flash page,Page 1,并将有效资料(非0xFF)放入SRAM。此范例中储存的资料量为8个字节,在SRAM中以队列方式存放这些资料。最后指向下一个可以写入资料的地址。
当使用者要写入0x07[0x68] (地址[资料]) 的时候,如图 2-6所示。首先会判断与SRAM中的资 料是否相同。由于目前SRAM中的值与0x68不相等,因此会将资料的地址和值写入Data Flash的区块,并且将值写入对应地址0x07的SRAM阵列中。因为目前的Data Flash page并未写满,仅需要指向下一个可以写入资料的地址即可。

使用特权

评论回复
沙发
可怜的小弗朗士| | 2024-4-11 14:09 | 只看该作者
Data Flash是不是储存代码的区域

使用特权

评论回复
板凳
ClarkLLOTP| | 2024-4-15 15:13 | 只看该作者
内部flash怎么当eeprom用啊?

使用特权

评论回复
地板
qiufengsd| | 2024-5-3 16:11 | 只看该作者
SRAM(静态随机存取存储器)通常比Flash内存有更快的读写速度。在您的机制中,将SRAM用作缓存,可以在写入数据时同时更新Data Flash和SRAM,这样可以避免在数据移动到新的Data Flash页面时进行全页搜索,从而节省时间。在读取数据时,直接从SRAM中读取,而不需要从Data Flash中搜索,这同样可以提高速度。

使用特权

评论回复
5
hudi008| | 2024-5-4 20:25 | 只看该作者
将资料分成数个较小的资料群,以便更有效地管理和存储资料。

使用特权

评论回复
6
gygp| | 2024-5-6 08:12 | 只看该作者
在进行资料写入时,会同步写入Data Flash和SRAM。当当前使用的Data Flash page已经写满时,会使用下一个Data Flash page,并且能够直接将SRAM存放的资料存入,节省一般将资料移入新的Data Flash page所需的时间。当需要读取资料时,可以直接由SRAM中读出资料,无须从Data Flash中寻找需要的资料,能够节省搜寻过程的时间。Data Flash中的资料只用来初始化SRAM。

使用特权

评论回复
7
weifeng90| | 2024-5-6 08:16 | 只看该作者
FLASH模拟EEPROM意义不是很大,只是把读写封装了一下而已。

使用特权

评论回复
8
nomomy| | 2024-5-6 16:38 | 只看该作者
为了减少对Data Flash页面的数量需求,可以将数据分成多个较小的数据组,这样每个页面可以存储多个数据段,提高了空间利用率。

使用特权

评论回复
9
earlmax| | 2024-5-6 20:51 | 只看该作者
写入数据时,数据同时被写入到Data Flash和SRAM中。SRAM用于缓存,以便快速读取和写入。

使用特权

评论回复
10
ingramward| | 2024-5-7 17:26 | 只看该作者
当当前使用的Data Flash页面写满时,系统会切换到下一个干净的Data Flash页面,并将SRAM中的数据复制过去。这样可以省去在Flash中搜索已写入数据的时间。

使用特权

评论回复
11
hearstnorman323| | 2024-5-7 22:06 | 只看该作者
SRAM应该足够大,以便能够存储频繁更改的数据;Data Flash的大小则取决于需要存储的数据总量以及每个擦写周期的数据量。

使用特权

评论回复
12
nomomy| | 2024-5-8 13:24 | 只看该作者
为了解决传统EEPROM写次数限制的问题,可以使用一种方法来模拟EEPROM的行为,即使用Flash存储器和静态随机存取存储器(SRAM)的结合来实现一个“伪EEPROM”。这种方法可以提供更高的耐久性和更快的访问速度。

使用特权

评论回复
13
beacherblack| | 2024-5-8 20:17 | 只看该作者
将Data Flash分成多个页,每个页用于存储SRAM中的数据。当SRAM中的数据写满一个页时,自动切换到下一个页,同时保持SRAM的数据同步。

使用特权

评论回复
14
Henryko| | 2024-5-8 20:34 | 只看该作者
模拟eeprom有什么用啊

使用特权

评论回复
15
sdCAD| | 2024-5-9 13:45 | 只看该作者
将数据分割成多个较小的数据群,以减少Data Flash页的使用数量。这样,即使每个页的擦写次数有限,多个页的总擦写次数也可以达到或超过百万次。

使用特权

评论回复
16
gygp| | 2024-5-9 22:10 | 只看该作者
通过合理地管理Flash的擦写周期(例如,通过磨损均衡算法),可以显著提高整个系统的耐久性。

使用特权

评论回复
17
beacherblack| | 2024-5-10 13:32 | 只看该作者
当选择要写入的页面时,可以选择擦写次数最少的页面以进一步平衡磨损。

使用特权

评论回复
18
plsbackup| | 2024-5-10 18:34 | 只看该作者
使用SRAM来存储经常访问的数据,这样可以显著提高读写速度。SRAM的读写速度远高于Flash存储器。

使用特权

评论回复
19
51xlf| | 2024-5-10 22:14 | 只看该作者
为了跟踪每个Data Flash页面的擦写次数,可以在每个页面的某个区域保留一个计数器。每次对该页面进行擦写时,计数器都会递增。当计数器达到某个阈值时,可以标记该页面为“磨损”,并在未来的写入操作中避免使用它,从而延长整个系统的使用寿命。

使用特权

评论回复
20
kmzuaz| | 2024-5-12 13:10 | 只看该作者
通过这种方式使用Data Flash,可以实现字节级别的写入和读取,并且由于减少了对Data Flash的直接访问,每个页面的擦写次数可以得到有效扩展,整体上达到百万次以上的可靠擦写次数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

86

主题

1697

帖子

1

粉丝