logo资料库

STM32F4系列用Flash模拟Eeprom.pdf

第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
资料共20页,剩余部分请下载后查看
1 外部 EEPROM 与仿真 EEPROM 之间的主要差异
表 1. 外部 EEPROM 与仿真 EEPROM 之间的差异
1.1 写访问时间上的差异
1.2 擦除时间上的差异
1.3 写方法上的相似之处
2 实现 EEPROM 仿真
2.1 原理
图 1. 在 page0 与 page1 之间切换的头状态
表 2. 仿真页可能的状态和相应操作
表 3. STM32F40x/STM32F41x Flash 扇区
图 2. EEPROM 变量格式
2.2 使用实例:应用示例
图 3. 数据更新流程
2.3 EEPROM 仿真软件说明
表 4. API 定义
图 4. WriteVariable 流程图
2.4 EEPROM 仿真内存占用量
表 5. EEPROM 仿真机制的内存占用量
图 5. EEPROM 仿真的 Flash 占用情况(机制和存储)
2.5 EEPROM 仿真时间
表 6. 系统时钟为 168 MHz 的 EEPROM 仿真时间
3 嵌入式应用的相关信息
3.1 数据粒度管理
表 7. Flash 编程函数
3.2 耗损均衡:增加 Flash 可擦写次数
3.2.1 耗损均衡实现示例
图 6. 四页的页交换机制(耗损均衡)
3.3 断电时的页头恢复
3.4 循环性能和页分配
3.4.1 循环性能
3.4.2 Flash 页分配
表 8. 应用设计
3.5 实时注意事项
4 版本历史
表 9. 文档版本历史
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 使用扇区的 最大空间。 2011 年 10 月 文档 ID 022108 第 1 版 1/20 www.st.com
目录 目录 1 2 3 AN3969 外部 EEPROM 与仿真 EEPROM 之间的主要差异 . . . . . . . . . . . . . . . . . . . 5 1.1 写访问时间上的差异 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2 擦除时间上的差异 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 写方法上的相似之处 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 实现 EEPROM 仿真 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.1 原理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 使用实例:应用示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 EEPROM 仿真软件说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3 EEPROM 仿真内存占用量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.4 2.5 EEPROM 仿真时间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2.1 嵌入式应用的相关信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.1 数据粒度管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.2 耗损均衡:增加 Flash 可擦写次数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 耗损均衡实现示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.3 断电时的页头恢复 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.4 循环性能和页分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 循环性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Flash 页分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.5 实时注意事项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.4.1 3.4.2 4 版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2//20 文档 ID 022108 第 1 版
AN3969 表格索引 表格索引 表 1. 表 2. 表 3. 表 4. 表 5. 表 6. 表 7. 表 8. 表 9. 外部 EEPROM 与仿真 EEPROM 之间的差异. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 仿真页可能的状态和相应操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 STM32F40x/STM32F41x Flash 扇区 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 API 定义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 EEPROM 仿真机制的内存占用量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 系统时钟为 168 MHz 的 EEPROM 仿真时间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Flash 编程函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 应用设计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 文档版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 文档 ID 022108 第 1 版 3/20 3
图片索引 图片索引 AN3969 图 1. 图 2. 图 3. 图 4. 图 5. 图 6. 在 page0 与 page1 之间切换的头状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 EEPROM 变量格式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 数据更新流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 WriteVariable 流程图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 EEPROM 仿真的 Flash 占用情况(机制和存储) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 四页的页交换机制(耗损均衡) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4/20 文档 ID 022108 第 1 版
AN3969 外部 EEPROM 与仿真 EEPROM 之间的主要差异 1 外部 EEPROM 与仿真 EEPROM 之间的主要差异 EEPROM 是许多需要非易失性数据存储的嵌入式应用的关键组件,它在运行期间以字节或 字为粒度。 这些系统中使用的微控制器通常是基于嵌入式 Flash 存储器的。为了避免使用这些组件、节 约 PCB 空间并降低系统成本,可使用 STM32F41x Flash 代替外部 EEPOM,模拟代码和数 据的存储。 但是与 Flash 不同的是,外部 EEPROM 在重写数据之前并不需要执行擦除操作来释放空 间。要将数据存储到嵌入式 Flash 中,需要执行特殊的软件管理。 这种仿真软件机制由许多因素决定,包括 EEPROM 可靠性、所使用的 Flash 的架构以及产 品要求等。 对于使用相同 Flash 技术的任何微控制器(不局限于 STM32F40x/STM32F41x 系列产品), 嵌入式 Flash 和外部串行 EEPROM 之间的主要差异完全一致。表 1 中汇总了这些主要差异。 表 1. 外部 EEPROM 与仿真 EEPROM 之间的差异 特性 写时间 外部 EEPROM (例如,M24C64: I²C 串行访问 EEPROM) — 5 ms 内的随机字节写入。 字编程时间 = 20 ms — 5 ms 内的页(32 字节)写 入。字编程时间 = 625 μs 擦除时间 N/A 写方法 — 启动之后即与 CPU 无关 — 只需要正确供电 读访问 — 串行:100 μs — 随机字:92 μs — 页:每字节 22.5 μs 写/ 擦除循 环次数 100 万次写循环 使用片上 Flash 仿真的 EEPROM 使用片上备份 SRAM 仿真的 EEPROM(1) 半字编程时间:30 μs 到 237.25 ms (2) CPU 速度,0 等待周期 扇区(大页面)擦除时间:1 s 到 3 s(取决于扇区大小) NA 启动之后即与 CPU 相关。 如果写操作因软件复位而中断, EEPROM 仿真算法会停止,但是 当前的 Flash 写操作不会因 CPU 复位而中断。 可以按字节(8 位)、半字 (16 位)或全字(32 位)形式进 行访问。 可以按字节(8 位)、半字 (16 位)或全字(32 位)形式进 行访问。 软件复位会中断写操作。 并行:(@168 MHz) 半字访问时 间为 0.68 μs 到 251 μs (2) CPU 速度,1 等待周期 每扇区(大页面)1 万次循环。 使用多个片上 Flash 页等同于增 加写循环次数。请参见第 3.4 节: 循环性能和页分配。 只要存在 VBAT,就没有限制 1. 有关备份 SRAM 用法的详细信息,请参见 STM32F40x/41x 参考手册 (RM0090) 的“电池备份域”部分。 2. 有关更多详细信息,请参见第 2.5 章: EEPROM 仿真时间。 文档 ID 022108 第 1 版 5/20 19
外部 EEPROM 与仿真 EEPROM 之间的主要差异 AN3969 1.1 写访问时间上的差异 由于 Flash 的写访问时间较短,所以对于一些关键参数,在仿真 EEPROM 中的存储速度要 比在外部串行 EEPROM 中更快,从而可以改善数据存储。 1.2 擦除时间上的差异 注: 1.3 擦除时间方面的差异是独立 EEPROM 与使用嵌入式 Flash 的仿真 EEPROM 之间的另一个 重大差异。与 Flash 不同,EEPROM 在写之前不需要执行擦除操作来释放空间。这就意味 着必须执行某种形式的软件管理,才能将数据存储到 Flash 中。此外,由于 Flash 中的块擦 除过程需要较长时间,所以在设计 Flash 管理软件时,应注意考虑可能会中断擦除过程的电 源关闭和其它一些意外事件(例如复位)。要设计强大的 Flash 内存管理软件,必须透彻了 解 Flash 擦除过程。 即使 CPU 复位,也不会中断正在对 STM32F40x/STM32F41x 嵌入式 Flash 执行的扇区擦除 或批量擦除操作。 写方法上的相似之处 外部 EEPROM 与具有 STM32F40x/STM32F41x 嵌入式 Flash 的仿真 EEPROM 之间的一个 相似之处是写方法。 ● 独立外部 EEPROM:一旦 CPU 启动后,字的写操作便不能被 CPU 复位中断。只有供电 故障才会中断写过程,因此正确设置去耦电容的大小可以保护独立 EEPROM 中的整个 写过程。 ● 使用嵌入式 Flash 仿真的 EEPROM:由 CPU 启动后,写过程可由电源故障中断。即使 CPU 复位,也不会中断正在对 STM32F40x/STM32F41x 嵌入式 Flash 执行的字写入操 作。EEPROM 算法会停止,但是当前的 Flash 字写入操作不会因 CPU 复位中断。 6/20 文档 ID 022108 第 1 版
AN3969 实现 EEPROM 仿真 2 实现 EEPROM 仿真 2.1 原理 EEPROM 仿真可以通过多种方式实现,但要注意 Flash 限制和产品要求。下面详述的方法 要求为非易失性数据分配至少两个相同大小的 Flash 扇区:一个在开始时擦除,支持逐字编 程;另一个在需要对前一扇区执行垃圾回收时接管工作。占用每扇区前半个字(16 位)的头 字段指示扇区的状态。在本文档的其余部分,将每一个扇区视为一页,这些页分别称为 Page0 和 Page1。 头字段位于每页的基准地址上,并提供该页的状态信息。 每个页都有三个可能的状态: ● ● ● ERASED:页为空。 RECEIVE_DATA:页正在从另一个满页接收数据。 VALID_PAGE:页中包含有效数据,并且在将所有有效数据完全传输到已擦除页之前, 此状态不会改变。 图 1 显示页的状态如何改变。 图 1. 在 page0 与 page1 之间切换的头状态 文档 ID 022108 第 1 版 7/20 19
实现 EEPROM 仿真 AN3969 表 2. 仿真页可能的状态和相应操作 Page1 ERASED 无效状态 ERASED 操作:将两个页擦除并将 page0 格式化 RECEIVE_DATA 操作:擦除 Page0 并将 Page1 标记为 VALID_PAGE VALID_PAGE 操作:将 page1 用作有效 页并擦除 page0 Page0 RECEIVE_DATA VALID_PAGE 操作:将 Page1 擦除并将 Page0 标记为 VALID_PAGE 操作:将 page0 用作 有效 页 并 擦除 page1 无效状态 操作:将两个页擦除并将 page0 格式化 操作:将 page1 用作有效页并 将上次更新的变量从 page1 传 送到 page0,同时将 page0 标 记为有效页并擦除 page1 操作:将 page0 用作 有效 页 并 将上次更新的变量从 page0 传 送到 page1,同时 将 page1 标 记为有效页并擦除 page0 无效状态 操作:将两个页擦除并将 page0 格式化 通常,使用这种方法时,用户事先并不了解变量更新频率。 本文档所述的软件和实现方法使用两个大小为 16 KB 的 Flash 扇区(扇区 2 和扇区 3)来仿 真 EEPROM。 注: 由于扇区 2 和扇区 3 的大小比 STM32F40x/STM32F41x Flash 的其它扇区小,因此我们选择这 两个扇区(表 3:STM32F40x/STM32F41x Flash 扇区中介绍了 STM32F40x/STM32F41x Flash 的主存储器块划分)。根据具体应用和用户需要,可以选择更大的扇区。 表 3. STM32F40x/STM32F41x Flash 扇区 名称 扇区 0 到扇区 3 扇区 4 扇区 5 到扇区 11 扇区大小 16 KB 64 KB 128 KB 每个变量元素都由一个虚拟地址和值来定义,它们将存储在 Flash 中,用于执行后续检索或 更新(在实施的软件中,虚拟地址和数据的长度均为 16 位)。如果修改了数据,与之前虚 拟地址相关联的已修改数据将会存储到新的 Flash 位置。数据检索会返回最新的数据值。 8/20 文档 ID 022108 第 1 版
分享到:
收藏