前言
本文是对UDS诊断协议相关知识的汇总,仅作为自学使用,以方便后续查漏补缺。
UDS协议介绍
首先,介绍下汽车诊断协议,即:诊断工具(Tester)和车辆(ECU)之间的通信协议。目前,汽车诊断协议主要有OBD(On-Board Diagnostics)和UDS(Unified Diagnostics Services)。本文只介绍UDS协议相关的内容。
UDS协议主要用于Tester(Client)和ECU(Server)之间的诊断通信,Tester发送诊断请求(request),ECU给出诊断响应(response)。UDS为不同类型诊断功能的“请求–响应”交互定义了统一的内容和格式。
UDS相关概念
Service ID(SID)
SID,即服务标识符,用于标识要执行的服务。每个服务的SID是唯一的,用来区分要执行/响应何种服务的请求。UDS协议14229-1标准中定义了26种服务,分6大类,如下:
大类 | SID(Hex) | 服务名 |
诊断和通信管理类 | 10 | 诊断会话控制 (Diagnostic Session Control) |
11 | ECU复位 (ECU Reset) | |
27 | 安全访问 (Security Access) | |
28 | 通信控制 (Communication Control) | |
3E | 待机握手 (Tester Present) | |
83 | 访问时间参数 (Access Timing Parameter) | |
84 | 安全数据传输 (Secured Data Transmission) | |
85 | 控制DTC设置 (Control DTC Setting) | |
86 | 事件响应 (Response On Event) | |
87 | 链路控制 (Link Control) | |
数据传输类 | 22 | 通过ID读数据 (Read Data By Identifier) |
23 | 通过地址读内存 (Read Memory By Address) | |
24 | 通过地址读比例数据 (Read Scaling Data By Identifier) | |
2A | 通过周期ID读数据 (Read Data By Periodic Identifier) | |
2C | 动态定义标识符 (Dynamically Define Data Identifier) | |
2E | 通过ID写数据 (Write Data By Identifier) | |
3D | 通过地址写内存 (Write Memory By Address) | |
存储数据传输类 | 14 | 清除诊断信息 (Clear Diagnostic Information) |
19 | 读取故障码信息 (Read DTC Information) | |
输入输出控制类 | 2F | 通过ID控制输入输出 (Input Output Control By Identifier) |
例程控制类 | 31 | 例行程序控制 (Routine Control) |
上传下载类 | 34 | 请求下载 (Request Download) |
35 | 请求上传 (Request Upload) | |
36 | 数据传输 (Transfer Data) | |
37 | 请求退出传输 (Request Transfer Exit) | |
38 | 请求文件传输 (Request File Transfer) |
其中,标黄部分为常用服务。
诊断请求
诊断请求,即Tester向ECU发送的请求消息,用于请求执行某个服务。诊断请求消息的格式为:SID + Sub-function + 其他数据。
(1) SID,标识要执行的服务;
(2) Sub-function,启动、暂停之类的子功能;
(3) 部分服务可能没有子功能,也可能不携带数据;
(4) spr用于在某些服务中减少ECU发送不需要的响应,以节约系统资源。ECU默认发送正响应,但当设置spr=1时,可以抑制正响应。
正响应/负响应
Tester向ECU发送服务请求后,如果服务执行成功,则返回的响应消息为正响应,否则为负响应。
正响应消息格式:
负响应消息格式:
负响应码(NRC)
NRC(Negative Response Code),指示服务执行失败的原因。NRC的取值和含义说明如下:
UDS服务概述
UDS协议14229-1标准中定义了26种服务,下面对每种服务做详细介绍。
其中,标黄部分为常用服务。
诊断和通信管理类
诊断和通信管理类为UDS服务的核心部分。通过该类服务,Tester可以与ECU进行交互,以获取ECU的状态信息,并执行各种诊断操作。主要服务有:
SID | 功能描述 |
---|---|
0x10:诊断会话控制 | Tester控制ECU的诊断会话状态 |
0x11:ECU复位 | Tester控制ECU执行复位 |
0x27:安全访问 | Tester请求解锁ECU |
0x28:通信控制 | Tester控制ECU的通信行为(启用/禁止某些通信功能) |
0x3E:待机握手 | Tester向ECU表明它仍然存在 |
0x85:控制DTC的设置 | Tester控制ECU中DTC的设置 |
0x83:访问时间参数 | Tester读取/修改当前通信的定时参数 |
0x84:安全数据传输 | Tester执行具有扩展数据链路安全性的数据传输 |
0x86:事件响应 | Tester请求设置或控制ECU中的事件机制 |
0x87:链路控制 | Tester请求控制通信波特率 |
数据传输类
数据传输类用于Tester读取和修改ECU中的数据,支持数据读取和写入功能。该类服务具有可靠的数据传输机制,确保数据的完整性和准确性。同时还支持数据的块传输,以提高数据传输的效率。主要服务有:
SID | 功能描述 |
---|---|
0x22:通过ID读数据 | Tester请求读取ECU中指定DID标识的当前值 |
0x2E:通过ID写数据 | Tester请求写入ECU指定DID标识的指定数据 |
0x23:通过地址读内存 | Tester请求读取ECU中指定内存范围的当前值 |
0x24:通过ID读缩放数据/换算信息 | Tester请求读取ECU中指定DID标识的比例数据 |
0x2A:周期读ID数据 | Tester请求调度ECU中的数据进行周期性传输 |
0x2C:动态定义标识符 | Tester请求动态定义数据标识符(这些标识符可被0x22服务读取) |
0x3D:通过地址写内存 | Tester请求重写指定内存范围的数据 |
存储数据传输类
存储数据传输类用于Tester读取ECU中的存储数据(主要为诊断信息),以便进行故障诊断。主要服务有:
SID | 功能描述 |
---|---|
0x14:清除诊断信息 | Tester请求清除ECU中的诊断(DTC)信息 |
0x19:读取诊断信息 | Tester请求读取ECU中的诊断(DTC)信息 |
IO控制类
IO控制类用于Tester对ECU的输入输出功能进行访问和控制,包括读取和设置ECU的输入输出状态,以实现对ECU系统的控制和监控。主要服务有:
SID | 功能描述 |
---|---|
0x2F:通过ID控制输入输出 | Tester控制ECU的输入输出(IO) |
例程控制类
例程控制类用于Tester调用ECU内部预置的函数,以此来执行特定的操作,如执行自检、校准或其他特殊功能。主要服务有:
SID | 功能描述 |
---|---|
0x31:例行程序控制 | Tester请求启动、停止ECU中的例程或请求例程结果 |
例程可以简单理解为函数。
上传下载类
上传下载类用于在Tester和ECU之间进行上传和下载数据。可以将数据从Tester下载到ECU,也可以将数据从ECU上传到Tester,以实现备份ECU配置、更新ECU软件等操作。主要服务有:
SID | 功能描述 |
---|---|
0x34:请求下载 | Tester请求从Tester向ECU传输数据 |
0x35:请求上传 | Tester请求从ECU向Tester传输数据 |
0x36:数据传输 | Tester向ECU发送数据(下载)或Tester向ECU请求数据(上传) |
0x37:请求退出传输 | Tester请求终止数据传输 |
0x38:请求文件传输 | Tester请求在ECU和Tester之间进行文件传输 |
总结
为了方便在后续的工作学习中查漏补缺,本文对UDS诊断协议相关知识做了简单汇总,详细介绍了UDS诊断协议的基础知识,相关术语,以及26种服务。本文仅作为自学使用,如有侵权,可联系删除。
参考
https://blog.csdn.net/qq_40309666article/details/130831416
https://blog.csdn.net/qq_42957717/article/details/115954087
https://download.csdn.net/download/liuxu324/89590506