15_片内flash模拟EEPROM

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

L

e i

)

LTK

女娲STM32开发板使用手册

修订历史

L T

K (L

e i

T e

k )

目录

第15 片内flash 模拟EEPROM (3)

章 Flash 和EEPROM (3)

15.1 Flash 和EEPROM 对比 .......................................................... 3 15.1.1 内部Flash 模拟EEPROM 原理.............................................. 3 15.1.2 Flash 掉电数据恢复 ................................................................ 5 15.1.3 内部flash 应用实例 ----- 模拟EEPROM .. (6)

15.2 实例描述 ................................................................................ 6 15.2.1 实验效果 ................................................................................ 6 15.2.2 硬件设计 ................................................................................ 6 15.2.3 软件设计 .. (6)

15.2.4

k )

片内flash 模拟EEPROM

第15章 Flash 和EEPROM

15.1 Flash 和EEPROM 对比

15.1.1为了节省成本,STM32内部没有集成EEPROM ,当我们需要存储一些数据时,可使用内部flash 来模拟EEPROM 。

不像flash 存储器,EEPROM 在向存储空间重新写入数据时,不需要做擦除操作。

由于外部EEPROM 和内部flash 模拟的EEPROM 的写入方式有所不同,所以使用内部flash 模拟EEPROM 时,要使用掉电恢复机制。 以下表格是他们的主要区别。

内部Flash 模拟EEPROM 原理

15.1.2考虑到flash 存储器的局限性以及产品的需求,模拟EEPROM 至少需要两页容量大小完全相等的flash ,其中第0页已经擦除过,可以进行写操作。当第0页写满了以后,第1页需要回收第0页内的有效数据,若此时需要新写入的数据,也会写入第1页。每一页的开头16位都有一个状态标志,描述当前页的状态。

每页的状态可能为下面3个状态中的一个: ERASED: 该页为空

L T

K

(L

e i

T e

k )

● RECEIVE_DATA: 该页正在从另外一个已满的页接收数据

● VALID_PAGE: 该页包含有效数据,该页的状态一直保持不变,直到所

有有效数据完全传输到另外一个 ERASED 的页。 第0页和第1页的状态转换如下图所示:

每个存储在flash 内变量都定义了一个虚拟地址和一个数值,该数值以后可以读取和更新,当该数值改变后,该数值连同其对应的虚拟地址一起存储到一个新的flash 存储地址。当需要读取该数值时,返回的是最近修改的数值。在本实

例中,虚拟地址和该数值都是16位。其格式如下:

下图描述了内部flash 模拟EEPROM 存储三个变量的流程,其中三个变量名及其对应的值分别为: var1(0x5555),var2(0x6666),var3(0x7777)。

L T

K (L

e i

T e k )

Flash 掉电数据恢复

15.1.3当正在更新flash 数据时,这时候掉电,有可能会损坏flash 数据。

为了检测到这种数据损坏,并且恢复数据,在开机的时候立马执行

ltk_ee_init ,其原理是,该函数使用存储数据页的状态,来判断该页数据是否

已经损坏,如果数据损坏了,则修复数据。页头的状态有9个可能的组合,其中

的3个组合为有效组合,如下图所示:

L T

K (L

e i

T e

k )

内部flash 应用实例 ----- 模拟EEPROM

15.2 实例描述

15.2.1本实例使用STM32内部的flash 来模拟EEPROM 。解锁flash 后,便可以操作内部flash ,一开始要做掉电恢复,通过函数ltk_ee_init 来实现,然后向内部flash 写入/读取三个变量,通过串口输出变量的值来检测flash 模拟EEPROM 读写是否成功。

实验效果

15.2.2烧录该软件后,用USB 线连接到开发板上标有UART 的USB 口,在电脑的串口终端工具(如 secureCRT )内会输出该三个变量的值。

硬件设计

15.2.3该实例使用内部flash 来模拟EEPROM ,无需外部电路。

软件设计

15.2.4我们先从main 开始,该函数在应用层文件eeprom_emulation_main.c 内实现,主函数首先初始化串口。要读写内部flash ,首先要解锁flash ,然后做掉电检测,通过调用函数ltk_ee_init 来检测flash 的内容是否有损坏。最后调用函数

ltk_ee_write_variable 来向内部flash 写入数据,再调用函数

ltk_ee_read_variable 读取内部

flash 内保存的变量的值,通过串口打印出来。

1 /**

2 * 描述: 主函数,连续保存多个数据到 EEPROM ,然后读出,检查保存和读取出来的数据

3 * 是否一致

4 * 参数: 无

5 * 返回: 无

6 */

7 int main(void )

相关文档
最新文档