


文章目录
>>>>>>>>>>返回专栏总目录《AUTOSAR从入门到精通专栏》<<<<<<<<<<
关注文章末尾公众号或微信中搜索“AUTOSAR解忧杂货铺”,后台发送“资料”领取汽车电子入门资料,发送“加群”加入汽车电子交流群
一、存储架构
AutoSar存储架构主要基于非易失性存储器(NVRAM)管理,通过NVRAM Manager和Bulk NV Data Manager等模块实现数据的持久化存储,支持ECU配置数据、标定参数、错误信息等的存储,具有硬件抽象、模块化设计和数据完整性保证等特点。存储栈由以下模块组成,它为上层应用层和基础软件提供基本的内存管理服务,如下图所示
- 非易失性存储器管理器 - NvM(服务层)
- 存储器接口 - MemIf(ECU抽象层)
- Flash EEPROM模拟 - Fee(ECU抽象层)
- EEPROM抽象 - Ea (ECU 抽象层)
- Flash 驱动程序 - Fls(MCAL 层)
- EEPROM 驱动程序 - Eep(MCAL 层)
NvM:主要提供抽象数据存储,在上电读取下电存储数据,支持Immediately存储数据,将NV data在ROM和RAM之间建立关联
MemIf:实现存储数据Block在内部Flash或者外部EEP的分离操作
Fee:实现对Flash的数据Block的抽象和动态数据的Layout
Flash Driver:提供操作Flash的接口
Ea:定义外部EEPROM的存储抽象和数据的Layout
Eep:提供外部EEPROM的操作接口和驱动
二、NvM(服务层)
Autosar NVM 模块位于基础软件的服务层,为所有与非易失性相关的初始化、读、写、控制维护等工作提供了同步和异步的服务。无论是 EEPROM 或是 Flash 模拟的相关操作,都在这个层级被抽象成同一类型,只有到了 MemIf 层才会做出具体的区分。
NVM 作为上层应用与底层硬件的连接桥梁,它的上层对接的是 RTE,而下层则是与 Flash Driver 或是 EEPROM Driver 的接口相对接。当应用层在执行一些如写数据或者更新 DTC 等存储相关的服务时,就会调用 NVM 里面的函数,而 NVM 则会根据不同的需求,整合并调用 Flash 模拟和 EEPROM 的相关接口。
1、NvM的同步机制
- 同步服务:同步服务是一种阻塞式的服务调用方式,在这种调用中,程序会持续轮询以检查服务是否已经完成,只有当服务完成后,程序才会继续执行后续操作。在应用层(APPL)中直接调用 NVM 的接口来对数据进行操作时,不推荐使用共享的 RAM Block(即由多个模块或实例共享的 RAM 数据块)进行操作。这是因为在 NVM 中,通过同步 CRC(循环冗余校验)机制来确保 RAM Block 数据的一致性,而直接调用 NVM 接口进行共享 RAM Block 操作可能会破坏这种一致性,从而引发数据错误或系统不稳定等问题。
- 异步服务:异步服务是一种非阻塞的服务调用方式,在这种调用中,对服务的请求会被放置在队列中,随后通过在块配置阶段所设定的回调例程,来通知上层服务已经完成。
NVM 定义了一个 RAM Mirror(RAM 镜像),用于与应用层(APPL)进行数据交换。当应用层(APPL)调用 NvM_WriteBlock 函数时,数据会被写入到 RAM Block(RAM 数据块)中,此时数据仍然可以被修改,因为数据尚未写入到最终的 Nv Block(非易失性数据块)。当调用 NVM 数据操作 NvMWriteRamBlockToNvM 函数时,数据会被复制到内部的 Mirror(镜像)中,最后再将数据写入到 Nv Block 中,从而完成数据的持久化存储。
2、NvM数据操作Block
在 AUTOSAR 的存储架构中所提及的 Block 并非 Flash 中的硬件 Block,而是一种在软件层面上的概念。在 NvM(非易失性存储管理模块)中,对数据的操作通常被称为 Basic storage objects(基本存储对象)。Basic storage objects 是 NvM 中存储的最小单元,它们是 NvM 模块进行数据存储和管理的基本单位。Block 作为 NvM 操作的基本数据单元,是 NvM 进行数据读写和存储管理的最小粒度。在 AUTOSAR 架构中,当需要存储数据时,必须先为这些数据分配相应的 Block,以便 NvM 模块能够对它们进行有效的管理和操作。
每个 Block,又由以下几个部分组成:
- NV Block:是存储NV数据的基本结构,位于非易失性存储器中, 用于保存非易失数据。
- RAM Block:由于 NV 变量的读写操作相对较慢,而应用层逻辑的操作周期速度又很快,直接操作 NV Block 显然是不合适的。因此,在进行读写之前,建议使用一个同样大小的 RAM 空间来操作、使用、存放这些尚未被写入或读取的 NV 值。久 RAM Block:用户配置给该 Block 的固定的 RAM 地址,运行时不可改变。
- ROM Block:存储该 Block 的默认值,位于掉电不丢失的设备,当 NV Block 的数据异常时,可恢复为默认值;
- Administrative Block:Administrative Block是专门设计用于管理NVRAM Block与RAM Block数据安全性的模块,它是NVRAM中必须使用的组件。Administrative Block包含DataSet类型的NvM数据管理相关的NVRAM Block的属性、状态以及错误信息,能够管理NVRAM Block的写保护功能,以及记录上次数据操作的错误和状态信息。这些功能对应用层是不可见的,从而确保了数据的安全性和系统的稳定性。
在 NvM(非易失性存储管理模块)中,RAM Block 和 NV Block 都可以选择包含可选的 Header 和 CRC 区域。Header 用于存储 Block 的 ID 信息,固定占用两个字节,而 CRC 区域用于存储 Block 的 CRC 校验值,根据 CRC 类型的不同,占用 1、2 或 4 个字节。相比之下,ROM Block 仅用于存储默认数据,不包含 Header 和 CRC 内容。当用户进行数据的读取和写入操作时,无需关心 Header 和 CRC 的处理,因为 NVM 模块会自动完成 Header 和 CRC 的填充、计算以及校验等工作。
NvM 支持三种类型的 Block,分别为:
-
Native Block:最常用的 Block,用于一般数据的管理
该类型包括:1个NV Block,1个RAM Block,1个Administrative Blocks -
Redundant Block:该 Block 支持数据冗余,可用于对一些安全性要求较高的数据进行管理,其实就是可以对其进行备份的Block。
该类型包括:2个 NV Block,1个RAM Block,1个Administrative Blocks,且两 NV Block 中保存的数据互为备份
- Dataset Block:该 Block 支持同一类型的多套数据。用户可以根据当前的运行状态,选择使用多套数据中的一套。
该类型包括:多个 NV Block 或 ROM Block 并通过索引选择操作对象,提高了系统的灵活性,每一个DataSet的位置可以通过Administrative Blocks获得,NvM可以读取选择的ROM Block。Dataset NVRAM类型的设计可以根据需要对一个数据在NvRAM中以一定的循环偏移进行存储,每一次存储位置可以不同,实现对NvRAM的寿命延长。
三、MemIf(ECU抽象层)
Memory Abstraction Interface (MemIf) 作为接口抽象层,为 NvM 提供访问 Fee/Ea 模块的函数,NvM 通过 MemIf 实现对 Fee 和 Ea 的访问,从而成为一个硬件无关的模块。MemIf 通过 Device Id 将 Fee 与 Ea 的相关接口抽象成 MemIf 接口供 NvM 访问。Fee 的 Device Id 配置为 0,Ea 的 Device Id 配置为 1,这样,MemIf 可以同时管理 EA 和 FEE,根据不同的 DeviceId 配置来识别对不同的 Device Api 进行访问。
四、Fee(ECU抽象层)
Fee(Flash Eeprom Emulation),顾名思义,就是通过 Flash 模拟 EEPROM 的功能。Fee 的写入单元是 Block,Fee Block 继承自 NvM Block,在 NvM Block 数据的基础上加上 Fee Block Header 数据,从而形成 Fee Block。
Fee 写入 Block 时遵循先写入的地址靠前的原则,即每次写入新的 Block 时,数据会依次往后排列。这种写入方式确保了每次写入操作都不需要进行擦除操作,从而提高了写入效率。
五、Ea (ECU 抽象层)
由于 EEPROM 可以直接进行写入操作,无需执行擦除操作,因此存储在 EEPROM 中的 Block 地址是固定的。Ea(EEPROM 抽象层)模块作为 EEPROM 的硬件抽象层,通过调用底层 Eep 模块提供的 API 来操作 EEPROM 硬件。
EEPROM 具备以下物理特性:
- 可以按字节进行写入操作,写入前不需要执行数据擦除操作。
- EA 模块能够为每个 Block 确定具体的硬件存储地址并划分存储空间,当 NvM 模块需要执行读、写等服务时,只需通过 Ea模块完成相应 Block 的地址映射,即可直接操作 EEPROM 硬件中的数据。
六、Fls(MCAL 层)
Flash驱动提供独立于硬件访问Flash内存的机制,提供用于读写和擦除Flash的服务驱动。
七、Eep(MCAL 层)
EEPROM Driver(Eep)模块是 AUTOSAR 基础软件的组成部分,它提供统一的 EEPROM 存储访问接口,为各种内置和外置的 EEPROM 存储设备提供抽象层。借助这些统一的接口,应用层软件能够更加便捷地进行数据的存储和读取操作,而无需关注底层存储设备的具体实现细节。
八、总结
AutoSAR存储架构通过应用层、运行时环境、基础软件层和微控制器抽象层的协同工作,实现了对非易失性存储器的高效管理和数据的可靠存储,其中NvM模块负责数据的读写和管理,MemIf模块提供硬件无关的存储介质访问接口,Fee和Ea模块分别模拟EEPROM和为EEPROM硬件提供抽象层,整个架构确保了数据存储的灵活性、可靠性和硬件无关性。