【AutoSar_UDS服务】0x2E服务_通过DID写入数据

1 术语解释

1.1 缩略语

缩写描述解释
DTCDiagnostic Trouble Code诊断故障码
DcmDiagnostic Communication Manager诊断通信管理
DemDiagnostic Event Manager诊断事件管理
SIDService identify服务标识符
NRCNegetive reponse code否定响应码
DIDData Identifier数据标识符

2 功能简介

2.1 功能概述

WriteDataByIdentifier服务允许客户端在提供的DID指定的内部位置将信息写入服务器。
客户端使用WriteDataByIdentifier服务将数据记录写入服务器。数据被识别DID写入时,往往需要通过0x27服务解锁指定的安全等级;在执行此服务时,满足服务器条件是车辆制造商的责任。此服务的可能用途有:

  • 编程配置信息到服务器(如:VIN码);
  • 清除非易失性内存(0x2E服务往往配合Nvm的Block使用);
  • 重置学到的值;
  • 设置选项内容

因为涉及到修改ECU内数据的操作,所以0x2E一般都需要在指定的会话和安全等级下才能执行。Dcm在接收到0x2E的请求后会检查DID和数据长度,所以0x2E服务并不支持动态的数据长度。与0x22服务相似,0x2E服务支持通过回调和其他的方式写入数据,也支持直接在配置中引用指定的NvM Block将数据NvM_WriteBlock写入非易失的内存中。

3 请求响应定义

3.1 请求格式

主要是SID + DID+ DataRec的格式请求。
在这里插入图片描述

3.2 肯定响应格式

在这里插入图片描述

3.3 否定响应格式

否定响应使用通过的格式: 7F + SID + NRC, 0x2E服务主要支持一下NRC码:
在这里插入图片描述

4 请求响应实例

Tester Dcm 2E FE 40 44 55 FE 40为DID 6E FE 40 Tester Dcm

5 参考资料

  1. ISO 14229-1:2013(E)
  2. Specification of Diagnostic Communication Manager AUTOSAR CP R20-11
### Autosar UDS诊断协议实现与使用 UDS(Unified Diagnostic Services)是基于ISO 14229标准的汽车诊断协议,广泛应用于现代车辆的ECU诊断通信中。在AUTOSAR架构中,UDS协议的实现通常依赖于DCM(Diagnostic Communication Manager)和DEM(Diagnostic Event Manager)模块[^3]。 #### 1. UDS协议的核心功能 UDS协议定义了一系列服务,用于实现车辆诊断需求。这些服务包括但不限于: - **会话控制**:允许测试设备进入不同的诊断会话模式,例如默认会话、编程会话或扩展诊断会话[^2]。 - **安全访问**:通过加密算法保护诊断接口,防止未经授权的访问[^2]。 - **读取数据标识符(DID)**:允许读取ECU中的特定参数或配置信息。 - **写入数据标识符**:允许修改ECU中的某些可配置参数。 - **故障码读取与清除**:支持读取和清除存储在ECU中的故障码。 - **测试结果报告**:提供测试结果的详细信息。 #### 2. UDS协议的分层结构 UDS协议遵循OSI七层模型,具体实现中通常涉及以下层次: - **物理层**:由底层通信介质(如CAN、FlexRay或以太网)提供支持[^1]。 - **传输层**:通过CanTp(Transport Protocol)或其他传输协议实现长消息的分割与重组[^3]。 - **网络层**:负责路由和寻址,确保诊断报文正确传递到目标ECU。 - **应用层**:实现具体的UDS服务逻辑,由DCM模块管理。 #### 3. AUTOSAR中的UDS实现 在AUTOSAR架构中,UDS协议的实现主要依赖以下模块: - **DCM(Diagnostic Communication Manager)**:负责处理诊断通信请求,管理诊断会话和服务响应。 - **DEM(Diagnostic Event Manager)**:用于管理和报告故障事件,生成并存储故障码。 - **PduR(Protocol Data Unit Router)**:作为数据包路由器,将诊断请求从CanTp转发到DCM。 - **CanTp(CAN Transport Layer Protocol)**:实现基于CAN总线的长消息传输功能。 以下是UDS协议在AUTOSAR中的典型实现流程: 1. Tester端发送诊断请求报文,通过CAN总线或其他通信介质传输。 2. CanTp模块接收报文并进行传输层处理。 3. PduR模块将处理后的报文转发给DCM模块。 4. DCM模块解析请求并调用相应的诊断服务。 5. DEM模块根据诊断结果更新故障状态。 6. 响应报文按照相反路径返回给Tester端。 #### 4. 示例代码:UDS诊断请求与响应 以下是一个简单的UDS诊断请求与响应的示例代码: ```c #include "Std_Types.h" #include "ComStack_Types.h" #include "Dcm.h" // 发送诊断请求 void sendDiagnosticRequest(uint8 serviceId, uint8* data, uint8 length) { Dcm_ServiceType request; request.ServiceId = serviceId; request.Data = data; request.Length = length; Dcm_Transmit(&request); } // 处理诊断响应 void handleDiagnosticResponse(Dcm_ServiceType* response) { if (response->ServiceId == 0x10) { // Session Control // 处理会话控制响应 } else if (response->ServiceId == 0x22) { // Read DID // 处理读取DID响应 } } ``` #### 5. 注意事项 - 在实际开发中,需要根据具体的ECU需求配置UDS服务列表和支持的服务参数。 - 安全访问机制必须严格实现,以防止非法访问导致的安全隐患。 - 测试阶段需验证所有诊断服务的功能完整性,确保符合ISO 14229标准要求。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值