打印
[STM32F0]

STM32F0xx 微控制器中的 EEPROM 仿真

[复制链接]
545|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
简介
在工业应用中经常使用 EEPROM(电可擦除可编程只读存储器)来存储可更新的数据。
EEPROM 是用在复杂系统(例如计算机)和其它电子器件中的一种永久(非易失)存储器
存储系统,它可以在电源故障时存储和保留少量数据。
为了降低成本,可以使用特定的软件算法用片上 Flash 替代外部 EEPROM。
此应用笔记将介绍使用 STM32F0xx 器件的片上 Flash 通过仿真 EEPROM 机制来取代独立
EEPROM 的软件解决方案。
此仿真至少要使用 Flash 中的两个扇区。 EEPROM 仿真代码会在页面填满后在页面之间交
换数据,而且此过程对用户是透明的。
此应用笔记随附的 EEPROM 仿真驱动程序满足以下要求:
● 提供简单 API 的轻量级实现,这种 API 由初始化、读写数据和降低存储器占用量三种功
能构成。
● 简单且可轻松更新的代码模型。
● 对用户透明的清除和内部数据管理。
● 后台页擦除。
● 至少需要使用两个 Flash 页,如果需要进行耗损均衡,则需要更多。  

使用特权

评论回复
沙发
我喜欢打游戏|  楼主 | 2022-4-19 18:15 | 只看该作者
外部 EEPROM 与仿真 EEPROM 之间的主要差异
EEPROM 是许多需要非易失性数据存储的嵌入式应用的关键组件,它在运行期间以字节或
字为粒度进行更新。
这些系统中使用的微控制器通常是基于嵌入式
Flash 存储器的。为了避免使用这些组件、节
PCB 空间并降低系统成本,可使用 STM32F0xx Flash 代替外部 EEPOM,模拟代码和数据
的存储。
但是与
Flash 不同的是,外部 EEPROM 在重写数据之前并不需要执行擦除操作来释放空
间。要将数据存储到嵌入式
Flash 中,需要执行特殊的软件管理。
这种仿真软件机制由许多因素决定,包括
EEPROM 可靠性、所使用的 Flash 的架构以及产品
要求等。
对于使用相同
Flash 技术的任何微控制器(不局限于 STM32F0xx 系列产品),嵌入式 Flash
和外部串行 EEPROM 之间的主要差异完全一致。 1 中汇总了这些主要差异。
1. 外部 EEPROM 与仿真 EEPROM 之间的差异
特性外部 EEPROM
(例如, M24C64
I²C 串行访问 EEPROM
仿真 EEPROM
(使用片上 Flash
写时间— 5 ms 内的随机字节写。
字编程时间
= 20 ms
— 5 ms
内的页(32 字节)写入。
字编程时间
= 625 μs
半字编程时间: 124 μs 26 ms (1)
擦除时间 N/A 页擦除时间: 20 ms 40 ms (2)
写方法 启动之后即与 CPU 无关
只需要正确供电
启动之后即与 CPU 相关。
如果写操作因软件重置而中断,
EEPROM 仿真算法
会停止,但是当前的
Flash 写操作不会因软件重置
而中断。
可作为半字(
16 位)或全字(32 位)访问。
读访问串行: 100 μs
随机字: 92 μs
页:每字节 22.5 μs
并行:(48 MHz 时)半字访问时间为 3.8 μs
110 μs (2)
/擦除循环次数 100 万次写循环 每页 1 万次循环。使用多个片上 Flash 页等同于增加
写循环次数。请参见
3.4 节:循环性能和页分配
1. 有关更多详细信息,请参见2.5 章: EEPROM 仿真时间
2. 有关更多详细信息,请参见 STM32F051xx 数据手册中的“内存特性”。  

使用特权

评论回复
板凳
我喜欢打游戏|  楼主 | 2022-4-19 18:15 | 只看该作者
1.1 写访问时间上的差异
由于 Flash 的写访问时间较短,所以对于一些关键参数,在仿真 EEPROM 中的存储速度要
比在外部串行 EEPROM 中更快,从而可以改善数据存储。
1.2 擦除时间上的差异
擦除时间方面的差异是独立 EEPROM 与使用嵌入式 Flash 的仿真 EEPROM 之间的另一个
重大差异。与 Flash 不同, EEPROM 在写之前不需要执行擦除操作来释放空间。这就意味
着必须执行某种形式的软件管理,才能将数据存储到 Flash 中。此外,由于 Flash 中的块擦
除过程不需要太长时间,所以在设计 Flash 管理软件时,应注意考虑可能会中断擦除过程的
电源关闭和其它一些意外事件(例如复位)。要设计强大的 Flash 内存管理软件,必须透彻
了解 Flash 擦除过程。
注: 即使软件重置,也不会中断正在对 STM32F0xx 嵌入式 Flash 执行的页擦除或批量擦除操作。
1.3 写方法上的相似之处
外部 EEPROM 与具有 STM32F0xx 嵌入式 Flash 的仿真 EEPROM 之间的一个相似之处是
写方法。
● 独立外部 EEPROM:在被 CPU 启动之后,字写入不能被软件复位中断。只有供电故障
才会中断写过程,因此正确设置去耦电容的大小可以保护独立 EEPROM 中的整个写
过程。
● 使用嵌入式 Flash 仿真的 EEPROM:由 CPU 启动后,写过程可由电源故障中断。即使
软件复位,也不会中断正在对 STM32F0xx 嵌入式 Flash 执行的字写入操作。 EEPROM
算**停止,但是当前的 Flash 字写入操作不会因软件复位而中断。

使用特权

评论回复
地板
我喜欢打游戏|  楼主 | 2022-4-19 18:17 | 只看该作者
实现 EEPROM 仿真
2.1 原理
EEPROM 仿真可以通过多种方式实现,但要注意 Flash 限制和产品要求。下面所详述的方
法要求为非易失性数据分配至少两个相同大小的 Flash 页:一个在开始时擦除,另一个在需
要对前一页执行垃圾回收时接管工作。占用每页前半个字(16 位)的头字段指示页的状态。
在本文档的其余部分,这些页分别被称为 Page0 和 Page1。
每个页都有三个可能的状态:
● ERASED:页为空。
● RECEIVE_DATA:页正在从另一个满页接收数据。

VALID_PAGE:页中包含有效数据,并且在将所有有效数据完全传输到已擦除页之前,
此状态不会改变。


每个变量元素都由一个虚拟地址和值来定义,它们将被存储在 Flash 中,用于执行后续检索
或更新(在实施的软件中,虚拟地址和数据的长度均为 16 位)。如果修改了数据,与之前
虚拟地址相关联的已修改数据将会存储到新的 Flash 位置。数据检索会返回最新的数据值。

使用特权

评论回复
5
我喜欢打游戏|  楼主 | 2022-4-19 18:30 | 只看该作者
使用实例:应用示例
以下示例显示的是对具有以下虚拟地址的三个 EEPROM 变量(Var1Var2 Var3)的软
件管理:

Var1 的虚拟地址
Var2 虚拟地址
Var3 虚拟地址
5555h
6666h
7777h

使用特权

评论回复
6
我喜欢打游戏|  楼主 | 2022-4-19 18:31 | 只看该作者
EEPROM 仿真软件说明
本节介绍使用 STMicroelectronics 提供的 STM32F0xx Flash 驱动程序针对 EEPROM 仿真而
执行的驱动程序。
此外还提供了一个样本演示程序,用于使用三个变量
(Var1Var2 Var3) 来演示和测试
EEPROM 仿真驱动程序,而这三个变量是在软件的 main.c 文件所声明的 VirtAddVarTab[]
表中定义的。
此项目除了
Flash 库源文件之外,还包含三个源文件:
● eeprom.c:其中包含 EEPROM 仿真固件函数:
EE_Init()
EE_Format()
EE_FindValidPage()
EE_VerifyPageFullWriteVariable()
EE_ReadVariable()
EE_PageTransfer()
EE_WriteVariable()
eeprom.h:其中包含函数原型和一些声明。可使用这个文件来改编下列参数,以满足
应用要求:
要使用的数据变量的个数(默认值: 3
● main.c:这个应用程序是使用所描述的例程对 EEPROM 执行读写操作的示例。
 
用户 API 定义
下表中描述了 eeprom.c 文件中包含的函数集,这些函数将用于 EEPROM 仿真:

注: 下列函数可用于访问仿真 EEPROM:
- EE_Init()
- EE_ReadVariable()
- EE_WriteVariable()
这些函数用在此应用笔记所随附的应用程序代码中。
图 4 显示了 EEPROM 中变量项的更新过程。

关键特性
用户可配置的仿真 EEPROM 大小
增加了 Flash 的可擦写次数:页只有在已满时才会被擦除
可以减少非易失性数据变量的更新次数
可以在执行编程/擦除期间处理中断



使用特权

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

本版积分规则

75

主题

611

帖子

0

粉丝