


>>>>>>>>>>返回专栏总目录《AUTOSAR从入门到精通专栏》<<<<<<<<<<
关注文章末尾公众号或微信中搜索“AUTOSAR解忧杂货铺”,后台发送“资料”领取汽车电子入门资料,发送“加群”加入汽车电子交流群
一、Fee简介
在AUTOSAR的存储架构中,FEE(Flash EEPROM Emulation) 位于 ECU抽象层(ECU Abstraction Layer),是连接上层NVRAM管理器(NvM)与底层Flash驱动(Fls)的核心模块。主要作用是模拟 EEPROM 的行为,通过管理 DFLASH 区域的存储块,实现数据的高效存储和擦写操作,确保数据的完整性和可靠性,同时延长 Flash 的使用寿命。解决Flash物理特性(需先擦除后写入、块擦除寿命有限)与汽车数据频繁小粒度更新的矛盾,如下图所示
二、页、扇区、块
接下来让我对页、扇区和块有一个初步的了解。
-
Page:DFLASH最小编程单元,大小为8Byte。意味着即使只想写入1一个字节的数据,也会将对应的8字节数据重新写入。这就要求Fee软件层需要先读取出相应Page的数据,修改其中的1个字节,再将8Byte写入。
-
Logical Section:逻辑扇区,擦除的最小单元,由若干个Page构成,配置成2K,就相当于一次擦除最少擦除2K大小。
-
Physical Section:物理扇区,由多个逻辑扇区组成。
-
Data Flash:可以由多个物理扇区组成,我们也称物理扇区为BANK。
-
Block:块,软件意义上的定义。
数据最终会写入到物理扇区中。一个物理扇区写满后,就需要新的物理扇区来继续写入数据。然而,物理扇区的数量是有限的,不能无限增加新的 BANK。此外,对于同一个数据的多次写入,程序实际上只关心最后一次写入的有效性。因此,如何有效擦除无用数据并循环使用物理扇区成为解决问题的关键,这正是 FEE 换页机制的核心所在。
三、换页机制
1、换页由来
采用换页而不是覆盖有以下几点原因:
-
首先,擦除的最小单元是逻辑扇区,而写入的最小单元是 Page。逻辑扇区比 Page 大很多。如果采用覆盖方式,意味着这个逻辑扇区中只能存在这一个 BLOCK,以避免擦除时将其他 BLOCK 的数据擦除掉。这会造成大量的空间浪费。
-
其次,Data Flash 的擦除寿命有限频繁的擦除会减少 D-FLASH 的使用寿命。
-
最后,擦除是最耗时的操作,每次 BLOCK 写入都要擦除原有数据再写入,会让效率非常低。
- 第一次写入BLOCK1,Block 1 地址状态为有效
- 第一次写入BLOCK2,Block 2 地址状态为有效
- 第二次写入BLOCK1,将第一次写入的Block 1的地址状态置为无效,同时第二次写入的地址是有效。
- 当APP请求读取BLOCK1的数据时,只会读取地址有效的数据。
因此,如果针对同一个BLOCK数据多次写入,并不是将原来的内容覆盖,而是在扇区中写入新的数据,而将老的数据置为无效。
2、换页概念
换页机制可能针对不同的芯片,有一些区别,但是大体原理都是一样,Fee(Flash EEPROM Emulation)模块通过对 Flash 空间整体划分为两个逻辑 Sector(逻辑扇区)来管理数据存储。这两个逻辑 Sector 中,一个作为 Active Sector(活动扇区),另一个作为 Inactive Sector(非活动扇区)。这两个 Sector 可以由一个或多个物理 Sector(物理扇区)组成。
在任意时间,只能有一个逻辑 Sector 作为 Active Sector。只有当 Active Sector 需要写入下一个 Block,或者达到配置的剩余空间时,才会进行翻页操作。
3、换页机制(Bank Swap)
AUTOSAR FLS/FEE的实现策略采用新增而非覆盖的方式,随着数据写入次数增多,当前物理扇区终将写满,需要新物理扇区,但物理扇区数量有限,不能一直有新BANK。同时,针对同一BLOCK多次写入时,对程序有用的数据只有最后一次,所以如何擦除无用数据并循环使用物理扇区是关键,这就引出了FEE/FLS换页机制(Bank Swap),如下图所示
- 将所有有效数据拷贝到新的Bank
- 将原来Bank 整体擦除
- 将擦除的Bank 作为新的Bank 供下一次换页使用
Tip📌: 这是2个BANK的换页策略, 理论上可以有N个BANK,不过换页机制大体相近
在换页过程中,新的 BLOCK 写入请求的处理方式取决于请求的类型。具体来说,BLOCK 写入请求分为两种类型:
- Immediate :对于 Immediate 写入请求,需要立即处理,打断当前的擦除动作,将新的数据写入到新的 Bank 中(某些 FEE Driver 可能会写入到“第三块 BANK”)。原则上,对于 Immediate 写入请求,数据不需要等待换页完成即可写入。
- Normal:对于 Normal 写入请求,则需要等待换页过程完成之后才能进行写入,因此可能出现 BLOCK 写入时间较长的情况,在设计时需要考虑到这一点。
在 NvM Block 的配置中,如果 Priority 被设置为 0,则该 BLOCK 的请求会被视为 Immediate 请求,否则则为 Normal 请求。
四、总结
FEE(Flash EEPROM Emulation)作为 AUTOSAR 存储模块的核心软件层,负责管理 DFLASH(数据闪存)区域,需考虑 FLASH 使用寿命、BLOCK 稳定写入、换页时长、启动换页阈值、BANK 大小等关键功能设计,以确保数据存储的可靠性、安全性和高效性。