NvM(NVRAM Manager)位于 AUTOSAR 内存栈的顶端,提供:
| 缩略语 | 描述 |
|---|---|
| NvM | NVRAM Manager(非易失性存储管理器) |
| MemIf | Memory Abstraction Interface(内存抽象接口) |
| Ea / Fee | EEPROM Abstraction / Flash EEPROM Emulation |
| NV Block | Non-Volatile Block(非易失性块) |
| CRC | Cyclic Redundancy Check(循环冗余校验) |
| DET / DEM | Default Error Tracer / Diagnostic Event Manager |
| RTE | Runtime Environment(运行时环境) |
AUTOSAR_EXP_NVDataHandlingAUTOSAR_SRS_MemoryServicesAUTOSAR_SWS_MemoryAbstractionInterfaceAUTOSAR_SWS_EEPROMAbstraction / FlashEEPROMEmulationNvM 仅支持 AUTOSAR 中预定义的 CRC 算法(CRC8/CRC16/CRC32);加密算法委托给 CSM;多块队列最大长度可配置。
NvM 依赖 MemIf(向上)、Ea/Fee(向下)、DET、DEM、RTE(用于应用层 API)、SchM(用于临界区)、CSM(用于加密)。
SWS_NvM_NNNNN 规范项 ID 约 200+ 条(编号范围 00001-91001)。
块数、块大小、块到设备映射、CRC 算法、加密设置、写保护、立即数据、ReadAll/WriteAll 选择、回调函数、RomBlock 地址、RamBlock 地址、Config Block、镜像 Block、CRC Buffer 长度、最大块数、多块队列长度、API 配置开关等。
NvM 提供基于队列的异步处理:NvM_ReadBlock → 入队 → NvM_MainFunction 调度 → 异步通过 MemIf 读 → CRC 校验 → 写入 RAM 块 → 通知单块回调。
| 错误码 | 含义 |
|---|---|
NVM_E_UNINIT | NvM 未初始化 |
NVM_E_ALREADY_INITIALIZED | 已初始化 |
NVM_E_BLOCK_CONFIG | 块配置不一致 |
NVM_E_PARAM_BLOCK_ID | 无效的块 ID |
NVM_E_PARAM_BLOCK_TYPE | 无效的块类型 |
NVM_E_PARAM_ADDRESS | 无效的地址 |
NVM_E_PARAM_DATA | 无效的数据指针 |
NVM_E_PARAM_POINTER | 无效的指针 |
NVM_E_LIST_OVERFLOW | 队列已满 |
NVM_E_NV_WRITE_PROTECTED | 写保护启用 |
| 错误码 | 含义 |
|---|---|
NVM_E_HARDWARE_ERROR | 硬件错误 |
NVM_E_BLOCK_CHECKSUM_FAILED | CRC 校验失败 |
NVM_E_QUEUE_OVERFLOW | 队列溢出 |
无。
| 错误码 | 含义 |
|---|---|
NVM_E_INTEGRITY_FAILED | 完整性失败(CRC) |
NVM_E_REQ_FAILED | 请求失败 |
无。
Std_ReturnType、Std_VersionInfoType、Std_ConfigType。
| 类型 | 描述 |
|---|---|
NvM_ConfigType | NvM 抽象配置 |
NvM_BlockIdType | 块 ID(uint16) |
NvM_BlockRequestType | 块请求类型(NVM_BLOCK_NATIVE/NVM_BLOCK_REDUNDANT/NVM_BLOCK_DATASET) |
NvM_RamBlockStatusType | RAM 块状态(VALID/CHANGED/UNCHANGED) |
NvM_RequestResultType | 请求结果(OK/NOT_OK/PENDING/INTEGRITY_FAILED/...) |
NvM_BlockProtectionType | 块保护状态(TRUE/FALSE) |
| API | 功能 |
|---|---|
NvM_Init | 初始化 NvM |
NvM_SetDataIndex | 设置数据集索引 |
NvM_GetDataIndex | 获取数据集索引 |
NvM_SetBlockProtection | 设置块写保护 |
NvM_GetErrorStatus | 获取错误状态 |
NvM_GetVersionInfo | 获取版本信息 |
NvM_SetRamBlockStatus | 设置 RAM 块状态(VALID/CHANGED) |
NvM_SetBlockLockStatus | 设置块锁状态(用于排他访问) |
NvM_CancelJobs | 取消所有作业 |
NvM_ReadBlock | 读单个块 |
NvM_WriteBlock | 写单个块 |
NvM_RestoreBlockDefaults | 恢复块默认值(从 ROM) |
NvM_EraseNvBlock | 擦除 NV 块 |
NvM_InvalidateNvBlock | 失效 NV 块 |
NvM_ReadPRAMBlock | 读 PRAM 块(永久 RAM) |
NvM_WritePRAMBlock | 写 PRAM 块 |
NvM_RestorePRAMBlockDefaults | 恢复 PRAM 块默认值 |
NvM_ReadAll | 读所有块(启动时) |
NvM_WriteAll | 写所有块(关闭时) |
NvM_CancelWriteAll | 取消写所有 |
NvM_ValidateAll | 验证所有块 |
NvM_FirstInitAll | 首次初始化所有块 |
NvM_JobEndNotification | 作业结束通知回调(应用实现) |
NvM_JobErrorNotification | 作业错误通知回调(应用实现) |
NvM_MainFunction | 主函数(队列处理) |
NvM_SingleBlockCallbackFunction | 单块回调(应用实现,配置在块描述符) |
共 26+ API 函数 + 1 个主函数 + 2 个通知 + 1 个单块回调模板。
NvM_ReadBlock(BlockId, RamAddr) → NvM 入队 → NvM_MainFunction() → MemIf 读 → CRC 校验 → 写入 RAM → 单块回调;NvM_WriteBlock(BlockId, RamAddr) → NvM 入队 → NvM_MainFunction() → MemIf 写 → 通知;NvM_ReadAll() → NvM 依次处理所有配置 ReadAll 的块;NvM_WriteAll() → NvM 依次处理所有配置 WriteAll 的块;NvM_CancelJobs() → NvM 取消队列中的所有作业。| 容器 | 描述 |
|---|---|
| NvM | 根容器(开发错误检测、版本 API、API 开关、多核分区等) |
| NvMCommon | 通用配置(最大块数、队列大小、CRC 算法、回调、Dem 配置) |
| NvMBlockDescriptor | 块描述符(每个 NV 块的完整配置) |
| NvMRamBlockDataAddress | RAM 块数据地址(应用提供) |
| NvMRomBlockDataAddress | ROM 块数据地址(默认数据) |
| NvMNvBlockDataAddress | NV 块数据地址(提供方接口) |
| NvMNvMBlockNeeds | 块需求(CRC/加密/写保护/立即数据等开关) |
| NvMPublishedInformation | 发布信息 |
共 8 个 ECUC 容器,含 50+ 配置参数。
发布信息包括 NvM 模块版本、配置变体、块数、最大块大小、队列大小、支持的 CRC 算法等。
校对轮次:L1 自动校对(2026-06-13)