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_WriteBlockNvM_ReadBlockNvM_EraseBlockNvM_ReadAllNvM_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)通知上层。

数据流程(以一个例子):

  1. 应用/标定 SWC 调用 Rte 或NvM 写函数 → NvM 发起写请求。
  2. NvM 计算 CRC,通过 MemAcc 调用 Fls/Ea 写 Flash/EEPROM。
  3. 写完成通知(回调用),数据保留。

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

posted @ 2026-08-02 18:56  mengjie_9  阅读(2)  评论(0)    收藏  举报