autosar DCM和NVM的交互流程
时间: 2025-06-30 11:24:35 浏览: 11
<think>我们正在讨论AUTOSAR中DCM(诊断通信管理器)与NVM(非易失性存储器管理器)的交互流程。DCM负责处理诊断请求,而NVM负责管理非易失性存储(如EEPROM或Flash)。在诊断过程中,DCM可能需要读取或修改存储在NVM中的数据,例如诊断故障码(DTC)相关信息、安全访问种子和密钥等。
交互流程主要包括以下场景:1.**读取DTC信息**:DCM需要从NVM中读取存储的DTC信息(如冻结帧、环境数据等)以响应诊断仪请求。
2. **清除DTC**:当诊断仪发送清除DTC请求时,DCM需要通知NVM清除相关的DTC数据。3.**安全访问**:安全访问的种子和密钥通常存储在NVM中,DCM在验证安全等级时需要与NVM交互。4.**写入数据**:如通过诊断服务(如UDS服务$2E)写入配置数据到NVM。
交互流程通常通过RTE(运行时环境)进行,DCM调用NVM提供的接口(如NvM_ReadBlock,NvM_WriteBlock)来读写数据块。同时,NVM在操作完成后通过回调函数通知DCM。下面是一个典型的读取DTC冻结帧的交互流程示例(使用序列图表示):```mermaidsequenceDiagramparticipant诊断仪participant DCMparticipantNVMparticipantDEM诊断仪->>DCM:UDS $19 $04 (读取冻结帧)DCM->>DEM:获取DTC信息(包括NVM数据块ID)DEM-->>DCM:返回数据块IDDCM->>NVM: NvM_ReadBlock(BlockId)NVM-->>DCM:返回NVM_READ_PENDING(异步操作)NVM->>NVM:从非易失性存储读取数据NVM->>DCM:NvM_JobEndedNotification()(读取完成回调)DCM->>DEM:处理读取到的冻结帧数据DCM->>诊断仪:发送响应报文```
关键点:
-**异步操作**:NVM的读写操作通常是异步的,DCM需要等待NVM的回调通知。- **数据块管理**:NVM中存储的数据被划分为不同的块(Block),每个块有唯一ID。DCM需要知道要操作的数据块ID。- **DEM的参与**:在DTC相关操作中,DCM通常需要先与DEM(诊断事件管理器)交互以获取必要信息(如数据块ID),再与NVM交互。注意事项:
1. **数据一致性**:在读写过程中需确保数据一致性(如使用NVM的MultiBlock操作)。2.**错误处理**:DCM需处理NVM操作失败的情况(如读取失败、写入失败)。3.**时序约束**:异步操作可能影响诊断响应时间,需在系统设计时考虑。
§§相关问题§§1. AUTOSAR中NVM模块如何保证DCM写入数据时的原子性?2.DCM在处理安全访问种子读取时如何与NVM交互?
3.当NVM读写操作失败时,DCM应如何向诊断仪报告错误?
4.在AUTOSAR多核系统中,DCM与NVM跨核交互有哪些特殊配置?
5.如何配置NVM数据块以存储DTC相关的冻结帧信息?</think>在AUTOSAR架构中,**DCM(Diagnostic Communication Manager)** 与 **NVM(NVRAM Manager)** 的交互主要涉及诊断数据的持久化存储和读取,以下是核心交互流程:
---
### **交互场景及流程**
#### 1. **诊断数据写入(如DTC冻结帧)**
```mermaid
sequenceDiagram
DCM->>DEM: 请求故障数据(如Dem_GetExtendedDataRecord)
DEM-->>DCM: 返回冻结帧数据
DCM->>NVM: 调用NvM_WriteBlock(BlockId, Data)
NVM->>MemIf: 触发存储操作
MemIf->>FEE/EA: 底层存储驱动
NVM-->>DCM: NvM_JobEndedNotification(异步回调)
```
#### 2. **诊断数据读取(如UDS服务$19)**
```mermaid
sequenceDiagram
诊断仪->>DCM: 发送$19服务请求
DCM->>NVM: 调用NvM_ReadBlock(BlockId)
NVM->>MemIf: 从非易失性存储加载数据
MemIf-->>NVM: 返回数据
NVM-->>DCM: 通过回调返回数据
DCM->>诊断仪: 组织响应报文
```
#### 3. **安全访问密钥存储**
```mermaid
sequenceDiagram
DCM->>Crypto: 生成安全密钥
DCM->>NVM: NvM_WriteBlock(SecureKeyBlock)
NVM->>FEE: 加密写入EEPROM
```
---
### **关键配置点**
1. **NVM数据块定义**
- 在`NvMBlockDescriptor`中配置专用DTC数据块(如DTC_FREEZEFRAME)
- 设置块属性:`ROM block`(只读)或`NV block`(可读写)
2. **回调机制绑定**
- 通过`NvM_SetBlockCallback`注册DCM的回调函数:
```c
NvM_SetBlockCallback(DTC_BLOCK_ID, Dcm_NvMJobEndCallback);
```
3. **多块操作管理**
- 使用`NvM_WriteAll`批量写入时需配置`ImmediateWrite`属性
- 通过`NvM_GetErrorStatus`检查块状态(NVM_REQ_OK/NVM_REQ_NOT_OK)
---
### **错误处理机制**
- **写入失败**:DCM捕获`NvM_JobEndCallback(status=E_NOT_OK)`后重试或记录错误码
- **数据校验**:通过`CRC`或`Checksum`字段验证存储一致性
- **异步超时**:DCM设置定时器监控NVM操作超时(默认周期5-10ms)
**总结**:DCM通过标准NVM接口实现诊断数据的持久化,依赖异步回调机制确保数据一致性,需在BSW层精确配置数据块属性和回调绑定。
阅读全文
相关推荐


















