摘要
本篇笔记主要记录基于恩智浦MPC5744P的Flash模拟EEPROM存储参数和数据的算法,对官方给出的方案深入学习,并可以添加一些扩展内容。
准备工作
- 安装S32DS for PA, 因为我们在S32DS下开发MPC5744P。
- 安装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,主要有两个问题,
- 更新数据必须按块擦除。
- 数据不能频繁更新。
但是NXP提供一种算法可以解决这个问题,在flash里建立一种类似于文件系统的记录来解决这种问题。
如果数据长度是固定长度的则上方右图变形为下图
这种记录算法简单说明如下
MPC5744P这种类似于文件系统的记录结构如下
包含两部分,Metadata Segment 和Data Segment 。
这里还要注意一下ECC
更新和追加数据
追加和更新数据记录可以分四步完成
- 将记录状态写为无效$invalid
- 写入ID和大小
- 写入其余数据
- 将记录状态更改为有效$valid.
记录状态有以下几种取值。$empty为擦除后的状态。
这里给出一个例子说明记录。
读取记录
这里主要是查找记录实现,需要找到要读取的记录数据,通过查找算法,寻找到ID符合并且是最近的一次有效记录,因为可能存在多个同一ID的数据,需要找到最新的。
寿命计算
可以使用官方工具进行设计的计算,可以根据自己的实际配置参数进行计算评估,如果是绿色就证明合理,如果报红色就证明不合理,需要调整。
总结
该算法是NXP的专利,可以在NXP的片子上使用,巧妙的解决了Flash存储的问题,并且解决了寿命的问题。利用数据记录这种类似文件系统的格式,其中还设计到记录的查找算法,分固定长度和变长度。