
简介) O6 B, w1 c9 t 在工业应用中经常使用 EEPROM(电可擦除可编程只读存储器)来存储可更新的数据。, m- X r4 {# L2 E# @" r EEPROM 是用在复杂系统(例如计算机)和其它电子器件中的一种永久(非易失)存储器存储系统,它可以在电源故障时存储和保留少量数据。 为了降低成本,可以使用特定的软件算法用片上 Flash 替代外部 EEPROM。 此应用笔记将介绍使用 STM32F0xx 器件的片上 Flash 通过仿真 EEPROM 机制来取代独立EEPROM 的软件解决方案。 此仿真至少要使用 Flash 中的两个扇区。EEPROM 仿真代码会在页面填满后在页面之间交换数据,而且此过程对用户是透明的。 此应用笔记随附的 EEPROM 仿真驱动程序满足以下要求:; \$ C9 b* L' }, H. M' P; f ● 提供简单 API 的轻量级实现,这种 API 由初始化、读写数据和降低存储器占用量三种功能构成。, U; Y Q& b( Y2 ?- t ● 简单且可轻松更新的代码模型。$ H$ i8 u, O4 d/ C( e6 j/ [ ● 对用户透明的清除和内部数据管理。 ● 后台页擦除。 ● 至少需要使用两个 Flash 页,如果需要进行耗损均衡,则需要更多。# o( d% B8 n4 |: A4 g 2 r9 o" P2 ^3 G1 b# ], i, C! |) z1 k 1 外部 EEPROM 与仿真 EEPROM 之间的主要差异8 }$ X* G* w9 V3 A0 \1 i j EEPROM 是许多需要非易失性数据存储的嵌入式应用的关键组件,它在运行期间以字节或字为粒度进行更新。 这些系统中使用的微控制器通常是基于嵌入式 Flash 存储器的。为了避免使用这些组件、节约 PCB 空间并降低系统成本,可使用 STM32F0xx Flash 代替外部 EEPOM,模拟代码和数据的存储。, H1 {+ ^/ z- Z& @' B1 B- c 但是与 Flash 不同的是,外部 EEPROM 在重写数据之前并不需要执行擦除操作来释放空间。要将数据存储到嵌入式 Flash 中,需要执行特殊的软件管理。, Y7 w1 z2 G+ a1 _5 b" d5 ^ 这种仿真软件机制由许多因素决定,包括 EEPROM 可靠性、所使用的 Flash 的架构以及产品要求等。' k3 l0 N9 l( K& W 对于使用相同 Flash 技术的任何微控制器(不局限于 STM32F0xx 系列产品),嵌入式 Flash和外部串行 EEPROM 之间的主要差异完全一致。表 1 中汇总了这些主要差异。5 M/ l) t' b) n1 _) @ 0 R5 f; F; z+ H' x ![]() 1.1 写访问时间上的差异$ n8 [# {) |5 `) E* A 由于 Flash 的写访问时间较短,所以对于一些关键参数,在仿真 EEPROM 中的存储速度要比在外部串行 EEPROM 中更快,从而可以改善数据存储。* @ w" L' q2 k" ~9 Y2 q v* W 1.2 擦除时间上的差异 擦除时间方面的差异是独立 EEPROM 与使用嵌入式 Flash 的仿真 EEPROM 之间的另一个重大差异。与 Flash 不同,EEPROM 在写之前不需要执行擦除操作来释放空间。这就意味着必须执行某种形式的软件管理,才能将数据存储到 Flash 中。此外,由于 Flash 中的块擦除过程不需要太长时间,所以在设计 Flash 管理软件时,应注意考虑可能会中断擦除过程的电源关闭和其它一些意外事件(例如复位)。要设计强大的 Flash 内存管理软件,必须透彻了解 Flash 擦除过程。6 w7 @% M9 `: ~' z: t1 U 注: 即使软件重置,也不会中断正在对 STM32F0xx 嵌入式 Flash 执行的页擦除或批量擦除操作。8 I1 y+ a _/ q4 X, H ?2 ^ 1.3 写方法上的相似之处$ q4 } D/ \: ?6 P4 G8 z 外部 EEPROM 与具有 STM32F0xx 嵌入式 Flash 的仿真 EEPROM 之间的一个相似之处是写方法。 ● 独立外部 EEPROM:在被 CPU 启动之后,字写入不能被软件复位中断。只有供电故障才会中断写过程,因此正确设置去耦电容的大小可以保护独立 EEPROM 中的整个写过程。 ● 使用嵌入式 Flash 仿真的 EEPROM:由 CPU 启动后,写过程可由电源故障中断。即使软件复位,也不会中断正在对 STM32F0xx 嵌入式 Flash 执行的字写入操作。EEPROM算法会停止,但是当前的 Flash 字写入操作不会因软件复位而中断。$ S2 D: ?- ?+ n9 X" k, s 2 实现 EEPROM 仿真5 [- @4 M- g, r) S4 H4 H9 e, ? 2.1 原理 EEPROM 仿真可以通过多种方式实现,但要注意 Flash 限制和产品要求。下面所详述的方法要求为非易失性数据分配至少两个相同大小的 Flash 页:一个在开始时擦除,另一个在需要对前一页执行垃圾回收时接管工作。占用每页前半个字(16 位)的头字段指示页的状态。 h* a" P0 P6 o: @ 在本文档的其余部分,这些页分别被称为 Page0 和 Page1。4 b9 y, A, b3 [: j 每个页都有三个可能的状态:1 I' Z p! F. W! ?# X( |% O ● ERASED:页为空。) J/ E% n" J5 T' q, F% \ ● RECEIVE_DATA:页正在从另一个满页接收数据。 ● VALID_PAGE:页中包含有效数据,并且在将所有有效数据完全传输到已擦除页之前,此状态不会改变。 图 1 显示页的状态如何改变。 ![]() ; ~. z0 Y" e# W* |$ C( I 每个变量元素都由一个虚拟地址和值来定义,它们将被存储在 Flash 中,用于执行后续检索或更新(在实施的软件中,虚拟地址和数据的长度均为 16 位)。如果修改了数据,与之前虚拟地址相关联的已修改数据将会存储到新的 Flash 位置。数据检索会返回最新的数据值。# `& @ Q/ l3 b1 k8 i ; X# f; ?# @" t0 i9 n" R ![]() 完整版请查看:附件 5 O# a8 f! D5 g+ V- S4 f 1 h/ I3 J$ E/ n: @ |