只整理了自己理解和使用到的功能,自用!!!
1、概述
(1)诊断和通信管理类
0x10诊断会话控制:客户端控制目标ECU的诊断会话状态
0x27安全访问:客户端请求解锁受保护的ECU
(2)数据传输类
0x22通过DID读取数据:客户端请求读取由提供的DID标识的记录的当前值
0x2E通过DID写数据:客户端请求写入由提供的DID指定的记录数据
(3)存储数据传输类
0x14清除诊断信息:允许客户端从目标ECU清楚诊断信息(包括DTC、捕获的数据等)
0x19通过DTC读取故障码信息:允许客户端从目标ECU请求诊断信息(包括DTC、捕获的数据等)
2、诊断请求及响应
结合:《UDS协议从入门到精通(UDS速查手册)》(完结撒花版)_obdonuds-CSDN博客
(1)诊断请求:
诊断请求指向车辆发送的请求信息,用于请求执行某个服务。诊断请求消息由三个部分组成:SID,子功能和实际数据
-SID用于标识要执行的服务
-子功能(sub-function)指这个服务还能更进一步的划分成具有启动/暂停的子功能。
诊断请求包格式:1Byte 的SID+1Byte的sub-function(1bit SPR+7bit sub-function)+不定长的实际数据
SID | SPR | sub-function | 实际数据 |
note:
- sub-function是可选的,如果用不到该功能,可以没有该字节
-SPR为肯定相应抑制位:1)SPR=1时,抑制肯定响应,即ECU不给出肯定响应;2)SPR=0时,需要ECU给出肯定响应(若某服务没有子功能字节,默认发肯定响应)
(2)诊断响应
诊断响应指向车辆发送服务请求后,如果执行成功,则返回的响应消息称为肯定响应,反之为否定响应。
肯定响应格式包:1Byte 的(SID+0x40)+1Byte的sub-function(1bit SPR+7bit sub-function)+不定长的其他数据
SID+0x40 | SPR | sub-function | 实际数据 |
否定响应格式包:1Byte 的固定值0X7F+1Byte的SID+1Byte的NRC
固定值:0X7F | SID | NRC |
note:
NRC为否定响应码,NRC的优先级从高到低排列:(参考这个:一文搞懂UDS的各种NRC – CN知EV (cnzev.com))
NRC 0x11 > 0x7F > 0x13 > 0x12 > 0x7E > 0x33 > 0x24 > 0x31 > 0x22 > 0x78
3、实例理解
(1)0x10诊断会话控制
例:发送:10 01
回复: 50 01 00 28 01 90
计算得出:P2=HEX(00 28)=DEC(40)
P2*=HEX(01 09)=DEC(400)
这里的P2和P2*是时间参数
(2)0x27安全访问
例:发送:27
回复:通过安全访问
(3)0x22通过DID读取数据,0x2E通过DID写数据
例:
发送:2E F1 90 数据 #写入数据
回复:6E F1 90
发送:22 F1 90 #读数据
回复:62 F1 90 数据
(4)0x19通过DTC读取故障码信息
结合:
【UDS诊断】——0x19 02_uds 19 02-CSDN博客
The status of DTC各bit理解_诊断故障bit位含义-CSDN博客
关于 DTC的各bit的理解:
bit0置一:表示该DTC此时发生了故障
bit0置零:开启新的操作周期 / test pass / ClearDTC
bit1置一:在当前的操作周期内,该DTC发生过故障
bit1置零:开启新的操作周期 / ClearDTC
当bit1置一,bit0置0时,表示在当前操作周期里,该DTC发生过故障,但是此时未发生故障
bit2置一:在上一个操作周期或当前操作周期,发生过故障。
bit2清零:在上一个操作周期和当前操作周期均未发生故障 / ClearDTC
bit3置一:满足confirmed条件,此时该DTC已被存储至memory中
bit3清零:当操作周期次数已满足老化阈值 / ClearDTC
bit4置一:自从清DTC之后还没有完成过针对该DTC的测试
bit4清零:自从清DTC之后已经完成过针对该DTC的测试
bit5 置一:自上次清除诊断信息以来,DTC 测试至少返回了一次失败的结果
bit5清零:表示测试尚未运行 / DTC测试已运行并通过
bit6置一:指示DTC测试在当前操作周期内尚未运行完毕
bit6清零:测试运行并且通过或失败
在操作周期内,若此DTC未做任何set操作,此bit为1,若此时做set操作,不管是fail还是pass,此bit均会清零。
bit7置一:ECU请求激活警告指示
bit7清零:ECU不请求激活警告指示
例:若810001:低压故障 810002:通讯故障
发送:19 02 09
回复:59 02 FF 81 00 01 2C 81 00 02 2F
2C :0010 1100
bite 2(testFailed)为1,bite3(confirmedDTC)为1——历史故障(false)
2F:0010 1111
bite 1(testFailed)为1,bite3(confirmedDTC)为1——当前故障(ture)
(5)0x14清除诊断信息
例:
发送清楚故障信息:14 FF FF FF
回复:54 #肯定响应
(6)否定响应
例:
发送:10 05
回复:7F 10 12 #7F:否定响应固定值;10:SID; 12:NRC,表示不支持子功能