AUTOSAR图解==>AUTOSAR_SWS_NVRAMManager

AUTOSAR 非易失性存储器管理器(NvM)技术详解

AUTOSAR标准非易失性存储器管理模块分析与应用

目录


1. 概述

1.1 NvM模块作用

AUTOSAR非易失性存储器管理器(NvM)是AUTOSAR标准架构中的一个关键基础软件模块,负责管理和抽象ECU中的非易失性存储器访问。它为上层应用软件提供统一的接口来存储和检索持久性数据,同时屏蔽了底层存储介质(如EEPROM或Flash)的具体细节。

NvM模块主要提供以下功能:

  • 数据持久化:在ECU关闭后保持数据
  • 数据完整性:通过CRC校验确保数据完整性
  • 抽象接口:提供统一API,屏蔽底层实现差异
  • 块管理:支持多种类型的数据块管理方式
  • 作业处理:提供异步处理机制和优先级队列
  • 错误处理:提供完善的错误检测与报告机制

1.2 关键术语

在深入了解NvM模块前,需要理解以下关键术语:

  • NVRAM块:NvM模块管理的基本单位,包含各种基本存储对象
  • NV块:存储在非易失性存储器中的数据部分
  • RAM块:存储在RAM中的数据副本
  • ROM块:存储在ROM中的默认数据
  • 管理块:包含块状态、错误信息等管理数据
  • 块管理类型:定义块的处理方式(如冗余、数据集或本地)
  • API配置类:定义模块支持的API级别(1-3)

2. 架构设计

2.1 模块架构

AUTOSAR非易失性存储器管理器在AUTOSAR分层架构中处于内存服务层,与其他模块有明确的交互关系。下图展示了NvM模块的整体架构和接口:

在这里插入图片描述

2.1.1 层次结构分析

NvM模块架构具有以下几个关键层次:

  1. 应用层

    • 应用软件组件:通过RTE调用NvM服务
    • RTE运行环境:转发应用请求到NvM模块
  2. 系统服务层

    • BSW模式管理器(BswM):控制NvM的初始化和多块操作(如ReadAll/WriteAll)
    • 诊断事件管理器(DEM):接收NvM报告的生产错误
    • 默认错误追踪器(DET):接收NvM报告的开发错误
  3. 内存服务层

    • 非易失性存储器管理器(NvM):核心模块,提供数据块管理
    • CRC例程库:为NvM提供数据完整性校验服务
  4. ECU抽象层

    • 存储器抽象接口(MemIf):标准化底层存储设备访问
  5. 微控制器抽象层

    • EEPROM抽象(EA):抽象EEPROM访问
    • 闪存EEPROM仿真(FEE):在Flash上模拟EEPROM行为
  6. 复杂驱动层

    • EEPROM驱动:直接控制EEPROM硬件
    • 闪存驱动:直接控制Flash硬件
2.1.2 模块交互分析
  1. 向上接口

    • 向应用层提供标准化的读写API
    • 通过回调机制通知上层操作完成
    • 向诊断模块报告错误状态
  2. 向下接口

    • 通过MemIf接口抽象底层存储设备
    • 支持多种存储器类型的同时访问
  3. 横向接口

    • 与BSW模式管理器协作处理系统初始化和关闭
    • 利用CRC服务进行数据完整性验证

2.2 数据结构

NvM模块管理的数据具有复杂的结构关系,下图展示了主要数据组件及其关系:

在这里插入图片描述

2.2.1 基本存储对象

NvM模块的数据管理基于以下基本存储对象:

  1. NVRAM块

    • 最基本的管理单元,由多个基本存储对象组成
    • 包含块ID、管理类型、CRC配置等属性
    • 可配置为不同的块管理类型
  2. NV块

    • 存储在非易失性存储器中的数据部分
    • 包含用户数据区、可选的CRC和头部信息
    • 保存静态块ID用于验证
  3. RAM块

    • 存储在RAM中的数据副本
    • 可以是永久分配或临时分配
    • 包含数据有效性状态标志
  4. ROM块

    • 存储在ROM中的默认数据
    • 在NV数据无效或损坏时使用
    • 是可选组件
  5. 管理块

    • 存储块的管理信息
    • 包含错误/状态信息、写保护标志等
    • 位于RAM中
2.2.2 块管理类型

NvM支持三种主要的块管理类型,每种类型有不同的数据处理方式:

  1. 冗余块(NVM_BLOCK_REDUNDANT)

    • 在不同位置存储两个相同的NV块
    • 提高数据可靠性,防止单点故障
    • 读取时选择有效块,写入时更新两个块
  2. 数据集块(NVM_BLOCK_DATASET)

    • 支持多个数据集的选择
    • 通过数据索引选择当前活动数据集
    • 适用于需要多配置管理的场景
  3. 本地块(NVM_BLOCK_NATIVE)

    • 标准单一NV块
    • 最基本的块类型
    • 一对一映射到底层存储
2.2.3 请求队列与处理

NvM模块使用队列机制处理异步请求:

  1. 请求队列

    • 管理异步操作请求
    • 可配置为优先级处理或FCFS(先进先出)
    • 对于高优先级请求(如立即写入)有单独队列
  2. 块请求状态

    • 跟踪每个块操作的结果
    • 包括成功(NVM_REQ_OK)、失败(NVM_REQ_NOT_OK)、挂起(NVM_REQ_PENDING)等多种状态
    • 可通过API查询

3. 状态管理

3.1 块状态转换

NvM模块中的数据块在生命周期中会经历多种状态转换,下图展示了这些状态及其转换关系:

在这里插入图片描述

3.1.1 主要状态说明
  1. RAM块无效状态

    • 系统初始化后的初始状态
    • RAM数据不可用,需要从NV加载或恢复默认值
    • 包含NV块有效和NV块无效两个子状态
  2. RAM块有效状态

    • RAM数据已验证且可访问
    • 可能与NV内容同步或不同步
    • 应用可安全读取此状态下的数据
  3. RAM块写保护状态

    • 块被写保护,拒绝写入请求
    • 可由一次性写入块配置触发
    • 也可由应用显式设置
  4. 作业处理中状态

    • 正在执行读取、写入、恢复默认值等操作
    • 是短暂的中间状态
    • 完成后转为有效或无效状态
  5. 块锁定状态

    • 暂时不接受任何操作请求
    • NvM_SetBlockLockStatus API控制
    • 可解锁回到有效状态
  6. 错误状态

    • 表示数据出现错误
    • 包括CRC错误、块不一致、冗余失败等
    • 错误会报告给DEM模块
3.1.2 状态转换路径
  1. 初始化路径

    • 系统启动时,所有块初始为无效状态
    • 通过NvM_ReadAll操作批量加载数据
  2. 正常读取路径

    • 无效状态→作业处理中→有效状态(读取成功)
    • 无效状态→作业处理中→无效状态(读取失败且无默认值)
    • 无效状态→作业处理中→有效状态(从ROM恢复默认值)
  3. 写入路径

    • 有效状态→作业处理中→有效状态(写入成功)
    • 有效状态→作业处理中→写保护状态(一次性写入块写入成功)
  4. 错误处理路径

    • 作业处理中→错误状态(CRC校验失败等)
    • 错误状态→无效状态(系统重置)
    • 错误状态→有效状态(恢复默认值)
  5. 保护机制路径

    • 有效状态→写保护状态(设置写保护)
    • 有效状态→块锁定状态(设置块锁定)
    • 写保护状态→有效状态(解除写保护,仅适用于非一次性写入块)
    • 块锁定状态→有效状态(解除块锁定)

4. 操作流程

4.1 读写操作序列

NvM模块的读写操作涉及多个组件的交互和一系列处理步骤,下图展示了这些操作的序列流程:

在这里插入图片描述

4.1.1 读取操作流程

读取操作从应用或BSW组件发起,经历以下关键步骤:

  1. 请求接收与验证

    • 应用通过NvM_ReadBlock API发起读取请求
    • NvM验证块ID和参数有效性
    • 参数有效时接受请求并返回E_OK
  2. 作业处理

    • NvM_MainFunction中处理队列中的读取请求
    • 获取目标块的配置信息
    • 根据配置决定使用永久RAM块还是临时RAM块
  3. 存储设备读取

    • 通过MemIf_Read接口访问底层存储设备
    • MemIf根据设备ID选择合适的驱动
    • 驱动执行实际的硬件读取操作
  4. 数据验证

    • 如果块配置了CRC校验,计算并比较CRC
    • CRC正确时验证数据有效性
    • CRC错误时报告完整性错误
  5. 结果处理

    • 读取成功时:更新RAM块状态为有效,通知应用
    • 读取失败时:
      • 有默认ROM数据:加载默认数据,通知结果(NVM_REQ_RESTORED_FROM_ROM)
      • 无默认数据:设置RAM块为无效,通知失败(NVM_REQ_NOT_OK)
  6. 同步机制处理

    • 如果配置了显式同步回调(NvMReadRamBlockFromNvM),则调用此回调
    • 回调负责将数据复制到应用的RAM块
4.1.2 写入操作流程

写入操作涉及数据从RAM保存到非易失性存储器,包括以下步骤:

  1. 请求接收与保护检查

    • 应用通过NvM_WriteBlock API发起写入请求
    • NvM检查块的写保护和锁定状态
    • 未保护/锁定时接受请求并返回E_OK
  2. 作业处理准备

    • NvM_MainFunction中处理队列中的写入请求
    • 获取块信息和配置
  3. CRC处理

    • 如果配置了CRC校验,计算新数据的CRC
    • 如果启用了CRC比较机制且CRC未变化,可跳过实际写入
  4. 多块类型处理

    • 冗余块:需要写入两个NV块
    • 数据集块:写入当前选定的数据集
    • 本地块:直接写入单一NV块
  5. 结果处理

    • 写入成功:更新RAM块状态(有效且已同步)
    • 一次性写入块:设置写保护标志
    • 写入失败:
      • 未超过重试次数:在下一周期重试
      • 超过重试次数:通知失败(NVM_REQ_NOT_OK)
  6. 同步机制处理

    • 如果配置了显式同步回调(NvMWriteRamBlockToNvM),则调用此回调
    • 回调负责提供一致的数据副本给NvM

5. 总结

AUTOSAR非易失性存储器管理器(NvM)是AUTOSAR架构中关键的内存服务模块,它通过提供抽象且标准化的接口,简化了ECU中持久数据的管理。本文详细分析了NvM模块的架构、数据结构、状态管理和操作流程,揭示了其内部工作机制和与其他模块的交互关系。

NvM模块的主要优势包括:

  • 标准化接口:提供统一的API,简化应用开发
  • 多种块管理类型:支持冗余、数据集和本地块,满足不同应用需求
  • 数据完整性保护:通过CRC校验确保数据可靠性
  • 灵活的配置选项:可根据项目需求裁剪功能
  • 错误检测与处理:提供完善的错误报告机制

通过合理配置和使用NvM模块,可以实现ECU中配置数据、校准参数和运行状态等重要信息的可靠存储和管理,为AUTOSAR系统提供稳定的数据持久化基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

KaiGer666

慧眼~施主!!!

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

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

打赏作者

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

抵扣说明:

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

余额充值