• 416查看
  • 0回复

[Autosar] AUTOSAR 存储栈分析(一)

[复制链接]


该用户从未签到

发表于 21-1-2024 10:08:13 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


目录
1.概述

2.NVRAM Manager

2.1 功能描述

2.2 Block描述

2.3 NvM的使用场景

3.小结
今天内容比较放松,但是不代表NvM真这么简单,手撸一套NvM状态机还是要花大力气的。1.概述
AUTOSAR 存储栈主要是用于管理EEPROM和Flash EEPROM中的非易失性数据,根据汽车运行环境保证数据能够被完整存储和保持。整个存储栈结构如红框所示:
AUTOSAR 存储栈分析(一)w1.jpg
服务层为NvM,硬件抽象层为MemIf、Fee、Ea、MemAcc,驱动层为Fls、Mem等等。需要注意的是,AUOTSAR对于这个栈的使用限制在如下三种存储介质:


    DFlash(芯片内部eFlash模拟EEPROM以节省成本)外部FlashEEPROM
当我们使用DFlash进行存储时,FlashDriver仅仅用于Flash EEPROM Emulation模块存储数据,至于更新程序代码到Flash中,则不在当前存储栈的考虑范围之内。因此模块间调用就有如下示意:
AUTOSAR 存储栈分析(一)w2.jpg
那么我们通常会在存储栈里配置哪些数据的存储?根据之前开发经验,可总结为如下几类:

    DEM相关数据EOL相关数据用户自定义一些调试开关数据汽车相关DID,例如里程、车型、ECU版本等
通常我们会拿DFlash全部做EEPROM 模拟,因此标定数据我们通常是存在PFlash。
2.NVRAM Manager

2.1 功能描述

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

    ReadEraseWriteValidationReport Status....
而这些服务请求又分为同步和异步,所以在AUTOSAR关于NvM API描述时也是专门做了分类,如下:
AUTOSAR 存储栈分析(一)w3.jpg
可以看到,在memory请求里不管是读写擦都是对于Block进行处理,因此我们来看NvM视角下的Block具体长什么样。2.2 Block描述

在AUTOSAR标准中,NvM Block总共分为4种类型Nv Block、RAM Block、ROM Block和Administrative Block,如下图
AUTOSAR 存储栈分析(一)w4.jpg


    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的一一映射,可以理解如下示意图:
AUTOSAR 存储栈分析(一)w5.jpg
从实际代码也可以看出如上结构:
AUTOSAR 存储栈分析(一)w6.jpg
我们在实际配置中可以根据芯片的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类型,可以提供读写擦、获取错误状态等服务。如下图:
AUTOSAR 存储栈分析(一)w7.jpg

3.小结

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

    立即存储和下电存储之间有没有区别?NvM memory request是用什么样的机制,在代码中每一层的mainfunction如何使用?在上电NvM_ReadAll速度太慢,影响启动时间该如何处理。
我们在后面一章节会继续讲解。

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 5-3-2025 01:04 , Processed in 0.509783 second(s), 36 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.