当前位置: 首页 > news >正文

[AutoSar NVM] 存储架构

依AutoSAR及公开知识辛苦整理,禁止转载。  专栏 《深入浅出AutoSAR》, 全文 1600 字.


图片来源: 知乎


汽车的ECU内存中有很多不同类型的变量,这些变量包括了车辆各个系统和功能所需的数据。大部分变量在ECU掉电后就会丢失,因为它们是易失性数据,无法长期保存。然而,在这些易失性数据之外,还存在一些非常重要的变量,它们被称为非易失性数据, 比如 防盗钥匙信息。


为管理和维护所有这些重要而又不可丢失的非易失性数据,Autosar NVM模块应运而生。Autosar NVM(Non-Volatile Memory)模块专门负责处理与非易失性数据相关的存储、备份、读取和写入等任务。通过合理地管理NVM模块,可以有效地确保这些关键数据得到正确地保存,并在需要时能够快速访问。


Autosar NVM支持两种NV(Non-Volatile)变量存储方式:静态存储区域(Static Storage Area)和动态存储区域(Dynamic Storage Area)。

静态存储区域主要用于保存那些:

  • 固定不变
  • 只偶尔更新但占据空间较小
  • 访问频率相对低的NV变量

而动态存储区域则适用于那些:

  • 经常发生改变
  • 更高访问频率
  • 占据空间较大
     

NVM 内部软件架构

AUTOSAR,存储模块软件架构分层依次是:

NVM->MemIf->Fee->FLS->FLASH

1. NVM(NVRAM Manager)是存储服务层,也就是存储模块最上层,该层是对外提供的接口。抽象数据存储,上电读取和下电存储。

2. MemIf是接口层,区分下面是Fee还是Ea。实现上层和下层flash or EEPROM 的分离, 上层不需要知道下面是哪种存储设备

3. Fee是Flash模拟EEPROM的抽象层。实现对 flash 数据的存储抽象和数据结构

Fls是flash驱动。

4. EA: EEPROM Abstraction, EEPROM 抽象模块, 定义它的存储抽象和数据结构

5. FEP: External EEPROM Abstraction, 它的外部操作接口和驱动

NVM 和外部交互

NVM 内部交互

存储模块接口调用栈

存储系统数据写入的过程

AutoSar NVM存储服务层是应用层访问非易失性数据的唯一接口。

如下图所示,用户在应用层通过RTE调用NvM模块的NvM_WriteBlock(NvM_BlockIdType,const void*)接口即可实现非易失性数据的写入功能,数据写入完成后,NvM会通过NvM_JobFinishedNotification(NvM_ServiceIdType,NvM_RequestResultType)通知用户数据写入结果。在整个写入过程中,用户无需关心NvM是如何将数据写入Fls或者Eep存储设备的。

图 非易失性数据的写入时序示例


参考

METAAutosar NVM 介绍 - 知乎
AutoSarAUTOSAR_SRS_MemoryServices.pdf
AutoSarAUTOSAR_SWS_NVRAMManager.pdf
汽车工程师谈技术Autosar nvm的机制原理是怎样的

Autosar Architecture (Learn from Scratch with Demo)

图片来源: COMIDOC

免责声明

本文根据公开信息整理,旨在介绍更多的汽车知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。

相关文章:

  • flask 实践
  • 系列十九、循环依赖(一)
  • 【100天精通Python】Day72:Python可视化_一文掌握Seaborn库的使用《二》_分类数据可视化,线性模型和参数拟合的可视化,示例+代码
  • 面试软件测试时,面试官最想听到的答案是什么?
  • 3.72 Command Buffer及URP概述
  • JVM相关的面试题
  • 电脑怎么共享屏幕?电脑屏幕共享软件分享!
  • SAP业务从ECC升级到SAP S/4HANA有哪些变化?有哪些功能得到增强?
  • 【wespeaker】模型ECAPA_TDNN介绍
  • 【机器学习合集】泛化与正则化合集 ->(个人学习记录笔记)
  • Kafka入门05——基础知识
  • 二叉树的概念
  • uni-app——如何阻止事件冒泡
  • 97. 交错字符串
  • ES Nested解释
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 2018一半小结一波
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Django 博客开发教程 8 - 博客文章详情页
  • Git学习与使用心得(1)—— 初始化
  • happypack两次报错的问题
  • Javascript弹出层-初探
  • JSDuck 与 AngularJS 融合技巧
  • leetcode386. Lexicographical Numbers
  • mockjs让前端开发独立于后端
  • nginx 负载服务器优化
  • Otto开发初探——微服务依赖管理新利器
  • Promise面试题2实现异步串行执行
  • Python_网络编程
  • React Native移动开发实战-3-实现页面间的数据传递
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Spring Boot快速入门(一):Hello Spring Boot
  • Vue.js-Day01
  • 不上全站https的网站你们就等着被恶心死吧
  • 第十八天-企业应用架构模式-基本模式
  • 给新手的新浪微博 SDK 集成教程【一】
  • 关于使用markdown的方法(引自CSDN教程)
  • 简单实现一个textarea自适应高度
  • 使用 QuickBI 搭建酷炫可视化分析
  • 使用SAX解析XML
  • 微服务核心架构梳理
  • 为什么要用IPython/Jupyter?
  • 一道面试题引发的“血案”
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 我们雇佣了一只大猴子...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • #控制台大学课堂点名问题_课堂随机点名
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (09)Hive——CTE 公共表达式
  • (1)SpringCloud 整合Python
  • (145)光线追踪距离场柔和阴影
  • (70min)字节暑假实习二面(已挂)
  • (libusb) usb口自动刷新
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师