什么,恩智浦的flash模拟EEP是这么玩的?

2022-01-11 09:00:00 浏览数 (1)

摘要

本篇笔记主要记录基于恩智浦MPC5744P的Flash模拟EEPROM存储参数和数据的算法,对官方给出的方案深入学习,并可以添加一些扩展内容。

准备工作

  1. 安装S32DS for PA, 因为我们在S32DS下开发MPC5744P。
  2. 安装S32DS 的SDK, 我们使用最新版3.0.3

EEPROM

EEPROM (electrically erasable programmable read only memory)

因为我们的板卡没有外部EEPROM,必须使用内部Flash来模拟, MPC5744P有内部DFlash 可以用来模拟EEPROM,计划分为四部分来存储设计,1,系统参数,2,标定参数,3,历史记录,4,故障记录

MPC5744P 片上可以用来模拟EEPROM 的地址范围如下图所示,总共96Kb,可以供我们使用。注意表黄色部分取值范围。

使用Flash模拟EEPROM,主要有两个问题,

  1. 更新数据必须按块擦除。
  2. 数据不能频繁更新。

但是NXP提供一种算法可以解决这个问题,在flash里建立一种类似于文件系统的记录来解决这种问题。

如果数据长度是固定长度的则上方右图变形为下图

这种记录算法简单说明如下

MPC5744P这种类似于文件系统的记录结构如下

包含两部分,Metadata Segment 和Data Segment 。

这里还要注意一下ECC

更新和追加数据

追加和更新数据记录可以分四步完成

  1. 将记录状态写为无效$invalid
  2. 写入ID和大小
  3. 写入其余数据
  4. 将记录状态更改为有效$valid.

记录状态有以下几种取值。$empty为擦除后的状态。

这里给出一个例子说明记录。

读取记录

这里主要是查找记录实现,需要找到要读取的记录数据,通过查找算法,寻找到ID符合并且是最近的一次有效记录,因为可能存在多个同一ID的数据,需要找到最新的。

寿命计算

可以使用官方工具进行设计的计算,可以根据自己的实际配置参数进行计算评估,如果是绿色就证明合理,如果报红色就证明不合理,需要调整。

总结

该算法是NXP的专利,可以在NXP的片子上使用,巧妙的解决了Flash存储的问题,并且解决了寿命的问题。利用数据记录这种类似文件系统的格式,其中还设计到记录的查找算法,分固定长度和变长度。

0 人点赞