[UDS] --- UDS概述

简介: [UDS] --- UDS概述

UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是在汽车电子ECU环境下的一种诊断通信协议,在ISO 14229中规定。它是从ISO 14230-3(KWP2000)和ISO 15765-3协议衍生出来的。“统一”这个词意味着它是一个“国际化的”而非”公司特定的”标准。到目前为止,这种通信协议被用在几乎所有由OEM一级供应商所制造的新ECU上面。这些ECU控制车辆的各种功能,包括电控燃油喷射系统(EFI),发动机控制系统,变速箱,防抱死制动系统(ABS),门锁,制动器等。

1 诊断通信基本流程

其实诊断通信的机制很简单,事件驱动型,一问一答。

类比client-server通信方式,诊断仪即客户端,发送request,服务器即ECU,收到request之后进行处理,然后向诊断仪回复response。

有些情况下,我们可能只需要给ECU发送请求,而不需要ECU返回响应,例如用诊断命令雨刷动两下,我们可以通过雨刷的动作来判断诊断指令是否执行成功。这种通信方式是无反馈的,也是允许的。

1.1 响应时间P2 & P2*

Tester给ECU 发送request之后,ECU需要在P2server时间内给出响应

如果ECU当前正在处理别的事情,不能在P2server时间内给出response,ECU会先在P2server时间内给出RC(responde code)为78的报文,告诉Tester我现在正在忙,之后会在P2server时间内给出其他响应报文;
如果P2server
时间内还是不能给出肯定响应或者否定响应,那么给出pending报文,直到ECU可以给出正确的response

2 诊断寻址方式

在总线上往往有着众多ECU设备,作为诊断设备既可以与所有的ECU一起沟通,也可以指定某一个ECU单独沟通。所以寻址方式就有功能寻址(Functionally Addressed)和物理寻址(Physically Addressed)两种。

功能寻址可以广播诊断请求Request,同时等待总线上的ECU给与响应。

物理寻址指定发送特定诊断请求Request,等待指定ECU给与响应。

物理寻址:一对一

功能寻址:一对多

3 SI (Service ID)

SID:Service Identifier,诊断服务ID。UDS本质上是一种定向的通信,是一种交互协议(Request/Response),即诊断方(Tester)给ECU发送指定的请求数据(Request),这条数据中需要包含SID,且SID处于该应用层数据的第一个字节。

理论上一个字节的取值范围是0x00-0xFF,实际SID可取值的分布如下表:

4 诊断交互格式

4.1 诊断请求格式:

Diagnostic request的格式可以分为两类:一类是拥有sub-function的,另一类是没有sub-function的,如下面两张图所示。Service ID(以下简称SID)的长度固定为1个字节,代表了这条诊断命令执行的什么功能。sub-function的长度也是1个字节,它通常表示对这个诊断服务的具体操作,比如是启动、停止还是查询这个诊断服务。而后面的parameter则根据各个诊断服务的不同具有不同的内容,长度和格式并没有统一规格,它用于限定诊断服务执行的条件,比如某个诊断服务执行的时间等。parameter的一个重要应用是作为标识符,标识诊断请求要读出的数据内容,我会在后续的文章里详细讲述各个诊断服务的应用。

肯定响应抑制位

子功能参数的取值范围为0x00 - 0x7F。细心的同学应该发现了,子功能参数占用了一个字节,可用的数值范围为0~0xFF。但子功能的最大取值只到0x7F,那么最高位去哪了呢。这个子功能参数的最高位就是诊断服务肯定响应抑制位SuppressPosRspMsgIndicationBit,简写为SPRMIB。

如下是诊断服务子功能参数的格式定义。其中的最高位Bit7就决定了ECU是否需要给出肯定响应。

肯定响应抑制位的作用

ECU收到SPRMIB为1的服务时,不需要给出肯定响应。相反,当ECU收到SPRMIB为0的服务时,需要给出肯定响应。

例如,ECU收到诊断仪发来的Tester Present服务为$02 3E 00时,需要给出$02 7E 00的肯定响应。同样是Test Present服务,如果ECU收到的是$02 3E 80,则无需给出肯定响应。

4.2 诊断响应格式

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

肯定响应格式

肯定响应(Positive Response)格式为:(SID+0X40)+Subfunction(子功能)+数据

例如:

请求0X10服务,Subfunction(子功能)为0X02

肯定响应第1个字节为0X50,第2个字节为0X02

否定响应格式

否定响应(Negative Response)格式为:0X7F+SID+NRC

例如:

请求0X10服务,否定响应第1个字节为固定的0X7F,第2个字节为0X10,第3个字节为NRC

NRC是否定响应码,可以根据返回的NRC判断是什么原因导致的否定响应

下面是实际的canoe诊断肯定响应和否定响应的截图:

相关文章
|
6月前
|
传感器 安全 内存技术
[UDS] --- RoutineCommunicationControl 0x31
[UDS] --- RoutineCommunicationControl 0x31
367 1
|
6月前
|
安全
[UDS] --- TesterPresent 0x3E
[UDS] --- TesterPresent 0x3E
139 1
|
6月前
|
运维 监控 网络协议
QT实现TCP通信:从基础到高级的全面解析
QT实现TCP通信:从基础到高级的全面解析
828 0
|
6月前
|
安全
[UDS] --- WriteDataByIdentifier 0x2E
[UDS] --- WriteDataByIdentifier 0x2E
173 0
|
5月前
|
网络协议 网络性能优化 网络架构
运输层---概述
运输层---概述
49 2
|
6月前
|
安全 内存技术
[UDS] --- UDS服务应该支持的NRC
[UDS] --- UDS服务应该支持的NRC
730 0
|
6月前
|
存储 安全
[UDS] --- ECUReset 0x11
[UDS] --- ECUReset 0x11
110 0
|
6月前
|
安全
[UDS] --- ReadDataByIdentifier 0x22
[UDS] --- ReadDataByIdentifier 0x22
322 0
|
6月前
|
安全
[UDS] --- CommunicationControl 0x28
[UDS] --- CommunicationControl 0x28
167 0