UDS诊断协议介绍

前言

本文是对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大类,如下:​​

​​​​​​

其中,标黄部分为常用服务。

诊断请求

诊断请求,即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

相关推荐
逸埃1 个月前
[AutoSar]BSW_Diagnostic_006 RoutineControl (0x31)的配置和实现
autosar·uds·dcm·rid
77赫兹2 个月前
【UDS诊断】——0x34、0x36、0x37服务
uds
嵌入式历练者5 个月前
UDS服务19 01按掩码读DTC数量
嵌入式·uds
疯狂的机器人5 个月前
【Python搞定车载自动化测试】——Python实现CAN总线Bootloader刷写(含Python源码)
python·自动化·can·诊断·uds·bootloader·刷写
疯狂的机器人5 个月前
【Python搞定车载自动化测试】——Python基于Pytest框架实现UDS诊断自动化(含Python源码)
python·自动化·pytest·can·诊断·allure·uds
逸埃6 个月前
[AutoSar]BSW_Diagnostic_002 DCM模块介绍
autosar·uds·dcm
zhoujiazhao6 个月前
【003_音频开发_基础篇_Linux进程通信(20种你了解几种?)】
linux·音视频·socket·grpc·进程通信·uds·dbus
释博文7 个月前
UDS学习记录
学习·uds
up up day10 个月前
UDS诊断(ISO14229-1) 36服务
诊断·uds·汽车电子