【AUTOSAR-DCM】-4.3-UDS $22和$2E服务如何读取和写入NVM Block数据

这篇博客详细介绍了如何使用UDS诊断服务$22和$2E来读取和写入NVM Block数据,特别是针对Calibration标定数据的处理。文中提供了一个Demo,包括在NVM模块配置DID的NVM Block,以及在APP SWC中实现数据的读写函数。此外,还讨论了如何优化NVM Block的配置以减少启动时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击返回「《Autosar_BSW高阶配置》总目录」

案例背景(共7页精讲):
该篇博文将手把手教您UDS诊断$222E服务如何读取和写入NVM Block数据(如Calibration标定数据...),附详细的Demo代码实现其它APP SWC数据的NVM存储的实现也可参照该博文。

目录

1 为该DID配置一个NVM Block

2 通过$22和$2E服务实现Calibration标定数据的读取和写入

3 结尾


<--返回「Autosar_BSW高阶配置」总目录-->

<--返回「Autosar_BSW高阶配置」专栏主页--

<think>我们正在讨论AUTOSARDCM(诊断通信管理器)与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. AUTOSARNVM模块如何保证DCM写入数据时的原子性?2.DCM在处理安全访问种子读取时如何与NVM交互? 3.NVM写操作失败时,DCM应如何向诊断仪报告错误? 4.AUTOSAR多核系统中,DCMNVM跨核交互有哪些特殊配置? 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-->>DCMNvM_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->>NVMNvM_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层精确配置数据块属性回调绑定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

汽车电子助手

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值