12
EEPROM Emulation 2019.09.17 1 版本 1.0.1 www.arterytek.com AN0002 应用笔记 EEPROM Emulation 前言 当前诸多嵌入式应用场景都需要用到 EEPROM 作为非易失性的数据存储设备。出于客户低成本的考 虑,AT32 系列部分型号的 MCU 并未搭载片上 EEPROM,但是在此我们将介绍一种使用片上 Flash 来模拟 EEPROM 使用的方法,以作为对此应用需求的补充。 本文档将详细阐述在 AT32 系列 MCU 上使用片上 Flash 来模拟 EEPROM 的应用原理和软件使用方 法。 支持型号列表: 支持型号 AT32F403xx AT32F413xx AT32F415xx AT32F403Axx AT32F407xx

EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

EEPROM Emulation

2019.09.17 第 1 页 版本 1.0.1

www.arterytek.com

AN0002

应用笔记

EEPROM Emulation

前言

当前诸多嵌入式应用场景都需要用到 EEPROM 作为非易失性的数据存储设备。出于客户低成本的考

虑,AT32 系列部分型号的 MCU 并未搭载片上 EEPROM,但是在此我们将介绍一种使用片上 Flash

来模拟 EEPROM 使用的方法,以作为对此应用需求的补充。

本文档将详细阐述在 AT32 系列 MCU 上使用片上 Flash 来模拟 EEPROM 的应用原理和软件使用方

法。

支持型号列表:

支持型号

AT32F403xx

AT32F413xx

AT32F415xx

AT32F403Axx

AT32F407xx

Page 2: EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

EEPROM Emulation

2019.09.17 第 2 页 版本 1.0.1

www.arterytek.com

目录

1 应用原理 .................................................................................................................. 5

Flash 与 EEPROM 的不同 ........................................................................................ 5

Flash 模拟 EEPROM 原理 ........................................................................................ 5

Page 状态机制 .............................................................................................................. 5

数据存储方式 ................................................................................................................ 6

数据流 ........................................................................................................................... 6

2 使用方法 .................................................................................................................. 8

3 注意事项 ................................................................................................................ 10

4 版本历史 ................................................................................................................. 11

Page 3: EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

EEPROM Emulation

2019.09.17 第 3 页 版本 1.0.1

www.arterytek.com

表目录

表 1. 文档版本历史 ............................................................................................................................ 11

Page 4: EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

EEPROM Emulation

2019.09.17 第 4 页 版本 1.0.1

www.arterytek.com

图目录

图 1. 外部低速时钟源的交流时序图..................................................................................................... 5

图 2. Page Status 状态转换流程 .......................................................................................................... 6

图 3. 参数存储格式 .............................................................................................................................. 6

图 4. 示例数据流 .................................................................................................................................. 7

图 5. 状态初始化机制 .......................................................................................................................... 8

图 6. 参数写入流程 .............................................................................................................................. 9

图 7. 工程配置 ................................................................................................................................... 10

Page 5: EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

EEPROM Emulation

2019.09.17 第 5 页 版本 1.0.1

www.arterytek.com

1 应用原理

Flash 与 EEPROM 的不同

以应用的角度来看,Flash 和 EEPROM 最大的不同在于以下两点:

a) EEPROM可以按位(实际应用通常按字节)擦写,Flash需按页进行擦除。

b) Flash的页擦除寿命周期大概是10000次,EEPROM的擦除寿命周期更优。

针对以上两个大的不同点进行分析,取 EEPROM 易于擦写和高擦写寿命周期的特点来对 Flash 中的

存储流程进行优化,以达到 Flash 模拟 EEPROM 的目的。

Flash 模拟 EEPROM 原理

Flash 模拟 EEPROM 的方案综合考虑了操作 Flash 的限制和要求。根据工程应用中 Flash 空间的使

用情况和 MCU Chip 型号的不同,在片上 Flash 中找到至少两个 Page 大小的 Flash 未使用区域(地

址应 Page 对齐)作为数据的交换存储区,各 Page 存储区按 Page 状态机制进行交替使用,构建的

大致模型如下:

图 1. 外部低速时钟源的交流时序图

在初始化流程中,其中一个 Page 在擦除后设定为 VAILD_PAGE 状态,表示当前使用此 Page 进行

数据的存取,可以顺序的对 Data 区进行操作,另一个 Page 一直准备着,在之前的 Page 被数据填

充满时进行接替使用。

Page 状态机制

每个 Page 有以下三种可能的状态:

ERASED:空页

RECEIVE_DATA:此Page正在接收从其他已被填满Page传过来的数据

VALID_PAGE:此Page包含了有效数据,且在未将所有有效数据传送到ERASED Page之前,

此页的Page Status不能改变。

以下是 Page Status 的转换流程

Page0 Page1

DataTransfer

Page Status Page Status

Data DataPageSize

2Bytes

Page 6: EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

EEPROM Emulation

2019.09.17 第 6 页 版本 1.0.1

www.arterytek.com

图 2. Page Status 状态转换流程

本案例按两个 Page 进行流程说明:

a) 在未Flash模拟EEPROM使用过的前提下,程序一开始会将Page0和Page1都进行擦除,并将

Page0的Page Status设为VALID_PAGE,Page1的Page Status设为ERASED。需要写入的数据

经过处理都挨个字节的写入到Page0的Data区域。

b) 当Page0写满,则将Page1的Page Status由ERASED改为RECEIVE_DATA。此时将Page0中存

储的有效信息(注:因数据存储特点,此有效信息的大小只可能小于等于Data区域大小)转存

入到Page1,Page1接收完成并修改Page Status为VAILD。

c) Page0擦除并改Page Status为ERASED。需要继续写入的数据经过处理都挨个字节的写入到

Page1的Data空闲区域。

d) 当Page1写满,以流程b)类似的方式转存有效数据到Page0,并以此流程循环操作。

数据存储方式

每一个变量数据被存入到模拟 EEPROM 会打包成一种数据存储结构再被整体写入,此存储结构由虚

拟的 EEPROM 地址和需要存储的变量组成(由软件定义虚拟地址和变量都是 unsigned short int 类

型)。在 Flash 模拟 EEPROM 的存储区域内,想要更新或读取模拟 EEPROM 对应地址的数据时,

只能从前往后或从后往前按地址顺序进行,更新数据是按地址从前往后找到当前 Page 的空闲存储区

域时写入,当数据读取时从 Page 末尾开始从后往前查找到第一个(即最后一次更新写入)虚拟

EEPROM 地址对应的数据。每个参数的存储结构及存储方式如下图:

图 3. 参数存储格式

数据流

以下将以管理三个参数进行流程图示例,设定其 EEPROM 虚拟地址(Var1:0x5555,Var2:

0x6666,Var3:0x7777),数据流如下图所示:

Page 7: EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

EEPROM Emulation

2019.09.17 第 7 页 版本 1.0.1

www.arterytek.com

图 4. 示例数据流

Page 8: EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

EEPROM Emulation

2019.09.17 第 8 页 版本 1.0.1

www.arterytek.com

2 使用方法 这个章节将描述 Flash 模拟 EEPROM 的驱动实现,Demo Code 可参考

SourceCcode\EEPROM_16bit_dataWithAddress。Demo 示例的是使用 Flash 模拟 EEPROM 进行

三个变量的存储管理,其变量的虚拟地址被定义在 main.c 的 VirtAddVarTab 数组中。

Flash 模拟 EEPROM 的驱动介绍,驱动函数实现主要在 eeprom.c 文件中,其 API 接口函数描述如

下:

EE_Init()

这是模拟 EEPROM 的初始化函数接口。其功能主要是通过指定 Page 的 Page Status 进行状态及数

据的初始化工作。如在未曾使用过模拟 EEPROM 的区域进行初始的默认配置或者由于非正常操作下

造成 Page Status 丢失或损毁时,初始化函数会使用其恢复机制将 Page Status 切换到可以正常使用

的情况。其处理机制如下:

图 5. 状态初始化机制

EE_Format()

这是模拟 EEPROM 的格式化函数接口。其会将 Page0 和 Page1 数据擦除,并将指定 Page0 的

Page Status 为 VALID_PAGE。

EE_FindValidPage()

此函数的功能是读取 Page0 和 Page1 的 Page Status,并通过传入的参数

(READ_FROM_VALID_PAGE、WRITE_IN_VALID_PAGE)是读操作或是写操作进行判别哪个

Page 目前处于此操作的处理 Page。

EE_VerifyPageFullWriteVariable()

这是用户对模拟 EEPROM 进行数据写入操作的 API 接口,此函数会将传入的虚拟地址和数据参数整

合成一个存储结构,自动去查找到相应的 ValidPage,并从当前的 ValidPage 中查找到空闲区域地址

和写入数据。如果当前 Page 已满则返回 PAGE_FULL,如果写入成功则返回

FLASH_COMPLETE。

EE_ReadVariable()

这是模拟 EEPROM 的数据读函数接口。按传入的虚拟地址去索引到最后写入的数据。

EE_PageTransfer()

这是模拟 EEPROM 进行有效数据搬运的函数接口。首先将查找到相应的 ValidPage(已填满),改

空闲页的状态为 RECEIVE_DATA,并按管理的虚拟地址表,依次将最新的有效数据搬运到空闲页,

搬运完成后,改空闲页的状态为 VALID_PAGE,并将 VaildPage(已填满)进行擦除且修改状态为

ERASED。

Page 9: EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

EEPROM Emulation

2019.09.17 第 9 页 版本 1.0.1

www.arterytek.com

EE_WriteVariable()

此为真正的将数据写入 Flash 的函数接口。EE_VerifyPageFullWriteVariable 函数和

EE_PageTransfer 函数都是通过它进行 Flash 写操作。

以上就是驱动部分的功能接口的描述。对于向 Flash 模拟 EEPROM 写入一个参数其完整的软件流程

及接口函数调用如下图所示:

图 6. 参数写入流程

Page 10: EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

EEPROM Emulation

2019.09.17 第 10 页 版本 1.0.1

www.arterytek.com

3 注意事项 本文档介绍了一种对参数型数据进行优化管理的办法和原理,摒除了小数据量存储 Flash 的复杂操作

流程,但此模型对大数据量和 Flash 任意地址读写的需求还未能实现。如有较大数据或任意 Flash 地

址访问的需求,我们也提供了一份 Demo,请参考

SourceCcode\EEPROM_block_dataWithoutAddress。此中我们实现并完善了 Flash 操作的复杂流

程,留给用户方便简洁的接口调用。

在 AT32 系列 MCU 上实现 Flash 模拟 EEPROM 的应用时请注意以下几点:

(一) 虚拟地址的管理

从前文可知,此模型存储的数据和虚拟地址是相对应和匹配的,故虚拟地址管理不当易造成数据出

错。请注意 main.c 文件中的 VirtAddVarTab[]数组里的地址个数一定要和 eeprom.h 文件定义的

NumbOfVar 数值匹配。

NumbOfVar /* Variables' number. max value is 256 for 1KByte page, max value is 512 for 2KByte page */ #define NumbOfVar ((uint8_t)0x03) VirtAddVarTab[] /* Virtual address defined by the user: 0xFFFF value is prohibited */ uint16_t VirtAddVarTab[NumbOfVar] = {0x1111, 0x2222, 0x3333};

(二) Page地址对齐

为了更好在 Flash 中更好的达到 EEPROM 高擦除寿命的特定和便于存储区的管理。在指定存储页地

址时,此地址应 Flash Page Size 对齐。

(三) 存储区域跨Bank使用

因 AT32 系列 MCU 有 Flash 大小不同的型号,在型号上现有高容量型号 AT32F4xx_XL 和中容量型

号 AT32F4xx_HD 之分,高容量型号同时存在 Bank1 和 Bank2(地址及 Bank 数请详细查看

RM_AT32F4xx.pdf),如在高容量 MCU 上进行跨 Bank 地址操作时应注意在工程配置中进行准确的

型号定义,如下图:

图 7. 工程配置

Page 11: EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

EEPROM Emulation

2019.9.17 第 11 页 版本 1.0.1

www.arterytek.com

4 版本历史

表 1. 文档版本历史

日期 版本 变更

2018.12.14 1.0.0 最初版本

2019.9.17 1.0.1 Libraries 更新为 1.1.5

Page 12: EEPROM Emulationatkap.arterytek.com/download/AN0002_EEPROM_Emulation_ZH... · 2020. 5. 21. · EEPROM Emulation 2019.09.17 第5页 版本1.0.1 1 应用原理 Flash 与EEPROM的不同

EEPROM Emulation

2019.9.17 第 12 页 版本 1.0.1

www.arterytek.com

重要通知 - 请仔细阅读

买方自行负责对本文所述雅特力产品和服务的选择和使用,雅特力概不承担与选择或使用本文所述雅特力产品和服务相关的任何责任。

无论之前是否有过任何形式的表示,本文档不以任何方式对任何知识产权进行任何明示或默示的授权或许可。如果本文档任何部分涉及任何

第三方产品或服务,不应被视为雅特力授权使用此类第三方产品或服务,或许可其中的任何知识产权,或者被视为涉及以任何方式使用任何

此类第三方产品或服务或其中任何知识产权的保证。

除非在雅特力的销售条款中另有说明,否则,雅特力对雅特力产品的使用和/或销售不做任何明示或默示的保证,包括但不限于有关适销性、

适合特定用途(及其依据任何司法管辖区的法律的对应情况),或侵犯任何专利、版权或其他知识产权的默示保证。

雅特力产品并非设计或专门用于下列用途的产品:(A) 对安全性有特别要求的应用,如:生命支持、主动植入设备或对产品功能安全有要求

的系统;(B) 航空应用;(C) 汽车应用或汽车环境;(D) 航天应用或航天环境,且/或(E) 武器。因雅特力产品不是为前述应用设计的,而采

购商擅自将其用于前述应用,即使采购商向雅特力发出了书面通知,风险由购买者单独承担,并且独力负责在此类相关使用中满足所有法律

和法规要求。

经销的雅特力产品如有不同于本文档中提出的声明和/或技术特点的规定,将立即导致雅特力针对本文所述雅特力产品或服务授予的任何保证

失效,并且不应以任何形式造成或扩大雅特力的任何责任。

© 2020 雅特力科技 (重庆) 有限公司 保留所有权利