2011 10 月文 ID 022108 1 1/20
AN3969
应用笔记
STM32F40x/STM32F41x 微控制器中的 EEPROM 仿真
简介
在工业应用中经常使用 EEPROM电可擦除可编程只读存储器来存储可更新的数据
EEPROM 是用在复杂系统(例如计算机)和其它电子器件中的一种永久非易失)存储器
存储系统,它可以在电源故障时存储和保留少量数据。
为降低成本,外部 EEPROM 可以用 STM32F40x/STM32F41x 的以下功能之一替代:
片内 4 KB 备份 SRAM
片内 Flash,具有特定软件算法
STM32F40x/STM32F41x 具有 4 KB 备份 SRAM,当主 VDD 电源断电时,可通过 VBAT 电源
为该 SRAM 供电。
借助 CPU 频率下的高速访问(通常在用电池供电的应用中)优势,只要 VBAT 存在,此备份
SRAM 就可以用作内部 EEPROM(不带任何附加软件)。
但是,当备份 SRAM 用于其它目的并且/或者应用不使用 VBAT 电源时,片内 Flash(具有特
定软件算法)可以用于仿真 EEPROM 存储器。
本应用笔记介绍了使用 STM32F40x/STM32F41x 器件的片上 Flash 通过仿真 EEPROM 机制
来取代独立 EEPROM 的软件解决方案。
要实现这种仿真,至少要使用 Flash 中的两个扇区。EEPROM 仿真代码会在扇区填满后
以对用户透明的方式交换数据。
此应用笔记随附的 EEPROM 仿真驱动程序满足以下要求:
提供简单 API 的轻量级实现,这种 API 由初始化、读写数据和降低存储器占用量三种功
能构成。
简单且可轻松更新的代码模型
对用户透明的清除和内部数据管理
后台扇区擦除
至少使用两个 Flash 扇区,如果需要进行耗损均衡,则需要更多
要仿真的 EEPROM 大小可在扇区大小的限制范围内随意调整,并允许 EEPROM 使用扇区的
最大空间。
www.st.com
目录 AN3969
2//20 文档 ID 022108 1
目录
1 外部 EEPROM 与仿真 EEPROM 之间的主要差异 . . . . . . . . . . . . . . . . . . . 5
1.1 写访问时间上的差异 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 擦除时间上的差异 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 写方法上的相似之处 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 实现 EEPROM 仿真 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1 原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 使用实例:应用示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 EEPROM 仿真软件说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 EEPROM 仿真内存占用量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5 EEPROM 仿真时间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3 嵌入式应用的相关信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1 数据粒度管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2 耗损均衡:增加 Flash 可擦写次数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2.1 耗损均衡实现示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3 断电时的页头恢复 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4 循环性能和页分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4.1 循环性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4.2 Flash 页分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.5 实时注意事项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4 版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19