打印
[应用相关]

AN0002—AT32 MCU如何使用片上Flash来实现EEPROM功能

[复制链接]
4917|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 muyichuan2012 于 2022-1-8 13:55 编辑

AN0002—AT32 MCU如何使用片上Flash来实现EEPROM功能

当前诸多嵌入式应用场景都需要用到 EEPROM 作为非易失性的数据存储设备。出于客户低成本的考虑,AT32 系列部分型号的 MCU 并未搭载片上 EEPROM,但是在此我们将介绍一种使用片上 Flash来模拟 EEPROM 使用的方法,以作为对此应用需求的补充。
本文档将详细阐述在 AT32 系列 MCU 上使用片上 Flash 来模拟 EEPROM 的应用原理和软件使用方法。
Flash 与 EEPROM 的不同
以应用的角度来看,Flash 和 EEPROM 最大的不同在于以下两点:a) EEPROM可以按位(实际应用通常按字节)擦写,Flash需按页进行擦除。b) Flash的页擦除寿命周期大概是10000次,EEPROM的擦除寿命周期更优。针对以上两个大的不同点进行分析,取 EEPROM 易于擦写和高擦写寿命周期的特点来对 Flash 中的存储流程进行优化,以达到 Flash 模拟 EEPROM 的目的。

Flash 模拟 EEPROM 原理
Flash 模拟 EEPROM 的方案综合考虑了操作 Flash 的限制和要求。根据工程应用中 Flash 空间的使用情况和 MCU Chip 型号的不同,在片上 Flash 中找到至少两个 Page 大小的 Flash 未使用区域(地址应 Page 对齐)作为数据的交换存储区,各 Page 存储区按 Page 状态机制进行交替使用,构建的大致模型如下:


Note;相关文档和源代码请查看附件。

EEPROM_Emulation_V2.0.0.zip

369.29 KB

AN0002_EEPROM_Emulation_ZH_V2.0.0.pdf

495.85 KB

使用特权

评论回复
沙发
zeshoufx| | 2020-6-4 10:30 | 只看该作者
谢谢分享,,,

使用特权

评论回复
板凳
烟波致爽| | 2020-6-4 10:36 | 只看该作者
谢谢分享

使用特权

评论回复
地板
小涛DZGZS| | 2020-6-4 12:35 | 只看该作者
谢谢分享

使用特权

评论回复
5
SAMGJH| | 2020-6-5 16:42 | 只看该作者
下载分享

使用特权

评论回复
6
li880wert| | 2021-1-4 11:43 | 只看该作者
这是代码搬运工吗

使用特权

评论回复
7
weict125| | 2021-1-16 15:39 | 只看该作者
感谢分享

使用特权

评论回复
8
123ycli| | 2021-1-17 15:36 | 只看该作者
以应用的角度来看,Flash 和 EEPROM 最大的不同在于以下两点:
a) EEPROM可以按位(实际应用通常按字节)擦写,Flash需按页进行擦除。
b) Flash的页擦除寿命周期大概是10000次,EEPROM的擦除寿命周期更优。针对以上两个大的不同点进行分析,取 EEPROM 易于擦写和高擦写寿命周期的特点来对 Flash 中的存储流程进行优化,以达到 Flash 模拟 EEPROM 的目的。

使用特权

评论回复
9
329547875| | 2021-3-19 11:26 | 只看该作者
EEPROM 最大优点可以 字节写。。。

使用特权

评论回复
10
linhuikui| | 2021-3-30 11:02 | 只看该作者
刚要做这个功能

使用特权

评论回复
11
amoxoo| | 2021-4-5 00:01 | 只看该作者
用来存储不常修改的配置的话,方案完美。
不过真的要注意寿命问题,择机使用,举个极端的例子:
国家电网电表要做到每秒存储一次,用EEPROM的话,10万写入/Cell的寿命,看着挺多,但在不使用磨损平衡的情况下,12天写废。
目前三种非易失存储方案,还是要选择适合自己的:
1. Flash 每单位(页)一万次(或更少)写入寿命,容量大,存储单价巨便宜,写入要按页擦除,需要软件上在磨损平衡算法下功夫。
2. EEPROM 每单位(bit)十万次写入寿命,存储单价便宜,可按位写入,简单磨损平衡算法就能让它持久战斗。
3. FRAM 目前只看到富士通/Ramtron有产品 每单位(bit) 百亿次读写寿命(注意,是读+写),存储单价略贵,想要折腾死它,需要废点心思。

使用特权

评论回复
12
redsulife| | 2022-5-23 22:33 | 只看该作者
写了一个程序,有个字库,编译的时候发现超出单片机容量了F415CBT7,想用FLASH存储字库,但是如果程序里写,那是不是每次启动都要进行一次flash写操作?不明白呀

使用特权

评论回复
13
329547875| | 2022-12-19 15:01 | 只看该作者
redsulife 发表于 2022-5-23 22:33
写了一个程序,有个字库,编译的时候发现超出单片机容量了F415CBT7,想用FLASH存储字库,但是如果程序里写 ...

字库放在FLASH里面,第一次烧写进去,后面就是调用就可以了。

使用特权

评论回复
14
356053261| | 2024-6-29 19:45 | 只看该作者
redsulife 发表于 2022-5-23 22:33
写了一个程序,有个字库,编译的时候发现超出单片机容量了F415CBT7,想用FLASH存储字库,但是如果程序里写 ...

写完flash后在指定位置做个标记,以后每次启动时读一下,判断是否已经写入过,如果已经写了就不需要再写了

使用特权

评论回复
15
呐咯密密| | 2024-7-1 15:08 | 只看该作者
少量数据的储存,用FLASH模拟EEPROM还是很方便的

使用特权

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

本版积分规则

13

主题

49

帖子

4

粉丝