AUTOSAR Memory Stack(内存/存储栈)
在车载 ECU 中,需要将标定参数、故障信息、里程、配置等数据持久化(断电不丢失),同时需要高效的读写,AUTOSAR 提供了完整的内存(存储)栈。它分为面向数据管理和面向底层硬件访问的层级。
5.1 存储栈分层
┌──────────────────────────────────────────────────────┐
│ NvM(非易失存储管理) │ 上层抽象,管理多个 NvM Block
├──────────────────────────────────────────────────────┤
│ Fee(Flash EEPROM Emulation,Flash模拟 EEPROM)│ FEE 层,更高效的 Flash 管理
├──────────────────────────────────────────────────────┤
│ EA(EEPROM Abstraction,EEPROM抽象层) │ 针对外部 EEPROM 的抽象
├──────────────────────────────────────────────────────┤
│ MemAcc(Memory Access,内存访问接口) │ 内存访问抽象(Flash/EEPROM)
├──────────────────────────────────────────────────────┤
│ Fls(内部 Flash 驱动) / Ea(外部 EEPROM 驱动) │ MCAL 层驱动
└──────────────────────────────────────────────────────┘
各层职责
- NvM(Non-Volatile RAM Manager):最高层。
- 管理一组 NvM Block(每个 block 是一个独立的数据单元,如"标定块"“DTC 块”);
- 提供
NvM_WriteBlock、NvM_ReadBlock、NvM_EraseBlock、NvM_ReadAll、NvM_WriteAll等 API; - 负责数据的校验(CRC/Checksum)、数据冗余(双份防损)、损坏恢复;
- 与 RTE 交互:将应用 SWC 的数据持久化。
- Fee(Flash EEPROM Emulation):
- 基于擦写寿命有限的 Flash来仿真 EEPROM(解决"NOR Flash 擦除/写入寿命约 10万次,不能随意擦写"的问题);
- 以区块为粒度,动态更新数据,减少擦除次数("写新块 + 擦旧块")。
- Ea(外部/EEPROM 抽象):面向外部串行/并行 EEPROM,提供更接近实际 EEPROM 的读取擦写。
- MemAcc:内存访问的"中间件",统一调接口。
- Fls(内部 Flash)、Ea(外部 EEPROM):MCAL 层的直接驱动。
5.2 NvM 数据结构与概念
- Nv Block(NvM Block):一段要持久化的数据块,每个 block 有:
- 长度(Length)、数据块地址;
- CRC(校验),写入时计算,读取时校验;
- block 在 Flash 中的定位(通过 FEE 逻辑地址映射);
- 冗余/镜像(Double block / Mirror block):确保写坏时能恢复备份。
- 一次性块 / 多块:NvM 支持一次性块(Single Block)、双块(Double Block 双实例/双份备份)、镜像块。
- 回调:异步读写完成后通过回调(如
NvM_ReadBlockDone)通知上层。
数据流程(以一个例子):
- 应用/标定 SWC 调用
Rte或NvM 写函数 → NvM 发起写请求。 - NvM 计算 CRC,通过 MemAcc 调用 Fls/Ea 写 Flash/EEPROM。
- 写完成通知(回调用),数据保留。
5.3 为什么需要 FEE(而不是直接操作 Flash)
- Flash 的最小擦除单位是扇区(Sector),而写入是按字节/字,经常需要"read-modify-write"(读-改-写)。
- FEE 层引入"代码块/卷"概念,将数据写入新位置,通过索引管理数据位置,避免频繁擦除。
- 由于 Flash 的写寿命(约 10 万次/扇区),需要磨损均衡(动态、静态)算法延长寿命。
典型参数:MCU 内部 Flash(Fls)的 Every;参数较多时可把参数放在内部 Flash、记录数据放外部 EEPROM(Ea 使用)等。
5.4 与 RTE / App 的集成
- 应用层数据通过 RTE(MemIf/NvM)相关的 API(如
Rte_Call_NvM_WriteBlock)访问。 - 标定软件(CANape/Cruiser)通过 XCP 直接读取/写入 ECU RAM or Flash 中的标定。
其它存储相关内容
- Flash 校验:为防刷写错误,通常包含 bootloader 校验(CRC)和监控,MCU 校验失败会回退/拒绝。
- EPPROM/EOL:产线(EOL)阶段会通过诊断写入标定与配置数据,利用 Dcm+ NvM。
小结
内存栈通过 NvM→Fee/Ea→MemAcc→Fls/Ea 提供一致且可靠的非易失存储。核心思想是"用 FEE 在 Flash 上模拟 EEPROM",解决擦除寿命问题。数据块都有 CRC 和冗余备份保证可靠性。下一部分了解 RTE。

浙公网安备 33010602011771号