打印

MCU模拟eeprom基本功能

[复制链接]
4102|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sqcumt123|  楼主 | 2011-8-27 17:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果你的MCU的flash足够大。并且你的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码

相关帖子

沙发
lifeinjoy| | 2011-8-27 22:55 | 只看该作者
很强大的东东 一个省一个EE,多的话得省多少钱?

使用特权

评论回复
板凳
pa2792| | 2011-8-28 00:09 | 只看该作者
直接拿flash存不了数据?

使用特权

评论回复
地板
tianm| | 2011-8-28 14:43 | 只看该作者
直接拿flash存不了数据?
pa2792 发表于 2011-8-28 00:09


直接存就可以了

使用特权

评论回复
5
zhaoxqi| | 2011-8-28 17:10 | 只看该作者
ST的发这干啥?

使用特权

评论回复
6
aass1| | 2011-8-28 19:23 | 只看该作者
过来看看

使用特权

评论回复
7
zhenykun| | 2011-8-28 19:27 | 只看该作者
我也看看

使用特权

评论回复
8
永远的不知| | 2011-8-28 22:37 | 只看该作者
MSP430的Flash专门有一块用于存放数据的,
功能等同于EEPROM。

使用特权

评论回复
9
keken| | 2011-8-29 07:06 | 只看该作者
是嘛

使用特权

评论回复
10
keken| | 2011-8-29 07:06 | 只看该作者
我要好好研究下

使用特权

评论回复
11
jiku| | 2014-1-17 17:03 | 只看该作者
为什么看不到图?

使用特权

评论回复
12
smilingangel| | 2014-1-21 22:09 | 只看该作者
这个是非常深层次的介绍的啊,,很不错的,我这学习的啦

使用特权

评论回复
13
低调、随便| | 2015-11-25 14:31 | 只看该作者
谢谢楼主

使用特权

评论回复
14
低调、随便| | 2015-11-25 14:33 | 只看该作者
楼主,有例程?

使用特权

评论回复
15
baimiaocun2015| | 2015-11-26 15:18 | 只看该作者
这个关键的地方就是EEPROM的读写操作的。

使用特权

评论回复
16
vivilzb1985| | 2015-11-28 10:30 | 只看该作者
这个是直接的采用单片机的flash进行读写操作的

使用特权

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

本版积分规则

88

主题

2107

帖子

1

粉丝