这目录
- 1. FEE原理
- 2.EB配置以及接口应用
- 3.总结
1. FEE原理
在Fls解析文章中介绍了Flash与EEPROM储存器的区别,本文将介绍FEE具体实现原理。
FEE模块,全称Flash EEPROM Emulation Module,旨在使用Flash模拟EEPROM以增加使用寿命。
术语解释
page:Flash最小读写单元,TC3xx系列一般为8byte
logic Section(Block):由若干个page组成的块,Flash擦除的最小单位,TC3xx系列一般为2K或4K
Physical Section(Bank):由若干个块组成的单元,自定义大小
DFlash:若干个Bank组成整个DFLASH储存器
其关系如下图所示
- Flash模拟EEPROM
Flash与EEPROM的主要区别在于EEPROM支持按字节读写,但是Flash最小只能按页读写,这在硬件上已经确定了。那为什么还要说模拟EEPROM呢,我的理解是模拟的EEPROM实际上是模拟EEPROM做内存管理机制,以提高储存空间的使用率以及寿命。为了实现上述目标,衍生处理以下两个机制
1.数据块标识机制:牺牲部分logic Section中的空间用于标识数据状态,以便进行数据管理
其中,每次向logic Section(Block)中存储数据段时,并不会覆盖之前的数据,因为对于已有数据的内存块写数据需要先擦除。旧数据与新数据均保留在同一个logic Section(Block)中,为了避免混淆,对每个数据段都做标识旧数据设置为Invaild新数据设置为Vaild,读取只读取Vaild数据,这样就只剩下一个问题,那就是如何清除旧数据。
链接: 如何将Flash模拟成EEPROM (EEPROM Emulation)
2.换页机制(GC):
换页机制的目的有两个,1.保证总能由新的块以供使用 2.清楚多余旧数据
其步骤为:
1.将写满数据的的扇区copy至新的扇区,只copy标记为Vaild的数据段;
2.将旧扇区整块擦除
3.如此循环往复
至此,原来我们想要修改储存在flash中的某个数据段需要将整个块擦除在写入新数据,费事且会造成部分块频繁擦写提前损坏;而采用FEE则解决了上述问题,极大延长了Flash的使用寿命。
2.EB配置以及接口应用
EB配置步骤
1.通过Fls配置扇区
2.FEE设置
2.FEE配置数据块信息
1.通过Fls配置扇区
2.FEE设置
2.FEE配置数据块信息
接口函数调用步骤
1.Fee_MainFunction();将FEEmainfunc放置所需task
2. Fee_Write( );Fee_Read();Fee_GetStatus();Fee_GetJobResult();
接口名 | 传入参数 | 说明 | 返回参数 | 说明 |
---|---|---|---|---|
Fee_Write( ) | uint16 BlockNumber;uint8 * DataBufferPtr | FEE block id;待写入数据buffer指针 | Std_ReturnType | 执行状态 (0 ok ;1 not ok) |
Fee_Read() | uint16 BlockNumber;uint16 BlockOffset;uint8 * DataBufferPtr;uint16 Length | FEE block id;读取数据偏移值;读取数据buffer指针;数据长度 | Std_ReturnType | 执行状态 (0 ok ;1 not ok) |
3.总结
本文为博主个人学习总结记录,如有不正,欢迎指正