专栏 《深入浅出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存储服务层是应用层访问非易失性数据的唯一接口, 提供了以下功能:
-
数据管理:能够读、写和擦除NVM中的数据。
-
数据保护:提供了对NVM中数据的完整性校验(CRC冗余校验) 和保护,避免电路信息不好导致数据出错,避免数据因为意外情况(如掉电)而损坏。
-
数据备份:支持将NVM中的数据备份到其他存储设备中,以便在NVM出现问题时能够恢复数据。
-
数据迁移:支持将NVM中的数据移到其他存储设备中,以便在需要更换NVM时能够无缝切换。
-
安全保护:该服务层提供了防止非授权访问非易失性存储器的保护机制。它可以通过密码(数字,指纹,人脸识别)保护、加密和权限控制来确保数据的安全性。 这主要是 eMMC 或 UFS 的 RPMB 区功能,或者是 SSD 加密算法实现。
-
支持多种非易失性存储器:该服务层可以支持不同类型的非易失性存储器,包括EEPROM、Flash(不会是裸Flash, 而是指的闪存存储器, 如eMMC/UFS/SSD. eMMC 在中低端手机用的多, UFS 在高端手机用, SSD 还有个名字叫固态硬盘, 主要用在电脑中)和FRAM等。它还提供了对存储器类型、大小和性能的配置选项。
-
故障管理:该服务层还提供了故障管理功能,可以检测和纠正非易失性存储器中的错误。它可以通过检查和修复存储器块、页面和扇区等来提高数据完整性和可靠性。
-
自我诊断:该服务层还提供了自我诊断和自我测试功能,以确保非易失性存储器的正确性和稳定性。它可以检查存储器中的块、段、页和扇区等,以捕获潜在的错误和故障。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接口,
主要包括以下几个部分:
-
Memory Mapping Service API:提供了访问内存区域的函数。
-
Memory Block Service API:用于动态分配和释放内存块。
-
NVRAM Manager Service API:提供了对非易失性内存的读写和管理功能。
-
EEPROM Emulation Manager Service API:提供了对EEPROM仿真的读写和管理功能。
-
Flash Emulation Manager Service API:提供了对Flash仿真的读写和管理功能。
-
Memory Protection Service API:用于保护内存区域不被非授权的访问所修改。
-
Memory Monitoring Service API:提供了对内存使用情况的监控和管理功能。
这些API接口可以被其他AutoSar模块或用户应用程序调用,来实现对NVM中数据的读、写和擦除操作。
我们挑两个最重要的来讲讲。
Memory Block Service API
AutoSAR Memory Block Service 是 AutoSAR 架构中的一个重要服务组件,主要负责管理应用所使用的内存资源。使用 AutoSAR Memory Block Service 时需要注意以下事项:
-
内存池的大小需要在设计阶段预估,避免内存不够用或浪费过多内存资源;
-
内存池的布局需要根据应用需求进行优化,例如将频繁使用的内存块放在比较靠前的位置;
-
使用 AutoSAR Memory Service 时应该注意内存池的锁定状态,避免多个任务同时访问导致竞争问题;
-
内存分配和释放需要谨慎处理,避免出现内存泄漏或非法访问等问题;
-
在使用 Dynamic Memory Access API 时需要注意线程安全性,避免多个任务同时分配或释放内存导致竞争问题。
NVRAM Memory Service API
AutoSar NVRAM Manager Service是一种用于管理非易失性存储器(NVRAM)的服务。NVRAM是指在断电后可以保存数据的存储器,通常用于保存重要的配置数据、故障码、日志等信息。
AutoSar NVRAM Manager Service提供了以下功能:
-
数据的读写:可以对NVRAM中存储的数据进行读写操作。
-
数据块管理:可以将NVRAM中的数据按照不同的数据块进行管理,方便数据的组织和管理。
-
数据保护和恢复:可以对NVRAM中的数据进行保护,防止数据丢失或被破坏;同时,在系统启动时可以恢复已经保存的数据。
-
数据同步:可以将NVRAM中的数据同步到其他存储器中,以便在系统故障或NVRAM损坏时,能够及时恢复数据。
在使用AutoSar NVM存储服务层时,需要注意以下事项:
-
NVM的大小和类型:不同类型和大小的NVM需要使用不同的读写方式和算法,所以在使用前需要确认NVM的类型和大小信息。
-
数据保护设置:根据实际需求,需要选择合适的数据保护方式和设置参数,以确保NVM中的数据不会因意外情况而损坏。
-
数据备份和迁移:在使用NVM存储数据时,需要定期备份数据并考虑将数据迁移到其他存储设备中,以确保在NVM出现问题时能够及时恢复数据。
参考
1 | 怿星科技 | Classic AUTOSAR专题 | 存储模块简介 - 知乎 |
图片来源: COMIDOC
免责声明:
本文根据公开信息整理,旨在介绍更多的汽车知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。