[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

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文