[AutoSar NVM] 存储服务层(Memory Service)详解_autosar nvm 代码详解-程序员宅基地

技术标签: 数据库  

专栏 《深入浅出AutoSAR》。全文 5300 字, 依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]

图 存储架构图

Autosar NVM

在基础软件的服务层中,Autosar NVM作为非易失性存储器管理工具。

首先,在数据操作方面,Autosar NVM提供了初始化、读取、写入和控制等功能。无论是处理EEPROM还是Flash模拟等不同类型的非易失性存储器,在Autosar NVM这个层级上都以相同类型进行抽象处理。

其次,在底层细节与应用程序解耦方面,Autosar NVM设计将底层细节与应用程序解耦合。具体而言,在MemIf层才会对具体存储介质进行区分。通过MemIf层,可以根据实际情况选择合适的驱动程序或算法来处理EEPROM或Flash模拟等不同类型的非易失性存储器。

此外,在错误检测和纠正机制方面,Autosar NVM支持自动监测并修复可能存在于非易失性存储器中的错误。这大大增强了系统对于数据完整性和稳定运行环境方面 的保障。

NVM Service 和上层交互?

 NVM Service 接口使用心得

  1. ReadAll函数在System Startup启动时调用,作用是把所有的Block中的数据从NV Block中拷贝到Ram中。
  2. WriteAll函数在ECU state manage里System Shutdown的时候被调用,作用是把要写到Block中的数据从Ram中拷贝到NV Block 中。
  3. NVM Queue Job执行出错时,应该读取NVM 中的默认值。
  4. 当完成某一个Block ID的写操作后,将NV Block中的数据拷贝到Ram Block中,但是在应用程序重修改了Ram Block的值,如果调用NvM_SetRamBlockStatus函数设置这个Block ID为TRUE,并且在NVM_cfg.c中设置了参数NVM_SELECT_BLOCK_FOR_WRITEALL_ON,那么ECU在进入sleep(ECU ShutDown)期间会调用WriteAll函数,把完成前述设置的block全部写到NVM中。
  5. 当Ram Block中的数据写到NV Block中后,要有回读验证的过程,即把NVM中的数据与Ram block中的original数据进行比较。
  6. 调用NvM_RestoreBlockDefaults函数可以把相应的Block的内容设置为默认值。

Memory Service 功能

提供了以下功能:

  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出现问题时能够及时恢复数据。

NVRAM Block

在Autosar中规定了四种 NVRAM Block,分别为 NV Block、RAM Block、ROM Block、Administrative Block。

 

1. NV Block

NV Block是一种非易失性存储器块,用于存储需要在ECU断电后保持的数据。这种存储器的读写速度较慢,但具有高可靠性和长寿命。NV Block通常用于存储ECU的配置设置、故障码、历史数据等信息。

NV block是存储NV变量的基本结构,其中Header以及CRC校验非必须项。

2. RAM Block

RAM Block是一种随机存储器块,用于存储需要在ECU上电后才能保持的数据。这种存储器的读写速度较快,但是在ECU断电或重启后,存储的数据会丢失。RAM Block通常用于临时存储一些运行时数据,如缓存、栈、堆等。

缓存(Cache)是一种临时存储,在计算机系统中用于存储频繁使用的数据,加速计算机的运行速度。缓存由CPU内部或者外部芯片组实现,可以分为一级缓存、二级缓存等。

栈(Stack)是一种数据结构,它以先进后出的顺序存储数据,即后进先出。栈一般分配在内存的高地址,有一个指针记录下栈顶的位置。栈常用于函数调用、表达式求值、递归等操作。

堆(Heap)也是一种数据结构,它用于存储动态分配的内存。堆的内存分配和释放不是按照固定顺序进行的,也不是像栈那样有一个指针指向栈顶,而是由程序员自己控制的,因此堆中的内存可以被多个指针引用,也可以在程序的任何地方进行释放。

由于NV变量的写入与读取都是一件相对较慢的操作,而应用层逻辑操作周期速度又太快。直接操作NV block显然不合适,所以在进行读写之前,我们会建议一个同样大小的Ram空间来操作、使用、存放这些还没有被写入或者读取的NV值。

在NVM中规定了permanent,temporary 两种类型。其中永久型在项目配置时就必须输入指定的RAM地址;而临时型不需要在项目配置期间就设定

3. ROM Block

ROM Block是一种只读存储器块,用于存储只读数据。这种存储器的读取速度较快,但不能进行写操作,也不能在ECU运行时修改存储的数据。ROM Block通常用于存储ECU的程序代码、固件升级文件等。

4. Administrative Block

Administrative Block是一种系统级别的存储器块,用于存储ECU的元数据和管理信息。Administrative Block通常包含ECU的识别码、版本信息、访问权限等。

Administrative block是专门用于对NVRAM Block 与 RAM blcok 的数据安全性进行管理而设计的,它对应用层并不可见。


参考

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

Autosar Architecture (Learn from Scratch with Demo)

图片来源: COMIDOC

免责声明

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/vagrant0407/article/details/134065897

智能推荐

Pandas对行/列求和_pandas对具体列求和-程序员宅基地

文章浏览阅读5.3k次,点赞3次,收藏18次。Pandas对行/列求和_pandas对具体列求和

Visio--用例图、类图、顺序图、活动图_visio画用例图-程序员宅基地

文章浏览阅读1.9w次,点赞32次,收藏228次。做个小结。_visio画用例图

程序员的路----程序员一定要仔细看_程序员的道路-程序员宅基地

文章浏览阅读2.2k次。在网上看到的恶搞程序员的图片,实在是搞笑。看一次笑一次!程序猿的十年他不是乞丐,请尊称他为程序猿。对,他就是程序猿!其实,你们看到的不是僵尸,他们都是苦逼的程序猿!这不是恶搞的,是一个真实的故事!看他的拐杖,其实也挺可怜的!不知是不是敲代码敲多了,把脚敲颓了!_程序员的道路

从Atlas到Microsoft ASP.NET AJAX(6) - Networking, Application Services-程序员宅基地

文章浏览阅读42次。NetworkingCalling Web Service Methods from Script  为了简化Web Services方法调用,客户端代理的设计被改变了,它在方法调用和回调函数设置方面提供了强大的灵活性。  下面的例子展示了CTP版本中Web Services方法的客户端调用,以及回调函数的使用方式。第一个例子展示了在CTP版本中Web ..._.net6 applicationservices

一文带你了解socket网络编程以及详解过程和原理_socket编程-程序员宅基地

文章浏览阅读1.1w次,点赞42次,收藏178次。Socket(套接字)是计算机网络编程中的一种抽象概念,它提供了在网络上进行通信的接口。通过使用 Socket,可以在不同计算机之间建立连接,并进行数据的传输和交换。通过 Socket,客户端可以与服务器建立连接并发送请求,服务器接收请求并返回响应。通过 Socket,可以在多个用户之间实现实时的文字、音频或视频通信。可以使用 Socket 在不同计算机之间传输文件,如上传和下载文件。可通过 Socket 在远程计算机上执行指令或操作。_socket编程

nodejs第三方模块 express框架 传参_nodejs express 模块间参数传递-程序员宅基地

文章浏览阅读413次。nodejs第三方模块 express框架 传参get接口动态参数以这个举例 http://localhost:8001/edit/124其中,/124传递的id值124就是动态参数服务器通过req.params获取app.get("/edit/:id",(req,res)=>{ console.log(req.params) res.send("发送成功")})这个在我们删除和编辑数据的时候最常用,根据指定的id删除内容,以及编辑内容时的数据回显。查询字符串参数_nodejs express 模块间参数传递

随便推点

计算机考研408每日一题 day78_命中率高且电路实现简单的cache内存映射方式-程序员宅基地

文章浏览阅读392次。对于二叉排序树,下面的说法 ___是正确的。(华南理工大学 2006年)设备驱动程序在读写磁盘数据时一般釆用下列哪种I/O方式?(中国科学院大学 2018)下列___交换技术是独占信道工作方式。(中南大学 2006年)命中率高且电路实现简单的Cache 与内存映射方式是___映射方式。(中国科学院大学 2015)_命中率高且电路实现简单的cache内存映射方式

Unhandled exceptions: java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException_unhandled exceptions: java.lang.instantiationexcep-程序员宅基地

文章浏览阅读3.2k次。可能是没有异常处理,只需要加上throws Exception就解决问题了。_unhandled exceptions: java.lang.instantiationexception, java.lang.illegalacc

webview ERROR_UNSUPPORTED_SCHEME ,errorcode=-10问题处理-程序员宅基地

文章浏览阅读1.5k次。webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { try{ if(url.startsWith("baidumap://")){ Intent _error_unsupported_scheme

embed标签-程序员宅基地

文章浏览阅读66次。Embed  (一)、基本语法:  embed src=url  说明:embed可以用来插入各种多媒体,格式可以是 Midi、Wav、AIFF、AU、MP3等等, Netscape及新版的IE 都支持。url为音频或视频文件及其路径,可以是相对路径或绝对路径。  示例:<embed src="your.mid">  (二)、属性设置:  1、自动播放...

php 上传文件漏洞,PHP -- 文件包含、文件上传漏洞-程序员宅基地

文章浏览阅读330次。PHP -- 文件包含、文件上传漏洞PHP -- 文件包含、文件上传漏洞文件包含文件引入漏洞,是由一个动态页面编译时引入另一个文件的操作。文件引入本身是没有问题,它是用于统一页面风格,减少代码冗余的一种技术。但是在特定的场景下就会形成漏洞jsp:include指令和include动作,其中include动作用于引入动态文件php:include(),include_once(),require()..._php文件上传4漏洞

配置NGINX同时运行 https 和 http_nginx 和 http无法同时启动-程序员宅基地

文章浏览阅读406次。SSL 是需要申请证书的,key和PEM文件要放到服务器路径。然后NGINX下要进行443端口和80端口的绑定。server { listen 80; server_name ietaiji.com www.ietaiji.com; root "D:/aaa/WWW/ietaiji"; index index.html_nginx 和 http无法同时启动