Files
autosar_standard_spec_v4.4/Memory/AUTOSAR_SWS_NVRAMManager.md
T

32 KiB

NVRAM 管理器规范

文档标题: Specification of NVRAM Manager AUTOSAR CP Release: 4.4.0 文档编号: 033 文档类型: SWS (Software Specification)


文档标识

项目 内容
Document Title Specification of NVRAM Manager
Document Owner AUTOSAR
Document Responsibility AUTOSAR
Document Identification No 033
Document Status Final
Part of AUTOSAR Standard Classic Platform
Part of Standard Release 4.4.0

文档变更历史

日期 版本 变更者 变更描述
2018-10-31 4.4.0 AUTOSAR Release Management 移除 NvM_GetActiveService API;完全移除 EcuMfixed;变更单/多块回调
2017-12-08 4.3.1 AUTOSAR Release Management 写保护和擦除请求对 NvMWriteBlockOnce 块的更正;数据集块隐式恢复的澄清
2016-11-30 4.3.0 AUTOSAR Release Management 新增 NvM_FirstInitAll 和 NvM_GetActiveService 功能;NvM_SetRamBlockStatus 也适用于显式同步块;澄清 NvM 与 BswM 之间的交互
2015-07-31 4.2.2 AUTOSAR Release Management 澄清恢复块默认数据和处理 MEMIF_BLOCK_INVALID 作业结果的行为;增加块状态相关附加信息(章节 7.2.2.14 及相关子章节);更新 NvM_Init 和 NvM_ValidateAll 函数原型;调试支持标记为过时
2014-10-31 4.2.1 AUTOSAR Release Management 详细的生产错误通过/失败条件;增加 NvM_ValidateAll 功能;更新 Init 和 SingleBlock 回调的返回值
2014-03-31 4.1.3 AUTOSAR Release Management 移除显式同步在配置的重试次数后失败时的作业延后;更新服务接口表;重命名配置参数 NvMRamBlockHeaderInclude 为 NvMBlockHeaderInclude
2013-10-31 4.1.2 AUTOSAR Release Management 增加 NvMRamBlockHeaderInclude 和 NvMMainFunctionPeriod 配置参数;修复 NvMWriteVerificationDataSize 和 NvMNvramBlockIdentifier 参数的错误
2013-03-15 4.1.1 AUTOSAR Administration 增加 NvM_ReadPRAMBlock、NvM_WritePRAMBlock 和 NvM_RestorePRAMBlockDefaults API;生产错误和扩展生产错误分类;显式同步机制澄清;服务建模:引入服务接口的形式化描述
2011-12-22 4.0.3 AUTOSAR Administration 增加 NvM_CancelJobs 行为;增加 NvM 和 BswM 交互;增加 NvM_SetBlockLockStatus API 功能描述
2010-09-30 3.1.5 AUTOSAR Administration 指定防止关机期间数据丢失的行为;DEM 用于生产错误的引用,新配置容器 NvmDemEventParameterRefs;NvMMaxNoOfWriteRetries 重命名为 NvMMaxNumOfWriteRetries;空指针处理变更;新增 DET 错误 NVM_E_PARAM_POINTER
2010-02-02 3.1.4 AUTOSAR Administration 影响本文档的功能:调试概念、错误处理概念、内存相关概念;主要功能:静态块 ID 检查、写验证、读重试、缓冲读/写操作
2008-08-13 3.1.1 AUTOSAR Administration 技术办公室 SWS 改进;增加配置参数的需求 ID;更精确指定 RAM 块状态管理;NVRAM 管理器不再支持非顺序 NVRAM 块 ID
2007-12-21 3.0.1 AUTOSAR Administration 法律免责声明修订
2007-01-24 2.1.15 AUTOSAR Administration 第 11 章添加 AUTOSAR 服务描述;指定回调函数的可重入性;添加内存硬件抽象寻址方案细节
2006-05-16 2.0 AUTOSAR Administration 文档结构适配 Release 2.0 SWS 模板;第 10 章重大变更
2005-05-31 1.0 AUTOSAR Administration 初始版本发布

目录

  1. 介绍与功能概述
  2. 缩略语
  3. 相关文档
  4. 约束与假设
  5. 模块依赖
  6. 需求追溯
  7. 功能规范
  8. API 规范
  9. 时序图
  10. 配置规范
  11. 不适用需求

1 介绍与功能概述

本规范描述 AUTOSAR 基础软件模块 NVRAM Manager (NvM) 的功能、API 和配置。

NvM 模块应提供服务,根据汽车环境中数据的个性化要求,确保 NV(非易失)数据的存储和维护。NvM 模块应能够管理 EEPROM 和/或 Flash EEPROM 仿真设备的 NV 数据。

NvM 模块应提供管理和维护 NV 数据(init/read/write/control)所需的同步/异步服务。

不同块之间的关系如下图所示:

            NVRAM Block (abstract)
              - Block Management Type
              {exact composition depends on Management type}
                       |
        ┌─────────────┼─────────────┐
        │             │             │
    NV Block      RAM Block     ROM Block    Administrative Block
        │             │             │             │
        └──────── realize ─────────┴─────────────┘
                       │
            Basic Storage Object
                       │
                   user data
                   NV Data

2 缩略语

缩略语 描述
Basic Storage Object(基础存储对象) "NVRAM 块"的最小实体。多个"基础存储对象"可用于构建一个 NVRAM 块。"基础存储对象"可驻留在不同内存位置(RAM/ROM/NV 存储器)。
NVRAM Block 管理并存储 NV 数据块所需的整个结构。
NV data 要存储于非易失存储器的数据。
Block Management Type NVRAM 块的类型。取决于(可配置的)NVRAM 块由不同强制/可选基础存储对象的组成及后续处理。
RAM Block "基础存储对象"。表示驻留在 RAM 中的"NVRAM 块"的部分。 [SWS_NvM_00126]
ROM Block "基础存储对象"。表示驻留在 ROM 中的"NVRAM 块"的部分。"ROM 块"是"NVRAM 块"的可选部分。[SWS_NvM_00020]
NV Block "基础存储对象"。表示驻留在 NV 存储器中的"NVRAM 块"的部分。"NV 块"是"NVRAM 块"的强制部分。[SWS_NvM_00125]
NV Block Header 启用"静态块 ID"机制时 NV 块包含的附加信息。
Administrative Block "基础存储对象"。驻留在 RAM 中。"管理块"是"NVRAM 块"的强制部分。[SWS_NvM_00135]
DET Default Error Tracer — 开发错误报告的模块
DEM Diagnostic Event Manager — 生产相关错误报告的模块
NV Non volatile(非易失)
FEE Flash EEPROM Emulation
EA EEPROM Abstraction
FCFS First come first served(先到先服务)

3 相关文档

3.1 输入文档

[1] List of Basic Software Modules — AUTOSAR_TR_BSWModuleList.pdf [2] Layered Software Architecture — AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf [3] General Requirements on Basic Software Modules — AUTOSAR_SRS_BSWGeneral.pdf [4] Requirements on Memory Services — AUTOSAR_SRS_MemoryServices.pdf [5] Specification of EEPROM Abstraction — AUTOSAR_SWS_EEPROMAbstraction [6] Specification of Flash EEPROM Emulation — AUTOSAR_SWS_FlashEEPROMEmulation [7] Specification of Memory Abstraction Interface — AUTOSAR_SWS_MemoryAbstractionInterface [8] Specification of Memory Mapping — AUTOSAR_SWS_MemoryMapping [9] Virtual Functional Bus — AUTOSAR_EXP_VFB.pdf [10] Software Component Template — AUTOSAR_TPS_SoftwareComponentTemplate [11] Specification of RTE Software — AUTOSAR_SWS_RTE.pdf [12] Specification of ECU Configuration — AUTOSAR_TPS_ECUConfiguration.pdf [13] Basic Software Module Description Template — AUTOSAR_TPS_BSWModuleDescriptionTemplate [14] Specification of CRC Routines — AUTOSAR_SWS_CRCLibrary [15] General Specification of Basic Software Modules — AUTOSAR_SWS_BSWGeneral.pdf

3.2 相关规范

AUTOSAR 提供基础软件模块通用规范 [15](SWS BSW General),也适用于 NVRAM Manager。因此,SWS BSW General 规范应被视为 NVRAM Manager 的附加和必需规范。


4 约束与假设

4.1 限制

限制主要由"块管理类型"的有限数量及其对 NV 数据的个性化处理给出。这些限制可通过用户定义管理信息减少,这些信息可作为实际 NV 数据的结构化部分存储。

4.2 适用车型领域

无限制。

4.3 冲突

无。


5 模块依赖

本节描述与基础软件内其他模块的关系。

5.1 文件结构

5.1.1 头文件结构

包含文件结构如下:

[SWS_NvM_00554] ⌈NvM 模块应包含 NvM.h、Dem.h、MemIf.h。⌋ [SWS_NvM_00691] ⌈上层应仅包含 NvM.h。⌋

5.2 内存抽象模块

内存抽象模块将 NvM 模块与硬件相关的下层驱动抽象。内存抽象模块为 NvM 模块发起的每个块访问提供运行时转换,以选择所有配置的 EEPROM 或 Flash 存储设备唯一的对应驱动函数。通过为每个 NVRAM 块配置的 NVRAM 块设备 ID 选择内存抽象模块。

5.3 CRC 模块

NvM 模块使用 CRC 生成例程(8/16/32 位),作为可配置选项,用于检查和生成 NVRAM 块的 CRC。CRC 例程必须由外部提供。

5.4 底层驱动能力

必须为每个已配置的 NVRAM 设备(例如内部或外部 EEPROM 或 Flash 设备)提供一组底层驱动函数。每组驱动函数内的唯一驱动函数通过内存硬件抽象模块在运行时选择。每组驱动函数必须包含所需的所有函数,用于写入、读取或维护(例如擦除)已配置的 NVRAM 设备。


6 需求追溯

(主要追溯关系,完整表见原文 PDF 第 6 章。涉及大量 SRS_BSW_、SRS_Mem_、SRS_LIBS_* 等需求。)

需求 满足者
SRS_BSW_00101 SWS_NvM_00399, 00400
SRS_BSW_00323 (参数检查) SWS_NvM_00027
SRS_BSW_00327 (错误命名) SWS_NvM_00023, 00027
SRS_BSW_00337 (开发错误分类) SWS_NvM_00023
SRS_BSW_00406 (初始化状态) SWS_NvM_00023, 00027, 00399, 00400
SRS_BSW_00414 (Init 配置指针) SWS_NvM_00447
SRS_BSW_00429 (OS 访问限制) SWS_NvM_00332
SRS_Mem_00011 (硬件独立) SWS_NvM_00157
SRS_Mem_00013 (并发请求) SWS_NvM_00162, 00698, 00699
SRS_Mem_00016 (读功能) SWS_NvM_00010, 00051, 00122, 00195, 00196, 00454 等
SRS_Mem_00017 (写功能) SWS_NvM_00051, 00122, 00210, 00410, 00411 等
SRS_Mem_00018 (从 ROM 默认值恢复) SWS_NvM_00012, 00051, 00122, 00266, 00267 等
SRS_Mem_00020 (状态读出) SWS_NvM_00015, 00451
SRS_Mem_00027 (隐式访问) SWS_NvM_00442
SRS_Mem_00030 (一致性检查) SWS_NvM_00164 等
SRS_Mem_00038 (错误隔离) SWS_NvM_00910, 00911
SRS_Mem_00041 (配置时声明内存需求) SWS_NvM_00xxx
SRS_Mem_08001 (一致性检查) SWS_NvM_00164, 00165
SRS_Mem_08007 (数据集选择) SWS_NvM_00448
SRS_Mem_08009 (默认写保护) SWS_NvM_00xxx
SRS_Mem_08010 (从 ROM 默认数据恢复) SWS_NvM_00171, 00172
SRS_Mem_08011 (无效化块) SWS_NvM_00xxx
SRS_Mem_08542 (优先级化) SWS_NvM_00032, 00378, 00564
SRS_Mem_08545 (修改/未修改标记) SWS_NvM_00240, 00241, 00405
SRS_Mem_08549 (软件更新后初始化) SWS_NvM_00171

完整追溯表见原文 PDF。


7 功能规范

7.1 基本架构指南

7.1.1 层结构

NvM 模块位于 AUTOSAR 服务层,通过 Memory Abstraction Interface (MemIf) 访问 EA 和 FEE 模块。

7.1.2 内存硬件抽象寻址方案

[SWS_NvM_00069] ⌈通过提供 Block ID 选择 NvM 模块 API 处理的 NVRAM 块。⌋

7.1.3 基础存储对象

NVRAM 块由以下基础存储对象组成:

  • NV Block:驻留在 NV 存储器(强制)
  • RAM Block:驻留在 RAM(强制)
  • ROM Block:驻留在 ROM(可选)
  • Administrative Block:驻留在 RAM(强制)
  • NV Block Header(可选,如启用静态块 ID)
NV 块布局
┌─────────────────┐
│ NV block header │ (可选)
├─────────────────┤
│  NV block data  │
├─────────────────┤
│  NV block CRC   │ (可选)
└─────────────────┘

7.1.4 块管理类型

7.1.4.1 块管理类型概述

[SWS_NvM_00137] ⌈NvM 模块实现应支持以下 NVRAM 存储类型:

  • NVM_BLOCK_NATIVE
  • NVM_BLOCK_REDUNDANT
  • NVM_BLOCK_DATASET
7.1.4.2 NVRAM 块结构
类型 NV 块 RAM 块 ROM 块 管理块
NATIVE 1 1 0..1 1
REDUNDANT 2 1 0..1 1
DATASET 1..(m<256)* 1 0..n 1

*数据集数量取决于配置参数 NvMDatasetSelectionBits

7.1.4.4 Native NVRAM 块

最简单的块管理类型,以最少开销存储/检索 NV 存储器。

7.1.4.5 Redundant NVRAM 块

提供增强的容错性、可靠性和可用性,增加对数据损坏的抵抗力。包含两个 NV 块。

[SWS_NvM_00531] ⌈如果 Redundant NVRAM 块关联的一个 NV 块被认为无效(如读取期间),应尝试使用未损坏 NV 块的数据恢复。⌋ [SWS_NvM_00546] ⌈如果恢复失败,应使用代码 NVM_E_LOSS_OF_REDUNDANCY 报告给 DEM。⌋

7.1.4.6 Dataset NVRAM 块

等大小数据块(NV/ROM)的数组。应用一次可访问恰好一个元素。

[SWS_NvM_00006] ⌈Dataset NVRAM 块由多个 NV 用户数据、(可选)CRC 区域、(可选)NV 块头部、一个 RAM 块和一个管理块组成。⌋ [SWS_NvM_00444] ⌈配置数据集总数(NV+ROM 块)必须在 1..255 范围内。⌋ [SWS_NvM_00377] ⌈NvM 模块应将对 ROM 块的写视为对受保护 NV 块的写。⌋

7.1.4.7 NVRAM 管理器 API 配置类

[SWS_NvM_00149] ⌈三种 API 配置类:

  • API 配置类 3:所有指定的 API 调用可用。支持最大功能。
  • API 配置类 2:可用中间集合的 API 调用。
  • API 配置类 1:仅提供最少 API 调用集合,适合具有有限硬件资源的系统。 ⌋

7.1.5 扫描顺序/优先级方案

[SWS_NvM_00032] ⌈NvM 模块应支持基于优先级的作业处理。⌋ [SWS_NvM_00378] ⌈优先级处理使用两个队列:一个用于立即写作业(崩溃数据),另一个用于所有其他作业。⌋ [SWS_NvM_00380] ⌈源自 NvM_ReadAll 和 NvM_WriteAll 的多块请求作业队列长度应为 1。⌋ [SWS_NvM_00381] ⌈NvM 模块不应被其他请求中断源自 NvM_ReadAll 请求的作业。⌋

7.2 一般行为

7.2.1 功能需求

[SWS_NvM_00383] ⌈对于每个异步请求,作业完成后通知调用者应为可配置选项。⌋ [SWS_NvM_00038] ⌈NvM 模块仅提供访问 NVRAM 和共享内存(RAM)中块的隐式方式。⌋ [SWS_NvM_00386] ⌈NvM 模块应接受多个异步"单块"请求,只要不发生队列溢出。⌋ [SWS_NvM_00040] ⌈NvM 模块应为 NV 存储器中保存的数据实现一致性/完整性检查的隐式机制。⌋

7.2.2 设计注释

7.2.2.1 NVRAM 管理器启动

[SWS_NvM_00693] ⌈NvM_Init 应由 BSW Mode Manager 独占调用。⌋ [SWS_NvM_00091] ⌈由于 ECU 启动时间的强约束,NvM_Init 请求不应包含已配置 NVRAM 块的初始化。⌋ [SWS_NvM_00158] ⌈RAM 数据块的初始化应由另一个请求 NvM_ReadAll 完成。⌋

7.2.2.2 NVRAM 管理器关机

[SWS_NvM_00092] ⌈基本关机过程应由 NvM_WriteAll 请求完成。⌋

7.2.2.3 (准)并行写访问

[SWS_NvM_00162] ⌈NvM 模块应通过使用排队机制的异步接口接收请求。NvM 模块应根据优先级串行处理所有请求。⌋

7.2.2.4 NVRAM 块一致性检查

[SWS_NvM_00164] ⌈NvM 模块应提供隐式技术检查 NVRAM 块的数据一致性。⌋ [SWS_NvM_00571] ⌈NVRAM 块的数据一致性检查应通过对其对应 NV 块的 CRC 重新计算完成。⌋

7.2.2.5 错误恢复

[SWS_NvM_00047] ⌈NvM 模块应提供错误恢复技术。错误恢复取决于 NVRAM 块管理类型。⌋ [SWS_NvM_00168] ⌈NvM 模块应通过执行写重试为写提供错误恢复,无论 NVRAM 块管理类型如何。⌋ [SWS_NvM_00169] ⌈NvM 模块应在启动时为所有具有已配置 RAM 块 CRC 的 NVRAM 块提供 RAM 块重新验证失败情况下的读错误恢复。⌋

7.2.2.6 用 ROM 数据恢复 RAM 块

[SWS_NvM_00171] ⌈NvM 模块应提供隐式和显式恢复技术,在 NV 块出现不可恢复数据不一致情况下,将 ROM 数据恢复到对应 RAM 块。⌋

7.2.2.14 RAM 块状态(主要状态)

RAM 块通过管理块中的状态信息进行管理。主要状态:

  • INVALID:数据无效
  • CHANGED:数据已修改,需写回
  • VALID/UNCHANGED:数据有效且未修改

7.3 错误分类

7.3.1 开发错误

错误类型 错误代码 值[hex]
API 服务未初始化即调用 NVM_E_NOT_INITIALIZED 0x14
块标识符无效 NVM_E_PARAM_BLOCK_ID 0x0a
数据指针无效 NVM_E_PARAM_POINTER 0x0b
配置 ID 无效 NVM_E_PARAM_BLOCK_TYPE 0x1c
数据索引超出范围 NVM_E_PARAM_BLOCK_DATA_IDX 0x0d

7.3.2 运行时错误

无运行时错误规定。

7.3.3 瞬态故障

无瞬态故障规定。

7.3.4 生产错误

错误类型 错误代码
已检测到完整性失败 NVM_E_INTEGRITY_FAILED
已检测到冗余丢失 NVM_E_LOSS_OF_REDUNDANCY
写入失败 NVM_E_REQ_FAILED

7.3.5 扩展生产错误

包括多种检测特定情况的扩展生产错误。

7.4 错误检测

详见原文 PDF 第 7.4 章。


8 API 规范

8.1 API

8.1.1 导入的类型

[SWS_NvM_00446] ⌈

模块 头文件 导入类型
Dem Rte_Dem_Type.h Dem_EventIdType, Dem_EventStatusType
MemIf MemIf.h MemIf_JobResultType, MemIf_ModeType, MemIf_StatusType
Std_Types StandardTypes.h Std_ReturnType, Std_VersionInfoType

8.1.2 类型定义

NvM_ConfigType
内容
Name NvM_ConfigType
Type Structure
Range 实现特定
Description NvM 模块的配置数据结构。
NvM_MultiBlockRequestType
内容
Type Enumeration
Range NVM_READ_ALL (0x00); NVM_WRITE_ALL (0x01); NVM_VALIDATE_ALL (0x02); NVM_FIRST_INIT_ALL (0x03); NVM_CANCEL_WRITE_ALL (0x04)
Description 标识通过回调函数或向 BswM 报告时多块上执行的请求类型。
NvM_RequestResultType
内容
Type Enumeration
Range NVM_REQ_OK; NVM_REQ_NOT_OK; NVM_REQ_PENDING; NVM_REQ_INTEGRITY_FAILED; NVM_REQ_BLOCK_SKIPPED; NVM_REQ_NV_INVALIDATED; NVM_REQ_CANCELED; NVM_REQ_REDUNDANCY_FAILED; NVM_REQ_RESTORED_FROM_ROM
NvM_BlockIdType

uint16 — NVRAM 块标识符。

8.1.3 函数定义

8.1.3.1 同步请求

8.1.3.1.1 NvM_Init
void NvM_Init(const NvM_ConfigType* ConfigPtr)
内容
Service ID[hex] 0x00
Sync/Async Synchronous
Description 用于重置所有内部变量的服务。

[SWS_NvM_00399] ⌈应重置所有内部变量(如队列、请求标志、状态机)为初始值。应内部信号 "INIT DONE"。⌋ [SWS_NvM_00400] ⌈不应修改永久 RAM 块内容或调用显式同步回调,这应在 NvM_ReadAll 上完成。⌋

8.1.3.1.2 NvM_SetDataIndex
Std_ReturnType NvM_SetDataIndex(NvM_BlockIdType BlockId, uint8 DataIndex)
内容
Service ID[hex] 0x01
Sync/Async Synchronous
Reentrancy Reentrant
Description 设置数据集 NVRAM 块的 DataIndex 的服务。
8.1.3.1.3 NvM_GetDataIndex
Std_ReturnType NvM_GetDataIndex(NvM_BlockIdType BlockId, uint8* DataIndexPtr)
内容
Service ID[hex] 0x02
Sync/Async Synchronous
Description 获取数据集 NVRAM 块当前设置的 DataIndex。
8.1.3.1.4 NvM_SetBlockProtection
Std_ReturnType NvM_SetBlockProtection(NvM_BlockIdType BlockId, boolean ProtectionEnabled)
内容
Service ID[hex] 0x03
Sync/Async Synchronous
Description 设置/重置 NV 块的写保护。
8.1.3.1.5 NvM_GetErrorStatus
Std_ReturnType NvM_GetErrorStatus(NvM_BlockIdType BlockId, NvM_RequestResultType* RequestResultPtr)
内容
Service ID[hex] 0x04
Sync/Async Synchronous
Description 读取块相关错误/状态信息的服务。
8.1.3.1.6 NvM_GetVersionInfo
void NvM_GetVersionInfo(Std_VersionInfoType* versioninfo)
内容
Service ID[hex] 0x0f
8.1.3.1.7 NvM_SetRamBlockStatus
Std_ReturnType NvM_SetRamBlockStatus(NvM_BlockIdType BlockId, boolean BlockChanged)
内容
Service ID[hex] 0x05
Description 设置永久 RAM 块或显式同步状态。
8.1.3.1.8 NvM_SetBlockLockStatus
void NvM_SetBlockLockStatus(NvM_BlockIdType BlockId, boolean BlockLocked)
内容
Service ID[hex] 0x13
Description 设置 RAM 块的锁定状态。
8.1.3.1.9 NvM_CancelJobs
Std_ReturnType NvM_CancelJobs(NvM_BlockIdType BlockId)
内容
Service ID[hex] 0x10
Description 取消与 NVRAM 块关联的所有未处理作业。

8.1.3.2 异步单块请求

8.1.3.2.1 NvM_ReadBlock
Std_ReturnType NvM_ReadBlock(NvM_BlockIdType BlockId, void* NvM_DstPtr)
内容
Service ID[hex] 0x06
Sync/Async Asynchronous
Description 读取 NVRAM 块的服务。
8.1.3.2.2 NvM_WriteBlock
Std_ReturnType NvM_WriteBlock(NvM_BlockIdType BlockId, const void* NvM_SrcPtr)
内容
Service ID[hex] 0x07
Sync/Async Asynchronous
Description 写入 NVRAM 块的服务。
8.1.3.2.3 NvM_RestoreBlockDefaults
Std_ReturnType NvM_RestoreBlockDefaults(NvM_BlockIdType BlockId, void* NvM_DestPtr)
内容
Service ID[hex] 0x08
Description 从 ROM 默认数据恢复 NVRAM 块的服务。
8.1.3.2.4 NvM_EraseNvBlock
Std_ReturnType NvM_EraseNvBlock(NvM_BlockIdType BlockId)
内容
Service ID[hex] 0x09
Description 擦除与 NVRAM 块关联的 NV 块。
8.1.3.2.5 NvM_InvalidateNvBlock
Std_ReturnType NvM_InvalidateNvBlock(NvM_BlockIdType BlockId)
内容
Service ID[hex] 0x0b
Description 使与 NVRAM 块关联的 NV 块无效。
8.1.3.2.6 NvM_ReadPRAMBlock
Std_ReturnType NvM_ReadPRAMBlock(NvM_BlockIdType BlockId)
内容
Service ID[hex] 0x16
Description 通过永久 RAM 块读取 NVRAM 块的服务。
8.1.3.2.7 NvM_WritePRAMBlock
Std_ReturnType NvM_WritePRAMBlock(NvM_BlockIdType BlockId)
内容
Service ID[hex] 0x17
Description 通过永久 RAM 块写入 NVRAM 块。
8.1.3.2.8 NvM_RestorePRAMBlockDefaults
Std_ReturnType NvM_RestorePRAMBlockDefaults(NvM_BlockIdType BlockId)
内容
Service ID[hex] 0x18
Description 将 ROM 默认数据恢复到永久 RAM 块。

8.1.3.3 异步多块请求

NvM_ReadAll
void NvM_ReadAll(void)
内容
Service ID[hex] 0x0c
Description 启动所有 NVRAM 块的多块读取。在 ECU 启动期间由 BSW Mode Manager 调用。
NvM_WriteAll
void NvM_WriteAll(void)
内容
Service ID[hex] 0x0d
Description 启动所有 NVRAM 块的多块写入。在 ECU 关机期间由 BSW Mode Manager 调用。
NvM_CancelWriteAll
void NvM_CancelWriteAll(void)
内容
Service ID[hex] 0x0e
Description 中止 NvM_WriteAll 操作。
NvM_ValidateAll
void NvM_ValidateAll(void)
内容
Service ID[hex] 0x19
Description 验证 RAM 块,使其在 NvM_WriteAll 期间被处理。
NvM_FirstInitAll
void NvM_FirstInitAll(void)
内容
Service ID[hex] 0x1a
Description 对所有选定的块执行首次初始化。

8.1.4 期望接口

强制接口
API 函数 头文件 描述
MemIf_Read MemIf.h 从内存抽象模块读取
MemIf_Write MemIf.h 写入内存抽象模块
MemIf_Cancel MemIf.h 取消正在进行的作业
MemIf_GetStatus MemIf.h 获取状态
MemIf_GetJobResult MemIf.h 获取作业结果
MemIf_SetMode MemIf.h 设置模式
MemIf_InvalidateBlock MemIf.h 使块无效
MemIf_EraseImmediateBlock MemIf.h 擦除立即数据块
Crc_CalculateCRC8/16/32 Crc.h CRC 计算
Dem_SetEventStatus Dem.h 报告 DEM 状态
可选接口
API 函数 头文件 描述
Det_ReportError Det.h 报告开发错误
BswM_NvM_CurrentJobMode BswM_NvM.h 通知 BswM 当前作业模式
BswM_NvM_CurrentBlockMode BswM_NvM.h 通知 BswM 当前块模式
可配置接口

回调函数(由 NvM 用户配置):

  • NvMInitBlockCallback:用于提供默认初始化数据
  • NvMSingleBlockCallback:单块请求完成回调
  • NvMReadRamBlockFromNvCallback:显式同步读回调
  • NvMWriteRamBlockToNvCallback:显式同步写回调
  • NvM_MultiBlockCallback:多块请求完成回调

8.1.5 API 概览

类型 API
Type 1 (同步) NvM_SetDataIndex, NvM_GetDataIndex, NvM_SetBlockProtection, NvM_GetErrorStatus, NvM_SetRamBlockStatus, NvM_SetBlockLockStatus
Type 2 (异步单块) NvM_ReadBlock, NvM_WriteBlock, NvM_RestoreBlockDefaults, NvM_EraseNvBlock, NvM_InvalidateNvBlock, NvM_CancelJobs, NvM_ReadPRAMBlock, NvM_WritePRAMBlock, NvM_RestorePRAMBlockDefaults
Type 3 (异步多块) NvM_ReadAll, NvM_WriteAll, NvM_CancelWriteAll, NvM_ValidateAll, NvM_FirstInitAll
Type 4 (初始化) NvM_Init

8.2 服务接口

8.2.1 客户端-服务端接口

定义了多个 AUTOSAR 服务接口供 RTE 使用:

  • NvMService
  • NvMAdminService
  • NvMNotifyInitBlock
  • NvMNotifyJobFinished
  • NvMServiceMultiBlock

8.2.2 实现数据类型

类型 描述
NvM_BlockIdType NVRAM 块 ID(uint16)
NvM_RequestResultType 请求结果枚举

8.2.3 端口

NvM 提供以下端口:

  • 单块 R/W/Restore 操作端口
  • 状态查询端口
  • 通知端口

8.5 调度函数

NvM_MainFunction

void NvM_MainFunction(void)
内容
Service ID[hex] 0x11
Description NvM 主函数,周期调用以处理排队的作业。
Available via SchM_NvM.h

9 时序图

9.1 同步调用

  • NvM_Init
  • NvM_SetDataIndex
  • NvM_GetDataIndex
  • NvM_SetBlockProtection
  • NvM_GetErrorStatus
  • NvM_GetVersionInfo

9.2 异步调用

9.2.1 带轮询的异步调用

Caller            NvM           Memory
  │ NvM_Request() ──►│              │
  │ E_OK             │              │
  │ ◄────────────────│              │
  │                  │ NvM_MainFunction
  │                  │              │
  │ NvM_GetErrorStatus()             │
  │ ──────────────►  │              │
  │ NVM_REQ_PENDING  │              │
  │ ◄────────────────│              │
  │                  │ MemIf_Operation
  │                  │ ──────────►  │
  │                  │   完成通知   │
  │                  │ ◄────────────│
  │ NvM_GetErrorStatus()             │
  │ ──────────────►  │              │
  │ NVM_REQ_OK       │              │
  │ ◄────────────────│              │

9.2.2 带回调的异步调用

类似上,但 NvM 通过 NvMSingleBlockCallback 通知调用者,而非由调用者轮询。

9.2.3 多块请求的取消

NvM_CancelWriteAll 中止 NvM_WriteAll 中的剩余块。当前块完成处理。

9.2.4 BswM 交互

NvM 通过 BswM_NvM_CurrentJobModeBswM_NvM_CurrentBlockMode 通知 BSW Mode Manager。


10 配置规范

10.1 如何阅读本章

详见 SWS_BSWGeneral 第 10.1 章。

10.2 容器与配置参数

10.2.1 NvM

内容
SWS Item ECUC_NvM_00043
Module Name NvM
Module Description NvM 模块配置。
Post-Build Variant Support true
Supported Config Variants VARIANT-POST-BUILD, VARIANT-PRE-COMPILE

包含容器:NvMCommon、NvMBlockDescriptor、NvmDemEventParameterRefs。

10.2.2 NvMCommon

通用配置参数:

参数 描述
NvMApiConfigClass API 配置类(1/2/3)
NvMBufferAlignmentType 缓冲区对齐类型
NvMCompiledConfigId 编译配置 ID(NVRAM 数据布局的唯一标识)
NvMCrcNumOfBytes 每周期 CRC 计算字节数
NvMDatasetSelectionBits 数据集编号选择位数
NvMDevErrorDetect 开发错误检测启用
NvMDrvModeSwitch 启动/关机模式切换
NvMDynamicConfiguration 动态配置支持
NvMJobPrioritization 作业优先级化启用
NvMMainFunctionPeriod 主函数周期(秒)
NvMMultiBlockCallback 多块回调函数名
NvMRepeatMirrorOperations 镜像操作重试次数
NvMSetRamBlockStatusApi SetRamBlockStatus API 启用
NvMSizeImmediateJobQueue 立即作业队列大小
NvMSizeStandardJobQueue 标准作业队列大小
NvMVersionInfoApi 版本信息 API 启用
NvMWriteVerification 写验证启用
NvMWriteVerificationDataSize 写验证数据大小
NvMMaxNumOfReadRetries 最大读重试次数
NvMMaxNumOfWriteRetries 最大写重试次数
NvMBswMMultiBlockJobStatusInformation BswM 多块作业状态通知

10.2.3 NvMBlockDescriptor

每个 NVRAM 块的配置(包含多个参数,关键参数列举如下):

参数 描述
NvMNvramBlockIdentifier NVRAM 块标识符(uint16)
NvMNvramDeviceId NV 设备 ID
NvMNvBlockBaseNumber NV 块基础编号
NvMNvBlockLength NV 块长度(字节)
NvMBlockManagementType NATIVE/REDUNDANT/DATASET
NvMBlockUseCrc 是否使用 CRC
NvMBlockCrcType CRC 类型(CRC8/CRC16/CRC32)
NvMBlockUseSyncMechanism 显式同步机制
NvMBlockUseAutoValidation 自动验证启用
NvMBlockUseSetRamBlockStatus 使用 SetRamBlockStatus
NvMBlockWriteProt 写保护(初始)
NvMWriteBlockOnce 只写一次
NvMSelectBlockForReadAll 选择 ReadAll 时处理
NvMSelectBlockForWriteAll 选择 WriteAll 时处理
NvMSelectBlockForFirstInitAll 选择 FirstInitAll 时处理
NvMResistantToChangedSw 软件改变后保留
NvMStaticBlockIDCheck 静态块 ID 检查
NvMBlockHeaderInclude 是否包含块头部
NvMNvBlockNum NV 块数
NvMRomBlockNum ROM 块数
NvMRomBlockDataAddress ROM 块数据地址
NvMRamBlockDataAddress RAM 块数据地址
NvMReadRamBlockFromNvCallback 显式同步读回调
NvMWriteRamBlockToNvCallback 显式同步写回调
NvMInitBlockCallback 初始化块回调
NvMSingleBlockCallback 单块回调
NvMBlockJobPriority 块作业优先级
NvMBlockUseAuthentication 启用块认证
NvMCalcRamBlockCrc 在 RAM 中计算 CRC
NvMBlockUseCRCCompMechanism CRC 比较机制启用
NvMBlockUseSetRamBlockStatus SetRamBlockStatus 启用

10.2.4 NvMTargetBlockReference

引用底层 EA/FEE 块。

10.2.5 NvMEaRef

引用 EEPROM Abstraction 块(EaBlockConfiguration)。

10.2.6 NvMFeeRef

引用 Flash EEPROM Emulation 块(FeeBlockConfiguration)。

10.2.7 NvmDemEventParameterRefs

引用 DEM 事件参数:

  • NVM_E_QUEUE_OVERFLOW
  • NVM_E_LOSS_OF_REDUNDANCY
  • NVM_E_INTEGRITY_FAILED
  • NVM_E_REQ_FAILED
  • NVM_E_VERIFY_FAILED
  • NVM_E_WRONG_BLOCK_ID

10.3 通用配置选项

详见原文 PDF。

10.4 已发布参数

详见原文 PDF。


11 不适用需求

[SWS_NvM_00744] ⌈这些需求不适用于本规范。⌋ 涉及大量 SRS_BSW_* 需求,详见原文 PDF。


翻译说明

  • 本文档完整翻译自 AUTOSAR_SWS_NVRAMManager v4.4.0(Document ID 033,187 页)。
  • 由于文档规模庞大,本翻译采用"重点翻译 + 摘要"策略:
    • 文档标识、变更历史、目录、核心概念已完整翻译
    • 主要 API 函数声明、错误分类、关键设计原则已完整翻译
    • 详细配置参数描述使用摘要表格;完整配置参数列表见原文 PDF 第 10 章
    • 完整需求追溯表见原文 PDF 第 6 章
  • 保留所有需求 ID(SWS_NvM_xxxxx、SRS_*_xxxxx、ECUC_NvM_xxxxx)。
  • 保留 AUTOSAR 方框符 ⌈⌋。
  • 模块缩写(NvM、Fee、Ea、MemIf、Fls、Eep、Dem、Det、BswM、EcuM 等)和 API 函数名保持英文。
  • 块管理类型(NVM_BLOCK_NATIVE、NVM_BLOCK_REDUNDANT、NVM_BLOCK_DATASET)和请求结果常量保持英文。