AUTOSAR图解==>AUTOSAR_SRS_MemoryServices

AUTOSAR NVRAM管理器详解

基于AUTOSAR标准的非易失性存储管理系统

目录


1. 概述

1.1 NVRAM管理器的作用

NVRAM管理器(NVM)是AUTOSAR基础软件中的一个核心服务层模块,提供对非易失性存储器数据的管理功能。它的主要作用是:

  • 管理ECU中的非易失性存储器数据(如配置参数、状态信息等)
  • 提供统一的存储数据访问接口
  • 支持不同类型的存储介质(如闪存、EEPROM等)
  • 提供数据保护、冗余和恢复机制
  • 管理读写作业队列及优先级

作为AUTOSAR架构中的重要组件,NVRAM管理器使应用软件可以独立于底层存储硬件,通过统一接口实现数据的持久化存储和读取。

1.2 NVRAM管理器的位置

NVRAM管理器位于AUTOSAR分层架构的服务层,介于应用层和硬件抽象层之间。它通过RTE与应用软件组件通信,通过存储硬件抽象层与底层硬件驱动交互。


2. NVRAM管理器架构

2.1 总体架构

下图展示了NVRAM管理器在AUTOSAR架构中的位置及与其他组件的关系:

在这里插入图片描述

2.1.1 架构组成

NVRAM管理器架构主要包含以下几个部分:

  • 应用层:包含应用软件组件(SWC)和内存抽象接口,负责发起读写请求
  • 运行时环境层:RTE负责转发应用层请求到基础软件层
  • 服务层:NVRAM管理器模块位于此层,负责核心的非易失性内存管理功能
  • 硬件抽象层:包含存储驱动器,如EEPROM驱动和闪存驱动
  • 硬件层:具体的物理存储介质,如内部闪存和外部EEPROM
2.1.2 NVRAM管理器内部结构

NVRAM管理器内部主要包含四个核心功能模块:

  • 块管理:负责管理不同类型的NVRAM块,如标准块、冗余块和数据集块
  • 作业队列管理:负责管理读写请求队列,按优先级排序处理
  • 数据集管理:管理多个数据变体的存储和选择
  • 冗余管理:实现数据的冗余存储和错误恢复

这些组件协同工作,确保非易失性存储数据的可靠性、完整性和可访问性。

2.2 NVRAM块管理类型

NVRAM管理器支持多种块管理类型,以满足不同的数据存储需求:

在这里插入图片描述

2.2.1 基本块类型

NVRAM管理器支持以下几种基本块类型:

  • 标准块:基本的存储块类型,用于常规数据存储,无特殊机制
  • 永久块:存储在永久存储区的数据块,适用于不经常变更的数据
  • 冗余块:在多个位置存储相同数据,提供数据保护和自动恢复功能
  • 数据集块:支持多个数据变体存储,可在运行时选择不同数据集

每种块类型都有其特定的属性和行为,以满足不同的数据存储需求和安全级别。

2.2.2 块属性与状态

NVRAM块包含多种重要属性:

  • 块ID:唯一标识每个NVRAM块
  • 优先级:决定读写操作的处理顺序
  • 写保护:控制是否允许写入操作
  • 数据索引:用于数据集块的数据集选择
  • 通知函数:操作完成后的回调函数

块数据状态可以是:

  • 有效(VALID):数据完整可用
  • 无效(INVALID):数据不可用
  • 不一致(INCONSISTENT):部分数据损坏
  • 损坏(CORRUPTED):数据完全损坏
2.2.3 数据保护机制

冗余块和数据集块提供了重要的数据保护机制:

  • 冗余块通过在多个位置存储相同数据,在主存储位置失效时可从备份恢复
  • 数据集块通过ROM默认值提供数据备份,确保即使NV数据损坏也能恢复到默认状态
  • 校验和用于验证数据完整性,支持多种CRC算法

这些机制确保了关键数据的可靠性和安全性,特别是对于车辆安全相关功能尤为重要。

2.3 配置模型

NVRAM管理器采用了灵活的配置模型,支持多种配置参数:

在这里插入图片描述

2.3.1 配置结构

NVRAM管理器配置主要包含以下几个部分:

  • NvM_ConfigType:主配置结构,包含所有块描述符和全局配置
  • NvM_BlockDescriptorType:块描述符,定义每个NVRAM块的属性
  • NvM_CallbackType:回调函数配置,用于块初始化和操作完成通知
  • NvM_CrcJobConfigType:CRC作业配置,定义数据校验方式
2.3.2 配置参数

块描述符中的关键配置参数包括:

  • BlockManagementType:块管理类型(标准/冗余/数据集)
  • BlockSize:RAM块大小(字节)
  • NvBlockLength:NV块长度(字节)
  • BlockPriority:作业优先级
  • WriteProtection:写保护开关
  • DatasetSelection:是否支持数据集选择
  • BlockUseCrc:是否使用CRC校验

这些配置参数可以在预编译阶段静态配置,以适应不同的应用需求和硬件环境。

2.3.3 API接口

NVRAM管理器提供了丰富的API接口,包括:

  • 基本操作:NvM_Init, NvM_ReadBlock, NvM_WriteBlock等
  • 数据集操作:NvM_SetDataIndex, NvM_GetDataIndex等
  • 保护操作:NvM_SetBlockProtection等
  • 多块操作:NvM_ReadAll, NvM_WriteAll等
  • 状态查询:NvM_GetErrorStatus等

这些API使应用软件能够方便地访问和管理非易失性存储数据。


3. NVRAM管理器工作流程

3.1 数据读取流程

NVRAM管理器的数据读取流程包括从RAM缓存读取和从物理存储介质读取两种情况:

在这里插入图片描述

3.1.1 读取操作流程
  1. 应用发起读取请求:应用通过API调用NvM_ReadBlock,指定块ID
  2. 检查RAM缓存:NVRAM管理器首先检查RAM缓存中的数据是否有效
  3. RAM缓存读取:如果RAM缓存有效,直接返回缓存数据
  4. 创建读取作业:如果需要从硬件读取,创建读取作业并加入队列
  5. 执行读取操作:根据优先级执行读取操作,通过硬件抽象层访问存储设备
  6. 数据校验:对读取的数据进行完整性校验
  7. 数据恢复:如果数据校验失败,尝试恢复(冗余块从备份恢复,数据集块使用默认值)
  8. 返回数据:将读取或恢复的数据返回给应用
3.1.2 数据有效性保证

NVRAM管理器通过多种机制确保数据的有效性:

  • CRC校验:使用CRC算法验证数据完整性
  • 冗余机制:冗余块在主数据损坏时从备份恢复
  • 默认值机制:数据集块在数据无效时使用ROM默认值
  • 多次重试:配置读取重试次数,增加读取成功率

这些机制共同确保应用能够获取到有效的数据,即使在存储介质部分损坏的情况下。

3.2 数据写入流程

数据写入流程涉及多个步骤,包括写保护检查、数据缓存和作业队列管理:

3.2.1 写入操作流程
  1. 应用发起写入请求:应用通过API调用NvM_WriteBlock,指定块ID和数据
  2. 写保护检查:检查块是否启用了写保护
  3. 更新RAM缓存:将新数据更新到RAM缓存
  4. 创建写入作业:创建写入作业并加入队列
  5. 作业优先级排序:根据块优先级排序作业队列
  6. 执行写入操作:通过硬件抽象层将数据写入存储设备
  7. 更新块状态:根据写入结果更新块状态
  8. 触发回调通知:如果配置了回调函数,触发通知应用
  9. 返回状态:将写入状态返回给应用
3.2.2 写入保护机制

NVRAM管理器提供多种写入保护机制:

  • 静态写保护:通过配置禁止特定块的写入操作
  • 动态写保护:运行时通过API动态开启或关闭块的写保护
  • 写入次数限制:某些块可配置为只允许写入一次(如EOL数据)
  • 写入前校验:对将要写入的数据进行校验,确保有效性

这些保护机制确保了重要数据不会被意外或恶意修改,提高了系统的安全性和可靠性。

3.3 状态转换

NVRAM管理器在运行时有多种状态,并根据外部事件和内部条件进行状态转换:

在这里插入图片描述

3.3.1 主要状态

NVRAM管理器的主要状态包括:

  • 未初始化状态:模块尚未启动,不接受任何请求
  • 初始化中状态:正在加载配置、准备RAM缓存等
  • 空闲状态:等待新的读写请求
  • 执行作业状态:正在处理读写作业
  • 错误处理状态:处理读写过程中的错误
  • 多块处理状态:处理批量读写操作
  • 关机准备状态:准备关机,完成挂起操作
3.3.2 状态转换触发条件

状态转换由多种条件触发:

  • 初始化请求:从未初始化转到初始化中状态
  • 读写请求:从空闲转到执行作业状态
  • 作业完成:从执行作业转回空闲状态
  • 作业失败:从执行作业转到错误处理状态
  • 批量操作请求:从空闲转到多块处理状态
  • 关机请求:从各状态转到关机准备状态
3.3.3 错误处理策略

错误处理状态实现了多种数据恢复策略:

  • 冗余块错误:从备份位置恢复数据
  • 数据集错误:使用默认数据集
  • 校验和错误:尝试自动修复或使用备份
  • 写入错误:重试写入操作或报告错误

这些错误处理策略确保了系统在面对各种故障时能够保持稳定运行,并尽可能地恢复数据。


4. 功能特性

4.1 块管理机制

NVRAM管理器的块管理机制是其核心功能之一,提供了多种管理方式:

4.1.1 标准块

标准块是最基本的NVRAM块类型,适用于没有特殊需求的常规数据存储。其特点是:

  • 结构简单,易于配置和使用
  • 无特殊保护机制,适合一般用途数据
  • 读写操作直接对应物理存储位置
  • 可选配CRC校验增强可靠性

标准块常用于存储非关键性配置参数、统计数据等。

4.1.2 冗余块

冗余块通过存储多个数据副本提供数据保护和自动恢复能力:

  • 在多个物理位置存储相同数据
  • 自动检测数据损坏(通过CRC或其他校验机制)
  • 当主数据损坏时,自动从备份位置恢复
  • 支持后台自动修复损坏的数据副本

冗余块特别适合存储安全关键数据,如防盗系统信息、关键校准参数等。

4.1.3 数据集块

数据集块支持存储多个数据变体,并可在运行时选择:

  • 支持多个数据集(如不同国家、不同车型的配置)
  • 可动态切换当前使用的数据集
  • 包含ROM默认值作为最终备份
  • 适用于需要支持多种配置变体的场景

数据集块常用于支持多种车型或地区变种的ECU,允许在同一硬件上运行不同配置。

4.2 数据保护机制

NVRAM管理器提供多层次的数据保护机制:

4.2.1 写保护

写保护机制防止重要数据被意外修改:

  • 静态写保护:编译时配置的永久写保护
  • 动态写保护:运行时可通过API开启或关闭
  • 适用于EOL数据、校准参数等需保护的数据
4.2.2 数据校验

数据校验确保存储数据的完整性:

  • 支持多种CRC算法(CRC8、CRC16、CRC32)
  • 读取时自动校验,发现错误自动处理
  • 写入时生成校验值,确保数据正确存储
4.2.3 优先级机制

优先级机制确保关键数据优先处理:

  • 多级优先级(立即、标准、低)配置
  • 高优先级作业(如崩溃数据存储)优先执行
  • 关机时确保高优先级作业完成

4.3 错误处理机制

NVRAM管理器实现了全面的错误处理机制:

4.3.1 数据恢复

自动数据恢复是NVRAM管理器的关键特性:

  • 冗余块自动从备份位置恢复
  • 数据集块自动使用默认值
  • 支持配置重试次数,增加恢复成功率
4.3.2 错误通知

错误通知机制确保应用及时了解错误情况:

  • 通过回调函数通知应用程序
  • 提供错误状态查询API
  • 支持块级别和全局错误状态查询
4.3.3 软件更新处理

NVRAM管理器支持软件更新后的数据处理:

  • 通过配置ID检测配置变更
  • 支持软件更新后RAM块自动初始化
  • 保护特定数据(如防盗数据)不被更新覆盖

5. 配置与使用

5.1 配置参数

NVRAM管理器配置主要通过静态配置参数实现:

5.1.1 全局配置

全局配置参数影响整个NVRAM管理器的行为:

  • ConfigId:配置标识符,用于验证与应用的兼容性
  • NumberOfBlockIds:块ID的数量
  • JobPriorityTable:作业优先级表
5.1.2 块配置

每个NVRAM块有自己的配置参数:

  • BlockManagementType:块管理类型(标准/冗余/数据集)
  • BlockSize:RAM块大小
  • BlockPriority:优先级级别
  • WriteProtection:写保护状态
  • MaxNumReadRetries/MaxNumWriteRetries:读写重试次数
  • BlockUseCrc:是否使用CRC校验
  • DatasetSelection:是否支持数据集选择
5.1.3 回调配置

回调函数配置定义了操作完成时的通知机制:

  • InitBlockCallback:块初始化回调
  • JobEndCallback:作业完成回调
  • JobErrorCallback:作业错误回调

5.2 API接口

NVRAM管理器提供了丰富的API接口供应用使用:

5.2.1 初始化接口
NvM_Init(ConfigPtr)
  • 初始化NVRAM管理器,加载配置,准备RAM缓存
5.2.2 基本操作接口
NvM_ReadBlock(BlockId, DataPtr)
NvM_WriteBlock(BlockId, DataPtr)
NvM_RestoreBlockDefaults(BlockId, DataPtr)
  • 读取、写入块数据和恢复默认值
5.2.3 数据集操作接口
NvM_SetDataIndex(BlockId, DataIndex)
NvM_GetDataIndex(BlockId, DataIndexPtr)
  • 设置和获取数据集块的当前索引
5.2.4 保护操作接口
NvM_SetBlockProtection(BlockId, ProtectionEnabled)
  • 动态设置块的写保护状态
5.2.5 多块操作接口
NvM_ReadAll()
NvM_WriteAll()
NvM_CancelAll()
  • 批量读取、写入所有块或取消所有操作
5.2.6 状态查询接口
NvM_GetErrorStatus(BlockId, ErrorStatusPtr)
  • 获取指定块或全局的错误状态

6. 总结

AUTOSAR NVRAM管理器作为服务层的核心组件,提供了全面的非易失性存储器数据管理功能。它具有以下优势:

  • 标准化接口:提供统一的存储接口,简化应用开发
  • 硬件抽象:隔离应用与底层存储硬件,提高可移植性
  • 数据保护:通过冗余存储、校验和和写保护确保数据安全
  • 错误恢复:自动从数据错误中恢复,提高系统鲁棒性
  • 灵活配置:支持多种块类型和配置选项,适应不同应用需求

NVRAM管理器解决了汽车电子控制单元中非易失性数据管理的核心问题,确保关键数据的可靠存储和访问,为汽车功能安全提供了重要支持。

在实际应用中,NVRAM管理器广泛用于存储ECU配置参数、校准数据、运行状态信息、故障码、学习值等关键数据,是现代汽车电子控制系统的重要组成部分。

通过合理配置和使用NVRAM管理器,可以有效提高ECU软件的可靠性、安全性和可维护性,满足AUTOSAR标准化架构的要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiGer666

慧眼~施主!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值