[AutoSar NVM] 存储服务层(Service)详解

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


接上一讲 [AutoSar NVM] 存储架构

"数据是新时代的石油" -- 克莱门特•M•杜森堡(Clement M. Dusenbury)

 我们深入了解下存储服务层 (Memory Sevices). 后续的章节, 会自上而下进行学习,也会加上对底层的知识来理解上层的行为。虽然AutoSar 实现了软硬件分离, 但我认为只有真的懂底层存储, 才能真的用好存储服务。分离的好处,是软件代码实现的时候,可以不因硬件改动而频繁改变,但也带来弊端, 就是研发不懂底层, 设备性能发挥不出来。

闲话少说, 转回正题

AutoSar NVM(Non-Volatile Memory)存储服务层是AutoSar基础软件中的一个模块,用于管理非易失性存储器(NVM)中的数据。NVM可以是EEPROM、Flash等类型的存储设备,用于存储车辆的配置数据、故障码、历史数据等。

EEPROM (Electrically Erasable Programmable Read Only Memory),电可擦可编程只读存储器--一种掉电后数据不丢失的存储设备,简称Eep。可以随机访问和修改任何一个字节,可以往每个bit中写入0或者1。掉电后数据不丢失,具有更高的可靠性,但是电路复杂,成本也高。[1]

应用层是怎样写入数据到 Memory Serive

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

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

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

Memory Service 功能

AutoSar NVM存储服务层是应用层访问非易失性数据的唯一接口, 提供了以下功能:

  1. 数据管理:能够读、写和擦除NVM中的数据。

  2. 数据保护:提供了对NVM中数据的完整性校验(CRC冗余校验) 和保护,避免电路信息不好导致数据出错,避免数据因为意外情况(如掉电)而损坏。

  3. 数据备份:支持将NVM中的数据备份到其他存储设备中,以便在NVM出现问题时能够恢复数据。

  4. 数据迁移:支持将NVM中的数据移到其他存储设备中,以便在需要更换NVM时能够无缝切换。

  5. 安全保护:该服务层提供了防止非授权访问非易失性存储器的保护机制。它可以通过密码(数字,指纹,人脸识别)保护、加密和权限控制来确保数据的安全性。 这主要是 eMMC 或 UFS 的 RPMB 区功能,或者是 SSD 加密算法实现。

  6. 支持多种非易失性存储器:该服务层可以支持不同类型的非易失性存储器,包括EEPROM、Flash(不会是裸Flash, 而是指的闪存存储器, 如eMMC/UFS/SSD. eMMC 在中低端手机用的多, UFS 在高端手机用, SSD 还有个名字叫固态硬盘, 主要用在电脑中)和FRAM等。它还提供了对存储器类型、大小和性能的配置选项。

  7. 故障管理:该服务层还提供了故障管理功能,可以检测和纠正非易失性存储器中的错误。它可以通过检查和修复存储器块、页面和扇区等来提高数据完整性和可靠性。

  8. 自我诊断:该服务层还提供了自我诊断和自我测试功能,以确保非易失性存储器的正确性和稳定性。它可以检查存储器中的块、段、页和扇区等,以捕获潜在的错误和故障。UFS 和 SSD 都有自检(self test) 功能, eMMC 是没有的。

Memory Service 数据来源

AutoSar NVM(Non-Volatile Memory)存储服务层的数据来源可以来自于应用程序通信栈、设备驱动程序、配置参数以及操作系统等。其中,应用程序是主要的数据来源,它们可以通过NVM存储服务层提供的API函数将数据存储到非易失性存储器中,以便在下一次启动时恢复数据。

通信栈(用于不同的ECU和应用程序之间进行通信和协作)也是一个重要的数据源,例如,通信栈可能需要在非易失性存储器中保存一些通信参数,以便在重启后自动恢复。设备驱动程序也需要将一些设备参数和状态信息保存到NVM中,以便在下一次启动时恢复,以及防止设备、系统出现意外故障时保留状态信息。

操作系统也可以使用NVM存储服务层来保存一些必要的配置参数,如网卡的MAC地址等。此外,系统也可以使用NVM存储服务层保存一些操作历史记录、日志信息以及故障信息,以便进行故障排查和问题解决。

Memory Service API接口

AutoSar NVM存储服务层的实现是基于标准API接口,

主要包括以下几个部分:

  1. Memory Mapping Service API:提供了访问内存区域的函数。

  2. Memory Block Service API:用于动态分配和释放内存块。

  3. NVRAM Manager Service API:提供了对非易失性内存的读写和管理功能。

  4. EEPROM Emulation Manager Service API:提供了对EEPROM仿真的读写和管理功能。

  5. Flash Emulation Manager Service API:提供了对Flash仿真的读写和管理功能。

  6. Memory Protection Service API:用于保护内存区域不被非授权的访问所修改。

  7. Memory Monitoring Service API:提供了对内存使用情况的监控和管理功能。

这些API接口可以被其他AutoSar模块或用户应用程序调用,来实现对NVM中数据的读、写和擦除操作。

我们挑两个最重要的来讲讲。

Memory Block Service API

AutoSAR Memory Block Service 是 AutoSAR 架构中的一个重要服务组件,主要负责管理应用所使用的内存资源。使用 AutoSAR Memory Block Service 时需要注意以下事项:

  1. 内存池的大小需要在设计阶段预估,避免内存不够用或浪费过多内存资源;

  2. 内存池的布局需要根据应用需求进行优化,例如将频繁使用的内存块放在比较靠前的位置;

  3. 使用 AutoSAR Memory Service 时应该注意内存池的锁定状态,避免多个任务同时访问导致竞争问题;

  4. 内存分配和释放需要谨慎处理,避免出现内存泄漏或非法访问等问题;

  5. 在使用 Dynamic Memory Access API 时需要注意线程安全性,避免多个任务同时分配或释放内存导致竞争问题。

NVRAM  Memory Service API

AutoSar NVRAM Manager Service是一种用于管理非易失性存储器(NVRAM)的服务。NVRAM是指在断电后可以保存数据的存储器,通常用于保存重要的配置数据、故障码、日志等信息。

AutoSar NVRAM Manager Service提供了以下功能:

  1. 数据的读写:可以对NVRAM中存储的数据进行读写操作。

  2. 数据块管理:可以将NVRAM中的数据按照不同的数据块进行管理,方便数据的组织和管理。

  3. 数据保护和恢复:可以对NVRAM中的数据进行保护,防止数据丢失或被破坏;同时,在系统启动时可以恢复已经保存的数据。

  4. 数据同步:可以将NVRAM中的数据同步到其他存储器中,以便在系统故障或NVRAM损坏时,能够及时恢复数据。

在使用AutoSar NVM存储服务层时,需要注意以下事项:

  1. NVM的大小和类型:不同类型和大小的NVM需要使用不同的读写方式和算法,所以在使用前需要确认NVM的类型和大小信息。

  2. 数据保护设置:根据实际需求,需要选择合适的数据保护方式和设置参数,以确保NVM中的数据不会因意外情况而损坏。

  3. 数据备份和迁移:在使用NVM存储数据时,需要定期备份数据并考虑将数据迁移到其他存储设备中,以确保在NVM出现问题时能够及时恢复数据。


参考

1怿星科技Classic AUTOSAR专题 | 存储模块简介 - 知乎

Autosar Architecture (Learn from Scratch with Demo)

图片来源: COMIDOC

免责声明

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/105389.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

国际腾讯云自主拼装直播 URL教程!!!

注意事项 创建转码模板 并与播放域名进行 绑定 后,转码配置后的直播流,需将播放地址的 StreamName 拼接为 StreamName_转码模板名称,更多详情请参见 播放配置。 前提条件 已注册腾讯云账号,并开通 腾讯云直播服务。 已在 域名…

python二次开发Solidworks:方程式驱动曲线

1、渐开线 import win32com.client as win32 import pythoncomswApp win32.Dispatch(sldworks.application) swApp.Visible True Nothing win32.VARIANT(pythoncom.VT_DISPATCH, None) swModel swApp.ActiveDoc swExt swModel.Extension swSelMgr swModel.SelectionManag…

竞赛 深度学习图像修复算法 - opencv python 机器视觉

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步:将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

Mysql在ubuntu22.04上安装配置

更新并下载Mysql sudo apt update sudo apt install mysql-server启动Mysql服务 sudo systemctl start mysql安全配置 包括设置密码、删除匿名用户、禁止远程root登录等,按提示进行即可。 sudo mysql_secure_installation是否设置密码:是 三种强度密…

Node.js中的单线程服务器

为了解决多线程服务器在高并发的I/O密集型应用中的不足,同时避免早期简单单线程服务器的性能障碍,Node.js采用了基于"事件循环"的非阻塞式单线程模型,实现了如下两个目标: (1)保证每个请求都可以…

DAY35 435. 无重叠区间 + 763.划分字母区间 + 56. 合并区间

435. 无重叠区间 题目要求:给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。 注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。 示例 1: 输入: [ […

Babylonjs学习笔记(六)——贴图的使用

书接上回,这里讨论贴图的运用!!! // 创建球网格const ball MeshBuilder.CreateSphere(ball,{diameter:1},scene)ball.position new Vector3(0,1,0)// 创建PRB材质const ballMat new PBRMaterial(pbr,scene)// albedoTexture 反…

LVS-DR模式+keepalived+nginx+tomcat实现动静分离、负载均衡、高可用实验

实验条件: test2——20.0.0.20——主服务器——ipvsadm、keepalived服务 test3——20.0.0.30——备服务器——ipvsadm、keepalived服务 nginx5——20.0.0.51——后端真实服务器1(tomcat的代理服务器)——nginx服务 nginx6——20.0.0.61—…

python re 使用非捕获组来忽略第一个value的匹配结果

import retext " value1,value2,value3 "pattern r"(?:value\d,){2}value(\d)"match re.search(pattern, text) print(match.group(1)) 其中,(?:...)表示非捕获组,{1}表示匹配前面的模式一次。该正则表达式的含义是&#xff1a…

基于.Net CEF 实现 Vue 等前端技术栈构建 Windows 窗体应用

零、参考资料 1、https://github.com/cefsharp/CefSharp/wiki/Quick-Start-For-MS-.Net-5.0-or-greater 2、https://github.com/cefsharp/CefSharp/wiki/Quick-Start 3、https://github.com/cefsharp/CefSharp/wiki/General-Usage#javascript-integration 一、安装 Nuget 包…

@AutoConfigurationPackage注解类

包名package org.springframework.boot.autoconfigure 方法 String[] basePackages() 向AutoConfigurationPackages中注册的基本包&#xff0c;使用basePackageClasses作为基于字符串的包的类型安全替代方案 Class<?>[] basePackageClasses() 键入basePackage…

抽丝剥茧,Redis使用事件总线EventBus或AOP优化健康检测

目录 前言 Lettuce 什么是事件总线EventBus&#xff1f; Connected Connection activated Disconnected Connection deactivated Reconnect failed 使用 一种另类方法—AOP 具体实现 前言 在上一篇深入浅出&#xff0c;SpringBoot整合Quartz实现定时任务与Redis健康…

使用GoQuery实现头条新闻采集

概述 在本文中&#xff0c;我们将介绍如何使用Go语言和GoQuery库实现一个简单的爬虫程序&#xff0c;用于抓取头条新闻的网页内容。我们还将使用爬虫代理服务&#xff0c;提高爬虫程序的性能和安全性。我们将使用多线程技术&#xff0c;提高采集效率。最后&#xff0c;我们将展…

高等数学教材重难点题型总结(五)定积分

总的来说&#xff0c;只要不定积分掌握得好&#xff0c;基础的定积分肯定没问题&#xff1b;对于考研的话&#xff0c;在定积分定义、牛莱公式、反常积分、审敛法的理解要求更高一些&#xff08;数一还会涉及到伽马函数~&#xff09; 1.利用定义计算定积分 2.定积分的近似计算 …

前端使用 printJS 插件打印多页:第一页空白问题解决

printJS({printable: [data:image/jpg;base64,${this.printData.url}],type: image,style: media print { page {size: auto; margin: 0; } body{margin:0 5px}} // 解决出现多页打印时第一页空白问题 })

Kafka - 深入了解Kafka基础架构:Kafka的基本概念

文章目录 Kafka的基本概念 Kafka的基本概念 我们首先了解一些Kafka的基本概念。 1&#xff09;Producer &#xff1a;消息生产者&#xff0c;就是向kafka broker发消息的客户端2&#xff09;Consumer &#xff1a;消息消费者&#xff0c;向kafka broker获取消息的客户端3&…

linux性能分析(五)如何学习linux性能优化

一 如何学习linux性能优化 强调&#xff1a; 由于知识记忆曲线以及某些知识点不常用,所以一定要注重复习思考&#xff1a; 如何进行能力转义以及能力嫁接? --> 真正站在巨人的肩膀上性能调优的目的&#xff1a; 不影响系统稳定性的资源最大利用化补充&#xff1a; 性能…

数据清洗与规范化详解

数据处理流程&#xff0c;也称数据处理管道&#xff0c;是将原始数据转化为有意义的信息和知识的一系列操作步骤。它包括数据采集、清洗、转换、分析和可视化等环节&#xff0c;旨在提供有用的见解和决策支持。在数据可视化中数据处理是可视化展示前非常重要的一步&#xff0c;…

【MATLAB源码-第56期】基于WOA白鲸优化算法和PSO粒子群优化算法的三维路径规划对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1.粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;是一种模拟鸟群觅食行为的启发式优化方法。以下是其详细描述&#xff1a; 基本思想&#xff1a; 鸟群在寻找食物时&#xff0c;每只鸟都…

【Solidity】智能合约案例——③版权保护合约

目录 一、合约源码分析&#xff1a; 二、合约整体流程&#xff1a; 1.部署合约&#xff1a; 2.添加实体&#xff1a; 3.查询实体 4.审核版权&#xff1a; 5.版权转让 一、合约源码分析&#xff1a; Copyright.sol&#xff1a;主合约&#xff0c;定义了版权局的实体&#xff…
最新文章