UDS:Unified Diagnostic Services 统一诊断服务。

UDS由ISO-14229系列标准定义,ISO 14229-1 定义了诊断服务,不涉及网络及实现,只有应用层的内容。而ISO 14229-3则定义了UDS在CAN总线上的实现。

诊断通信的过程从用户角度来看非常容易理解,诊断仪发送诊断请求(request),ECU给出诊断响应(response),而UDS就是为不同的诊断功能的request和response定义了统一的内容和格式。

Diagnostic request 的格式:

Diagnostic request的格式可以分为两类:一类是拥有sub-function的,另一类是没有sub-function的。

 UDS协议(一)_请求数据

拥有子服务的诊断请求

 UDS协议(一)_请求数据_02

无子服务的诊断请求

sub-function严格来说是7个bit,而不是1个byte,因为它的最高位bit被用于抑制正响应(suppress positive response,SPR),如果这个bit被置1,则ECU不会给出正响应(positive response); 如果这个bit被置0,则ECU会给出正响应。这样做的目的是可以告诉ECU不要发不必要的response,从而节约通信资源。

Diagnostic response 的格式:

Diagnostic response分为positive和negative两类。positive response意味着诊断仪发过来的诊断要求被执行了,而negative response则意味着ECU因为某种原因无法执行诊断仪发过来的诊断请求。

 UDS协议(一)_应用层_03

positive response

response SID这个字节作为诊断请求的echo,它等于SID + 0X40。后面的两个部分则视具体的诊断服务而定。

 UDS协议(一)_Unified_04

negative response

negative response的格式固定为3个字节,第一个字节为0x7F,第二个字节是被拒绝掉的SID,第三个字节是这个诊断服务无法被执行的原因。下面这张图列举了部分原因代码,比如,如果ECU给出7F 22 13这个negative response,则说明22这个服务因为诊断请求数据长度不对的原因无法执行。

 UDS协议(一)_应用层_05

诊断通信的过程就是诊断仪和ECU交换数据,前者发的是request,后者发的是response,而UDS最重要的作用就是定义了这些request和response的格式和内容。

常见的UDS报文:

 UDS协议(一)_请求数据_06

常见的20个NRC

 UDS协议(一)_应用层_07

转载:​​https://zhuanlan.zhihu.com/p/33583593​

​https://zhuanlan.zhihu.com/p/37310388​