UDS服务简易教程(一)

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 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

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
14天前
|
Python
Python网络编程基础(Socket编程) 使用try-except处理网络错误
【4月更文挑战第11天】在网络编程中,错误处理和异常管理是非常重要的部分。网络操作经常因为各种原因而失败,比如网络断开、服务器无响应、地址不正确等。因此,学会如何使用Python的异常处理机制来捕获和处理这些错误,是编写健壮的网络应用的关键。
|
14天前
[UDS] --- UDS概述
[UDS] --- UDS概述
282 0
|
14天前
|
安全 内存技术
[UDS] --- UDS服务应该支持的NRC
[UDS] --- UDS服务应该支持的NRC
136 0
|
14天前
|
安全
UDS服务
UDS服务
89 0
|
10月前
|
存储 网络协议 Unix
Linux网络编程 --- socket编程前传
Linux网络编程 --- socket编程前传
71 0
|
负载均衡 网络协议 物联网
即时通讯技术文集(第10期):IM通信协议该选TCP还是UDP [共12篇]
为了更好地分类阅读52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第10 期。
129 0
即时通讯技术文集(第10期):IM通信协议该选TCP还是UDP [共12篇]
|
调度
METSO IOP111 比特流用于在部署时对设备进行编程
METSO IOP111 比特流用于在部署时对设备进行编程
78 0
METSO  IOP111 比特流用于在部署时对设备进行编程
|
存储 安全 算法
|
测试技术 数据格式
艾伟_转载:Socket开发探秘--数据封包和拆包
在上篇《Socket开发探秘--基类及公共类的定义 》中介绍过,所有受到的数据包,经过系统的预处理后,都会得到一个PreData的数据实体,该实体包含了协议头、协议内容和所属用户的ID。PreData是定义了一个标准的协议数据格式,包含了协议关键字、协议内容、用户标识的内容。
894 0
|
网络协议 Unix API
《UNIX网络编程 卷1:套接字联网API(第3版)》——1.7 OSI模型
描述一个网络中各个协议层的常用方法是使用国际标准化组织(International Organization for Standardization,ISO)的计算机通信开放系统互连(open systems interconnection,OSI)模型。
1478 0

热门文章

最新文章