UDS服务简易教程(一)

简介: UDS服务简易教程

1. 基本说明

UDS(Unified Diagnostic Services)可以说是外界与汽车内部建立诊断的语言,若外部诊断仪与汽车内部ECU共同遵循UDS协议,诊断仪即可通过UDS相应的指令向汽车内部ECU获取相应的反馈信息,如诊断仪需要读取ECU里面的软件版本等信息,可以通过22服务指令,想写入ECU配置信息,可以通过2E服务写指令,想读取故障信息可通过19服务指令。详细服务指令本文将逐个讲解说明。汽车里的诊断由请求与响应组成,这好比医院看病,医生请求诊断,病人回答医生的问题,汽车中诊断是由外部设备发起,如诊断仪,响应是汽车内部ECU执行,如BCM、GW、PEPS等车身电子器件。

ISO 14229-1对UDS共分了如下几大类,诊断和通信管理功能组,数据传输功能组,存储数据传输功能组,输入输出控制功能组,例行程序功能组,上传下载功能组,如下图所示

3165cd85564a634a86aa1332e083ac86_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


2. 诊断服务格式

所有的UDS服务都有相同的请求与响应格式,掌握好该格式,对理解UDS将会容易很多。诊断是通过诊断仪和 ECU 之间的请求和响应完成的,诊断的请求通常是从诊断仪到 ECU,响应则从ECU到诊断仪。

请求报文区分带子服务的请求与不带子服务的请求,响应分正响应与负响应,其中正响应区分对应带子服务的响应与不带子服务的响应,负响应都一样。

下述表格中缩写字母解释

M:强制的

S:强制的,需从参数列表中选择一个

U:用户自定义,可选择的

注:以下所有例子中的数据都为16进制格式,为表达简明,省去“0x”前缀

  • 含有子功能的请求报文

含有子功能的请求报文由请求ID,子服务ID,数据参数[可选]组成,如下图所示

cd90fe96b3474f2ea40a0ffdc7a6b455_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

例:10 01(请求切换默认会话模式)

例:19 02 FF(请求读取以0xFF为Mask的故障信息)

  • 不含子功能的请求报文

不含有子功能的请求报文由请求ID,数据参数[可选]组成,如下图所示

ddc60b2e8621a0d9611eebda032f6fa7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

例:22 F1 90(请求读取DID为0xF190的数据)

例:37(请求数据传输退出)

  • 含有子功能正响应报文

含有子功能的响应报文由响应ID,子服务ID,数据参数[可选]组成,其中响应ID值为对应请求ID加0x40,如下图所示

7fca53577d379d8e170f50ca18562e36_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

例:

请求:10 01(切换默认会话模式)

响应:50 01 xx xx xx xx(成功切换默认会话模式)

  • 不含有子功能正响应报文

不含有子功能的响应报文由响应ID,数据参数[可选]组成,其中响应ID值为对应请求ID加0x40,如下图所示

ddc60b2e8621a0d9611eebda032f6fa7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

例:

请求:22 F1 90(读取DID为0xF190的数据)

响应:62 F1 90 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10(返回DID为0xF190的数值为00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10)

  • 负响应报文

a73a0417a9cccdb0a740d7ec19530f09_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

例:

请求:10 02(切换编程会话模式)

响应:7F 10 7E (错误切换至编程会话模式,NRC为7E )


3. 寻址方式

CAN是一种广播式的通信方式,即一条CAN报文发送出去后,在同一条CAN网络中的所有节点都能够收到该条CAN报文,那诊断仪在发出诊断请求报文后,具体是想诊断哪个节点,是通过什么方式判断呢?这里引出寻址方式的概念。

寻址方式有两种,一个叫物理寻址,另一个为功能寻址,物理寻址是诊断仪与单个ECU之间的诊断,而功能寻址是诊断仪与多个ECU之间的诊断,即诊断仪通过物理寻址方式发送请求报文时,只有指向的ECU可以回复响应报文;诊断仪通过功能寻址方式发送请求报文时,同一网络中支持功能寻址的所有ECU都需要回复响应报文。ECU收到诊断请求后,则通过消息的ID区分是物理寻址还是功能寻址,一般功能寻址的信号ID为0x7DF,物理寻址的消息ID为客户自定义,每个ECU都不一样。

例:整车同一网络中有ECU A, B, C, D多个节点,假设他们的物理请求消息ID为0x701, 0x702, 0x703, 0x704,响应消息地址分别为0x70A, 0x70B, 0x70C, 0x70D,所有ECU的功能寻址ID为0x7DF。

物理寻址时:

0x701 0x10 0x01 (对ECU A进行诊断请求)

0x70A 0x50 0x01 xx xx xx xx (仅ECU A响应)

功能寻址时:

0x7DF 0x10 0x01 (对所有ECU进行诊断请求)

0x70A 0x50 0x01 xx xx xx xx (ECU A响应)

0x70B 0x50 0x01 xx xx xx xx (ECU B响应)

0x70C 0x50 0x01 xx xx xx xx (ECU C响应)

0x70D 0x50 0x01 xx xx xx xx (ECU D响应)


4. 诊断服务

本文仅介绍常用的服务及格式,如下:

  • 诊断会话控制DiagnosticSessionControl(0x10)
  • ECU复位ECUReset(0x11)
  • 安全访问SecurityAccess(0x27)
  • 通讯控制CommunicationControl(0x28)
  • 待机在线TesterPresent(0x3E)
  • 诊断故障码设置控制ControlDTCSetting(0x85)
  • 读DID数据ReadDataByIdentifier(0x22)
  • 写DID数据WriteDataByIdentifier(0x2E)
  • 清除故障码ClearDiagnosticInformation(0x14)
  • 读故障码信息ReadDTCInformation(0x19)
  • 通过DID控制输入输出InputOutputControlByIdentifier(0x2F)
  • 例程控制RoutineControl(0x31)
  • 请求下载RequestDownload(0x34)
  • 传输数据TransferData(0x36)
  • 请求数据传输退出RequestTransferExit(0x37)

其余详细了解请参考ISO 14229-1文档。

  • 诊断会话控制DiagnosticSessionControl(0x10)

会话模式有默认会话模式(default session)和非默认会话模式(non-default session),非默认会话模式包含编程会话模式(ProgrammingSession)、拓展诊断会话模式(extendedDiagnosticSession)及其余会话模式。会话模式可以理解为诊断的功能模式,即在不同的会话模式下,能够支持不能的诊断功能,如在默认会话模式下,一般情况下不允许支持写服务(WriteDataByIdentifier0x2E),也不允许支持请求下载服务(RequestDownload0x34),而在拓展诊断会话模式下,就允许支持写服务(WriteDataByIdentifier0x2E),在编程会话模式下,就可以支持(RequestDownload0x34)。

DiagnosticSessionControl(0x10)为控制切换各个会话模式的服务。

如下图,为三种常用会话模式的转换图

  • 默认会话模式(default session 0x01)
  • 编程会话模式(ProgrammingSession 0x02)
  • 拓展诊断会话模式(extendedDiagnosticSession 0x03)

adea25eac0eb70f3dabac3878d77741a_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

图4-1 常用会话模式切换

ECU在刚上电或者复位之后处于默认会话模式(0x01),默认会话模式下发送10 03可以切换至拓展会话模式(0x03),拓展会话模式发送10 02可以切换至编程会话模式(0x02),而在默认会话模式不可以直接跳转至编程会话模式,若在模式会话模式直接发送10 02,此时ECU需要响应NRC为0x7E(subFunctionNotSupportedInActiveSession)的负响应,响应内容为7F 10 7E。

如果ECU处于非默认会话模式下,客户端发送10 01进入默认会话模式,ECU收到该请求后,ECU的安全访问状态切换到锁定状态,由ReadDataByPeriodicIdentifer(0x2A)服务配置的周期调度被禁止,通过CommunicationControl(0x28)和ControlDTCSetting(0x85)进行的设置均被复位,即ECU初始化所有在非默认模式下激活的事件,设置和控制等操作,但不包括已经写入到非易失性存储位置的操作。

请求格式


a5699efaecbf47fa13605f8cce80560f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

628166be504cb280db495a06696d9ba6_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

正响应格式

3462bdddf4c9f12911a0ff089f6f0f43_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

负响应格式

e7fc405b74642a6d6a299b4d2c18ebfa_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

  • ECU复位ECUReset(0x11)

ECU复位ECUReset(0x11)是控制ECU端执行复位的服务。诊断仪发送11 01复位请求后,ECU复位动作执行前,正响应需先发送给诊断仪,然后ECU执行复位操作,成功复位后,ECU需进入默认会话模式。

请求格式

c11cab0ef7763f239b11a6c438f885d9_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

正响应格式

ef0962ef4907d1a39a69ccf63b2affcc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

负响应格式

bd1139eba66d4661e4b91c98923cad98_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
边缘计算 网络协议 网络架构
DoIP看这篇就够了,吐血整理
DoIP看这篇就够了,吐血整理
DoIP看这篇就够了,吐血整理
|
存储 Linux 数据安全/隐私保护
如何在本地Docker中部署MinIO服务并实现远程访问管理界面
如何在本地Docker中部署MinIO服务并实现远程访问管理界面
2102 0
|
10月前
|
人工智能 自然语言处理 算法
2025年第13批中国深度合成算法备案分析报告
2025年9月,第13批深度合成算法备案公布,共586项,累计达4420项。北京、广东、浙江、上海居前列,民企为主力,覆盖教育、医疗、金融等领域。文本与对话生成占主导,数字人、多模态技术加速落地。AI应用向行业纵深发展,合规标识成常态,监管趋严推动产业规范创新。
|
7月前
|
人工智能 运维 安全
从海外爆红到国内跟进,Clawdbot 为什么突然火了?
Clawdbot(现更名Moltbot)是2026年初爆火的可执行AI智能体,主打“替你动手”:本地/云端部署,直连邮箱、日历、飞书等,一句话完成文件转换、远程操作等任务。它标志AI从“对话”迈向“可执行系统”,虽存隐私与成本挑战,却已开启下一代AI形态的大门。
|
11月前
|
存储 消息中间件 缓存
redis
Redis:数字时代的“高速工作记忆”,以内存存储与丰富数据结构实现微秒级响应,广泛应用于缓存、会话管理、排行榜、消息队列等场景,兼具高性能与高扩展性,是现代应用架构不可或缺的性能加速器。
|
缓存 安全 编译器
【C语言】volatile 关键字详解
`volatile` 关键字在 C 语言中用于防止编译器对某些变量进行优化,确保每次访问该变量时都直接从内存中读取最新的值。它主要用于处理硬件寄存器和多线程中的共享变量。然而,`volatile` 不保证操作的原子性和顺序,因此在多线程环境中,仍然需要适当的同步机制来确保线程安全。
1178 2
|
C语言 C++
STM32F103C8 串口的使用
STM32F103C8 串口的使用
868 0
[UDS] --- DiagnosticSessionControl 0x10 service
[UDS] --- DiagnosticSessionControl 0x10 service
3052 0
|
存储 安全 算法
|
NoSQL 编译器 vr&ar
GNU objcopy命令的探索:(转换二进制文件)
GNU objcopy命令的探索:(转换二进制文件)
1255 1