12.AUTOSAR 存储栈分析(一)--NvM

目录

1.概述

2.NVRAM Manager

2.1 功能描述

2.2 Block描述

2.3 NvM的使用场景

3.小结


1.概述

AUTOSAR 存储栈主要是用于管理EEPROM和Flash EEPROM中的非易失性数据,根据汽车运行环境保证数据能够被完整存储和保持。

整个存储栈结构如红框所示:

 服务层为NvM,硬件抽象层为MemIf、Fee、Ea、MemAcc,驱动层为Fls、Mem等等。

需要注意的是,AUOTSAR对于这个栈的使用限制在如下三种存储介质:

  • DFlash(芯片内部eFlash模拟EEPROM以节省成本)
  • 外部Flash
  • EEPROM

当我们使用DFlash进行存储时,FlashDriver仅仅用于Flash EEPROM Emulation模块存储数据,至于更新程序代码到Flash中,则不在当前存储栈的考虑范围之内。

因此模块间调用就有如下示意:

 那么我们通常会在存储栈里配置哪些数据的存储?根据之前开发经验,可总结为如下几类:

  1. DEM相关数据
  2. EOL相关数据
  3. 用户自定义一些调试开关数据
  4. 汽车相关DID,例如里程、车型、ECU版本等

通常我们会拿DFlash全部做EEPROM 模拟,因此标定数据我们通常是存在PFlash。 

2.NVRAM Manager

2.1 功能描述

NvM作为存储栈对外接口与SWC或者其他BSW模块进行交互,该模块提供了如下关于memory处理的服务:

  1. Read
  2. Erase
  3. Write
  4. Validation
  5. Report Status
  6. ....

 而这些服务请求又分为同步和异步,所以在AUTOSAR关于NvM API描述时也是专门做了分类,如下:

可以看到,在memory请求里不管是读写擦都是对于Block进行处理,因此我们来看NvM视角下的Block具体长什么样。

2.2 Block描述

在AUTOSAR标准中,NvM Block总共分为4种类型Nv Block、RAM Block、ROM Block和Administrative Block,如下图

  • Nv Block是Nv Memory(EEPROM、Flash)的抽象,可以选择添加Header和CRC,存储在NvM中;
  • Ram blok是Nv Block在ram中的一个映射,属于基本存储对象,可以选择添加Header和CRC(与NvBlock对应)。它有三种选择1(NV BLCOK):1(RAM BLOCK)、1:2、1:n(Dataset,类似数组);
  • Admin Block用于保存NVRAM Block的属性、错误和状态,包含与数据集 NV 块相关联的块索引等,它分配在ram中,它本身对应用不可见,仅由NvM模块用于Ram block和nv Block本身的安全管理;
  • ROM BLOCK也是一个基本存储对象,保留在 ROM (FLASH) 中,用于在 NV 块为空或损坏的情况下提供默认数据。

 NvBlock和RAM Block可以看做是NvM和RAM的一一映射,可以理解如下示意图:

 从实际代码也可以看出如上结构:

我们在实际配置中可以根据芯片的ram大小做选择,通常情况都是关键的Block选择Redundant,Dataset用到比较少。

2.3 NvM的使用场景

 1.启动阶段

启动阶段,BswM会调用自定义NvMReadAll接口去读取关键Block的数据到RAM Block,完成初始化。当然如果对启动时间要求不高,NvMReadAll等待下层mainfunction运行完毕即可。

2.下电阶段

这个阶段,很明显就是要存储数据了,BswM调用接口NvM_WriteAll

3.运行阶段

在运行阶段,NVM通常需要提供各种服务接口给SWC或者BSW其他模块,例如DEM等。因此在做RTE设计时,NvM相关接口一般都是C/S类型,可以提供读写擦、获取错误状态等服务。如下图:

3.小结

本文主要讲NvM的基本概念,其实从原理上理解起来不是很难,主要是搞清楚RAM Block几种类型,难点在于真正开发的时候搞懂NvM运行机制,

例如立即存储和下电存储之间有没有区别?

NvM memory request是用什么样的机制,在代码中每一层的mainfunction如何使用?

在上电NvM_ReadAll速度太慢,影响启动时间该如何处理。

我们在后面一章节会继续讲解。

  • 24
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CyberSecurity_zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值