ST官方模拟EEPROM模块的使用

2019-05-05  本文已影响0人  tianxiaoMCU

原项目使用了一颗AT24C02来存储系统配置参数,为了降低成本,需要把这颗料砍掉,将配置参数保存到MCU内部的Flash上。这个改动其实简单,也就是读写内部flash而已,但是如果需要考虑擦写平衡这些特性,自己写就比较麻烦。而ST官方提供了一个使用内部Flash模拟EEPROM的模块,叫X-CUBE-EEPROM,包括了这些特性,实用性更强。
下面是从‘EEPROM emulation in STM32L4 series microcontrollers' (AN4894)中摘抄的特性介绍,更详细的说明还是看文档吧:

  • Lightweight implementation and reduced footprint
  • Simple API that consists of a few functions to format, initialize, read and write data, and clean up Flash memory pages
  • At least two Flash memory pages to be used for internal data management
  • Clean-up simplified for the user (background page erase)
  • Wear leveling algorithm to increase emulated EEPROM cycling capability
  • Robust against asynchronous resets and power failures.

轻量级其实是相对的,对于最简单擦写,1个page就可以了,比这个还轻量。使用这个模块看重无非是最后两点,毕竟Flash和EEPROM的特性是不一样的。

EEPROM_Emul的结构

EEPROM_Emul还是挺轻量的,没几个文件,就两部分核心实现和flash接口。使用前还需要做些额外的工作:

EEPROM_Emul的配置

在AN4894文档的4.1.3节详细介绍了eeprom_emul_conf.h中各个宏。

这里我只改动NB_OF_VARIABLES和START_PAGE_ADDRESS。
#define PAGES_NUMBER            (((((NB_OF_VARIABLES + NB_MAX_ELEMENTS_BY_PAGE) / NB_MAX_ELEMENTS_BY_PAGE) * 2U) * CYCLES_NUMBER) + GUARD_PAGES_NUMBER)

表示共使用了多少个PAGE来模拟EEPROM,它的值取决于配置和移植的多个宏。所以在配置好除START_PAGE_ADDRESS外的宏后,根据配置去计算PAGES_NUMBER的值。START_PAGE_ADDRESS到flash结尾的空间必须 ≥ (PAGES_NUMBERPAGE_SIZE),否则在初始化时会出现Hardfault。*

EEPROM_Emul的使用
上一篇 下一篇

猜你喜欢

热点阅读