UDS本质上是一系列服务的集合,包含6大类,共26种。每种服务都有独立的ID,即SID。
请求
-
SID(1Byte)+ 参数 -
SID(1Byte)+Sub-function(1Byte)+ 参数 -
SID+DID(2Bytes)
响应
- 肯定响应
SID+0x40(1Byte)+Sub-function(根据请求是否存在) + 参数SID+0x40(1Byte)+DID+Data
- 否定响应
0x7F+SID+NRC(1Byte)(否定响应码)0x7F+SID+DID+NRC(1Byte)(否定响应码)
- 常见的
NRC11表示服务不支持12表示Sub-function不支持13表示请求的长度不正确、格式不正确31表示请求超出范围78表示收到诊断请求,等待响应7E表示当前会话下Sub-function不支持7F表示当前会话下服务不支持
Sub-function分成了两部分(14229 P39)
Bit7,Suppress postive reponse message indication bit,抑制正响应位- 为
0时,不抑制正响应消息 - 为
1时,抑制响应消息,正响应消息不应该被发送 - 负响应消息不受抑制正响应位影响,会根据协议规定的限制发送
- 注意
NRC为78时,后续也会发送正响应
- 为
Bit0 - Bit6Sub-function的参数值
常用服务
-
10诊断会话控制01默认会话:权限最小,可操作的服务少02编程会话:用于解锁bootloader相关的诊断服务03扩展会话:用于解锁高权限诊断服务,如:读写DTC、写入数据- 注:编程会话不能由默认会话转入(在默认会话情况下,不能执行
10 02),只能由扩展会话转入 - 默认进入默认会话,当
ECU处于非默认会话时,一段时间内没有请求会退回到默认会话。可以通过让Tester周期发送3E服务,使ECU保持在非默认会话
-
11重置ECUReset- 报文格式
- 请求:
11+Sub-function - 响应:
51+Sub-function+powerDownTime
- 请求:
- 常用子服务
01硬重启03软重启04enableRapidPowerShutDown当使用此子服务时,powerDownTime才会存在
11 01 51 01 - 报文格式
-
27安全访问ECU上电后是一个锁定的状态,可以通过27服务来解锁- 过程:
Tester端给ECU发送请求报文来请求种子ECU收到报文后,回复肯定响应(包含种子数)Tester端根据这个种子数,利用自身的安全算法算出一个密钥K1,并发送给ECUECU同样根据种子数和自身的安全算法计算出一个密钥K2,并将接收到的K1与K2相比较。如果一致ECU发送肯定响应给Tester端,已经解锁。
- 当执行复位、重新上下电或者会话切换后,会由解锁状态跳转到锁定状态
-
22读数据- 报文格式
- 请求:
22+DID(2Bytes) - 响应:
62+DID+Data
- 请求:
- 支持的
NRC13表示请求消息的长度无效或超过长度14表示读取的数据已经超过了传输最大值,如请求多个DID,响应的数据太多了22表示服务器的运行条件不满足执行的操作31表示当前会话下不支持请求的DID;请求的动态DID尚未分配33表示如果至少有一个DID是安全的,但是服务器没有解锁
- 报文格式
-
2E写数据- 报文格式
- 请求:
2E+DID+Data - 响应:
6E+DID
- 请求:
- 支持的
NRC72表示写入失败
- 报文格式
-
19读DTC-
当系统检测到错误或故障时,会将相应的数值故障码进行存储,数值故障码就是
DTC。 -
一般由
3个字节组成:
-
字节
1- 左边两位对应
DTC属于哪一个系统,P: 00动力系统、C: 01底盘、B: 10车身和U: 11通信系统 - 左边
3-4位用来区分DTC是标准组织所定义还是OEM自定义 - 左边
5-8位对应车辆系统的区域
- 左边两位对应
-
DTC Status
Bit4和Bit6的初始值为1,其余位的初始值为0,所以默认值0x50Bit0为1时表示当前结果为故障Bit3为1时表示存在历史故障
-
-
常用子服务(
14229 P188、14229 P206)01:检索与客户端定义的状态掩码匹配的DTC数量19+01+DTCStatusMask59+01+DTCStatusAvailabilityMask+DTCFormatIdentifier+Number(2Byte)
02:检索与客户端定义的状态掩码匹配的DTC列表19+02+DTCStatusMask59+02+DTCStatusAvailabilityMask+DTC+statusOfDTC- 注:当
(DTCStatusMask & statusOfDTC) != 0时,匹配成功
-
04:读取DTC的快照信息(冻结帧),即发生故障时的一些环境数据,能更好的判断DTC产生的原因以及发生故障的原因
-19+04+DTC+DTCSnapshotRecordNumber
-59+04+DTC+Status+DTCSnapshotRecordNumber+DTCSnapshotRecordNumberOfIdentifiers+DID+snapshotData+DID+snapshotData
- 快照信息:例如故障发生时间、胎压、电压、行驶里程数和车速等。在故障发生时,ECU要记录发生故障时的快照信息,便于以后通过查找故障发生时刻的这些数据,分析故障原因
-DTCSnapshotRecordNumber包含一组快照信息、一组快照信息中可以包含多个DID,每个DID则包含具体的信息,比如:胎压、里程数06:读取DTC存储时候的一些扩展信息19+06+DTC+DTCExtDataRecordNumber59+06+DTC+statusOfDTC+DTCExtDataRecordNumber+DTCExtDataRecord[]- 扩展信息:用于记录故障的一些其它信息,比如:故障发生的次数、老化次数、已老化次数等
- 为什么有了快照数据还要有扩展信息呢?
- 快照即故障发生时刻存下来的瞬间的环境数据
- 扩展信息即在故障发生时其它的故障信息,如
aging counter、aged counter、Fault Counter以及event id等
0A:读取所有DTC列表及状态19+0A59+0A+DTCStatusAvailabilityMask+DTC+statusOfDTC
-
-
14清除DTC-
报文格式
- 请求:
14+DTC - 响应:
54
14 FF FF FF 54 - 请求:
-
-
31例程控制RoutineControl- 客户端通过例程
ID(2-Byte)请求启动、停止服务端的例程或者请求例程结果 - 主要用于:
Erasing memory、Resetting - 报文格式
- 请求:
31+Sub-function+routineIdentifier(2-Byte) - 响应:
71+routineControlType+routineIdentifier(2-Byte)+routineInfo
- 请求:
- 常用子服务
01启动例程(startRoutine)02停止例程(stopRoutine)03请求例程结果(requestRoutineResults)
- 客户端通过例程
-
34请求下载Request Download- 报文格式
- 请求:
34+dataFormatIdentifier+addressAndLengthFormatIdentifier+memoryAddress+memorySize dataFormatIdentifier0000以外的值由汽车制造商定义
addressAndLengthFormatIdentifier的含义bit 7-4:Length (number of bytes) of the memorySize parameter,指定memorySize有几个字节bit 3-0:Length (number of bytes) of the memoryAddress parameter,指定memoryAddress有几个字节
memoryAddress要写入数据在内存的起始地址memorySize使用此参数与实际要传输的数据大小进行比较- 响应:
74+lengthFormatIdentifier+maxNumberOfBlockLength lengthFormatIdentifier的含义bit 7-4: Length (number of bytes) of the maxNumberOfBlockLength parameterbit 3-0: reserved by document, to be set to 0
maxNumberOfBlockLength告知客户端后面的每个TransferData报文总共占多少字节
- 请求:
34 11 33 60 20 00 00 FF FF 74 20 00 81 - 报文格式
-
36传输数据Transfer Data- 将数据从客户端传输到服务器
- 报文格式
- 请求:
36+blockSequenceCounter+Data(3-n)blockSequenceCounter序号0x01-0xFF,下一个循环0x00-0xFF
- 响应:
76+blockSequenceCounter+transferResponseParameterRecord
- 请求:
36 01 xx xx # 每条报文占的字节数根据34服务中响应的maxNumberOfBlockLength返回值 76 01 -
37请求传输退出Request Transfer Exit- 用于终止客户端和服务端之间的数据传输
- 报文格式
- 请求:
37 - 响应:
77
- 请求:
37 77 -
实际传输过程
-
依次
34、36和37,为一个循环,其中36数据传输可执行多次 -
37执行结束后,如果还有其它数据传输,则再次执行34、36和37服务
-
-
28通信控制(CommunicationControl)- 用于开启或关闭服务端某些消息的接收/发送报文
- 报文格式
- 请求:
28+sub-function=[controlType]+communicationType communicationType01: normalCommunicationMessages02: networkManagementCommunicationMessages03: networkManagementCommunicationMessages and normalCommunicationMessages
- 响应:
68+sub-function=[controlType]
- 请求:
28 03 02 68 03- 常用子服务
00:enableRxAndTx启用非诊断报文的接收和发送03:disableRxAndTx禁止非诊断报文的接收和发送
-
85控制DTC(ControlDTCSetting)- 用于停止和恢复
DTC状态位的更新 - 报文格式
- 请求:
85+sub-function=[DTCSettingType]+DTCSettingControlOptionRecord - 响应:
C5+DTCSettingType
- 请求:
85 01 C5 01-
常用子服务
01on恢复更新02off停止更新
-
报文格式
- 请求:
85+sub-function=[DTCSettingType]+DTCSettingControlOptionRecord - 响应:
C5+DTCSettingType
- 请求:
85 01 C5 01- 常用子服务
01on恢复更新02off停止更新
- 用于停止和恢复


















