文章目录
没有磨损均衡的EEPROM模拟,如同在沙地上建造城堡 ——AUTOSAR存储系统设计箴言
1. FEE模块的核心挑战
在嵌入式系统中,非易失性数据存储常面临两个关键挑战:
- Flash存储器的物理限制:每个Flash扇区(Page)仅有有限的擦写寿命(通常1万~10万次)
- EEPROM行为模拟:需要实现按地址更新数据,而非整块擦除
FEE(Flash EEPROM Emulation)模块正是为解决这些矛盾而生。其设计精髓在于:
- 通过虚拟地址(Virtual Address)抽象物理存储位置
- 采用双页轮换实现写操作的原子性
- 通过状态机机制确保意外断电时的数据一致性
2. 换页机制底层原理
2.1 物理存储结构
+----------------+ +----------------+
| Active Page | | Backup Page |
| [Page N] |<--->|[Page N+1] |
|----------------| |----------------|
| Block 0: HEADER| | Block 0: HEADER|
| Block 1: DATA A| | Block 1: EMPTY |
| Block 2: DATA B| | ... |
| ... | +----------------+
+----------------+
物理特征:
- 每个Page划分为固定大小的数据块(Blocks)
- 块头包含:块状态(Active/Erased/Invalid)、虚拟地址、数据校验值
- 两个物理Page组成一个逻辑单元(Instance)
2.2 关键状态转换
2.3 磨损均衡算法
FEE采用动态地址映射实现被动均衡:
写操作次数统计:
Page0: ██████████ 12000次
Page1: ████ 4000次 --> 下次优先选择Page1
3. 换页机制实现逻辑
3.1 写操作流程
1. 查找可用块:在Active Page中顺序查找第一个ERASED块
2. 写入数据:在目标块写入新数据并标记为ACTIVE
3. 更新地址映射:记录虚拟地址到新物理块的映射
4. 无效化旧块:将原数据块标记为INVALID
3.2 换页触发条件
当Active Page的可用空间不足时触发换页:
if (active_page_free_blocks < THRESHOLD) {
initi