UDS诊断详解
Posted 多喝几口水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UDS诊断详解相关的知识,希望对你有一定的参考价值。
目录
Recommended Session(s) for Service
一、诊断常见的协议:
ISO14230针对K线的诊断协议,15765针对CAN线的协议,15031针对排放相关的定义,ISO14229。
二、OEM诊断规范
ISO14229
UDS可以基于不同的总线网络来实现,诊断服务,发送SID给ECU如果ECU认可,就发送SID+40(肯定响应),如果没有认可,会回一个7F,7F是否定响应的标识符。用7F+SID+NRC,NRC就是否定响应的代码。(否定响应),在14229里面NRC有定义(从10到93),这个可以去14229-1里面找到,有全部的定义。
UDS定义的相关服务:
在UDS里面定义的服务有26种,每一个服务发出请求的格式是不一样的。但是每一个服务都带有格式标识符(SID)。
SID的格式
SID主要有四种不同的格式:
SID,只发出一个服务的请求,ECU就可以认可,
SID+SF,服务后面加上子服务Subfunction,这样ECU才会认可,
SID+DID,由我们的服务再加上我们的数据标识符Data Identifier,
SID+SF+DID,既要加上子服务,又要加上我们的DID
ISO-14229常用服务
在14229的26种服务中,有几个常用服务:
首先是10服务,10服务是诊断会话的控制,是诊断最基本的服务,所对应的是27的服务,是诊断的管理控制的服务,27是安全访问的服务。22和2E,是通过我们的DID来读写我们数据的服务。还有就是跟DTC相关的两个服务,19和14,19是读DTC,14是清除DTC。
10服务(诊断会话的控制)
当ECU上电的时候,进入的是默认会话Default Session(10 01),如果想跳转到非默认会话,也就是02或者03,就需要用10+子服务(SF),里面有一个S3计时器,如果在S3的时间没有任何请求发出来的话,我们会自动的回到默认会话,相当于保护机制。还有一个重要的服务,3E服务,就是保持在当前会话的服务,因为我们在非默认会话的时候,不可能一直发出请求。当我们停下来做数据分析或者其它动作的时候ECU没有发出有效命令的时候,我们可以用到3E,3E就是在S3计时时间到之前,我们发出一个3E服务,这样就会一直保持在非默认会话的情况。
在UDS当中非常常用的表格:
在Cvt列,M代表强制,强制使用10和子服务。在UDS SF当中定义了00到03,其中00是不会被使用的。01到03代表不同的含义。Response对应的相应,对应的肯定响应是在SID上加上40,10+40=50,S也代表强制使用,在这里面代表如果我们的肯定相应没有被抑制的话,这个字节就是要被强制使用的。后面我们的服务也是被强制使用的。后面C是有条件使用的。由客户决定。
不同的NRC,对于10来说主要用到的就是12 13还有22三种否定响应。
CAN总线示例
在CAN总线当中每一个帧的报文每一条请求都只支持8个字节。第一个02代表TP层的一个单帧,2代表后面有两个有效字节。在Request里面,后面5个字节对我们来说是没有意义的。肯定响应也一样,三个字节加5个填充位。最后否定响应,有四个字节7F+SID+否定响应的代码NRC。22表示当前的状态。
Recommended Session(s) for Service
在默认会话服务当中,有一些不支持,但是在非默认会话当中,这些都是支持的。
三、 安全访问
平常读写只需要用到22服务+DID,有一些数据需要加密,在ECU上电以后,是一个锁定的状态,我们通过27+子服务+密钥,通过这样的服务请求来进行一个解锁状态。解锁之后ECU状态就变成了Unlocked状态,Unlocked状态整车厂可以设置不同的级别。各个级别之间没有制约关系。是可以互相转换的。
安全解锁步骤
在解锁之前,先向我们的ECU请求一个种子,所以用27服务和2n-1(相当于是奇数),让n=1,这时候27 01对ECU进行了请求解锁,这时候ECU给我们一个肯定的响应,就回了一个67服务和2n-1,就是67 01后面再跟一段字符,就是我们的种子。当我们的测试端拿到种子的时候,进行运算(由整车厂进行规定),利用这个算法,生成钥匙K1,然后再通过27 2n K1,就是 27 02 K1,把这条请求发送给ECU,ECU拿到K1进行运算,计算出K2,当K1和K2匹配的时候,ECU就可以解锁了。解锁以后ECU向测试端发出肯定响应67 02。
Supported NRC:基于27服务所支持的NRC
通过DID读数据:
22服务通过DID来读数据,后面加上DID标识位,如果DID肯定响应的话就会回62加上DID后面的
根据distapu的数据长度来确定。示例:如果去读当前诊断会话,F1 86代表着当前会话的诊断标识。22 F1 86作为请求。请求的意思是先读取数据,读的数据标识符是当前激活的诊断会话。肯定响应22+40=62 F1 86 最后一个字节是02,02代表编程会话。
DID有一部分已经被UDS规定了,可以在14229-1里面找到。这是5个相关DID,可以使用可以不使用
通过DID写数据:
2E DID Data,F186这个DID不能强制写入诊断会话。需要用10来进行会话的转换。写的请求一般来讲是在非默认会话和解锁状态下面来进行的。
四、DTC
诊断故障代码,通过诊断服务来读取故障。
DTC的结构
在UDS种规定以3个字节的长度作为一个DTC,一般来说都会使用15031-6里面的规范来规定3个字节所代表的不同的含义。前两个字节可以代表一个根DTC,最后一个字节是一个DTC状态的位。FTB就是错误类型的Bit,fault tape bit, 在H-OBD和OBD II中都有不同的DTC的格式。在商用车J1939当中也不太一样。
DTC ISO 15031-6:
最高的两个位,代表的是故障系统的分类。00是动力系统,01是底盘系统,10代表的是车身系统 11代表网络系统。这样就把所有DTC分为四大类,就是P C B U,第五位和第四位这两位分别代表0123,00 01 10 11,01是车厂控制的,其他的由ISO协议规范来控制。对于一个根DTC来说是由一个字母和四个数字来组成的。
读取DTC的19服务
19服务也是配合子服务来使用的,有28种子服务,02是读取DTC,通过DTC的状态掩码来读取,04是读取一个快照信息,06是读扩展信息,0A是读ECU当中支持的所有DTC的数据。
02服务
02服务,通过DTC的状态掩码来读,DTC状态掩码:这里面有8个字节,每一位都代表着不同的状态。从0到7,具体定义看14229附录4中的具体定义。DTC的状态有专门的一个字节来表示。
对于02服务,字节的用法,有不同的3种类型。在请求的时候可以随意设置,在响应当中也会响应一个DTC状态,和请求不同,响应的时候就是1502+ECU可以支持的所有的DTC状态掩码,假如都置1,那响应的时候就是FF,第三种形态对于每个DTC来说,都会有一个相应的故障的状态。这个也会表现在肯定响应当中。
DTC读取:
当我们请求DTC的时候,我们就用19 02 故障状态掩码(SM),肯定响应的时候也是要有一个状态掩码SAM,在每一个DTC当中,不光只有三个字节的本身DTC代表的一个CODE, 最后一个位还会有一个DTC的状态。这个是当产生和记录的时候这个位就已经被创建好了。19 0A也一样,响应的时候响应59 0A。
DTC擦写:
当故障被清除以后,系统是不会把DTC清除掉的,这时候用14服务进行擦写,14服务后面会加3个字节代表我们的DTC的分组,如果拿到了肯定响应54的时候,就代表所有的DTC都已经被清除掉了。
五、诊断通讯模式
因为诊断是应用层面的,所以UDS服务前面要加上地址的寻址SA代表原地址,TA代表目标地址,TA的类型代表着目标地址的类型。
物理寻址
物理寻址模式,原地址T会向所有ECU发出一个E2的请求,就是点对点的通讯只能对一个ECU来进行通讯,这种就是物理寻址。
功能寻址
功能寻址是广播式的寻址,T向多个ECU发送功能寻址的地址,这个功能被多个ECU都认可,所有寻址的信息都可以叫做CAN-ID,对我们一个ECU来说,它请求的时候可以认可两种请求的CAN-ID。对一个ECU,它响应的时候只有一个物理寻址的ID。能接受的请求有两种,可能是物理请求,也可能是功能请求。
详解UDS CAN诊断:什么是UDS(ISO 14229)诊断?
目录
之前讲解到CAN物理层和数据链路层的相关知识,这些属于ISO 11898-1、ISO 11898-2和ISO 11898-3协议方面的知识,本篇博文开启新篇章,讲解依托于CAN通信的应用层服务:UDS(ISO 14229)诊断协议。
对汽车电子、CAN通信、UDS诊断技术感兴趣的小伙伴请关注公众号:美男子玩编程,公众号优先推送最新技术博文,创作不易,请各位朋友多多点赞、收藏、关注支持~
本篇博文素材来源于:ISO 14229-1-2020:规范和要求。
1、UDS诊断概念
UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是在汽车电子ECU环境下的一种诊断通信协议。简单来说,可以理解为UDS诊断协议就是ISO 14229协议,在ISO 14229协议中定义了UDS服务用法、服务格式等信息。
UDS诊断最主要目的是为了能够快速准确判断车辆或者某个控制器的故障以及故障原因,从而为维修提供可靠的依据。
2、UDS诊断组成部分
截止到2020年,UDS诊断由以下8个部分组成:
- ISO 14229-1-2020:规范和要求;
- ISO 14229-2-2013:会话层服务;
- ISO 14229-3-2012:CAN实现的统一诊断服务(UDSonCAN) ;
- ISO 14229-4-2012:FlexRay实现的统一诊断服务(UDSonFR) ;
- ISO 14229-5-2013:Internet协议实现的统一诊断服务(UDSonIP);
- ISO 14229-6-2013:K线实现的统一诊断服务(UDSonK-Line) ;
- ISO 14229-7-2015:本地互联网络实现的统一诊断服务(UDSonLIN);
- ISO 14229-8-2020:时钟扩展外围接口实现的统一诊断服务(UDSonCXPI)。
在开放系统互连(OSI)基本参考模型中规定了各类物理层通信对应部分的UDS诊断协议。例如,CAN通信(ISO 11898-1、ISO 11898-2和ISO 11898-3)在应用层的UDS诊断协议是ISO 14229-1和ISO 14229-3。
3、UDS诊断服务
UDS诊断是一种定向通信的交互协议(Request/Response),诊断方(Tester)发送服务请求,ECU返回响应(肯定响应/否定响应)。
UDS诊断包括6大类,26种服务,每种服务都有自己独立的ID,即SID(Service Identifier)。
UDS诊断服务的通信协议基本相似,但又有所区别。
以诊断和通信管理功能单元(Diagnostic and Communication Management functional unit )为例,服务请求和响应有两类:一类是具有Subfunction(子功能),另一类是不具有Subfunction(子功能)。
不具有Subfunction(子功能)的UDS诊断服务请求和响应机制如下图所示:
诊断方(Tester)向ECU发送指定的请求数据(Request),这条数据中需要包含SID,且SID处于该应用层数据的第一个字节。
ECU接收到请求数据(Request)后会返回响应,可返回肯定响应或者否定响应。
肯定响应(Positive Response)格式为:(SID+0X40)+数据。例如,请求0X10服务,肯定响应第1个字节为0X50;请求0X22服务,肯定响应第1个字节为0X62。
否定响应(Negative Response)格式为:0X7F+SID+NRC。例如,请求0X10服务,否定响应第1个字节为固定的0X7F,第2个字节为0X10,第3个字节为NRC。NRC是否定响应码,可以根据返回的NRC判断是什么原因导致的否定响应。
具有Subfunction(子功能)的UDS诊断服务请求和响应机制如下图所示:
诊断方(Tester)向ECU发送指定的请求数据(Request),这条数据中需要包含SID,且SID处于该应用层数据的第一个字节。
ECU接收到请求数据(Request)后会返回响应,可返回肯定响应或者否定响应。
肯定响应(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判断是什么原因导致的否定响应。
本篇博文不再赘述UDS服务所有类型的协议格式,在之后的博文中会详细讲解每种类型每个ID服务的协议和功能。
UDS诊断 ISO 14229 1~8整套协议-中英文最新版
以上是关于UDS诊断详解的主要内容,如果未能解决你的问题,请参考以下文章
详解UDS CAN诊断:DiagnosticSessionControl Service(SID:0X10)
详解UDS CAN诊断:DiagnosticSessionControl Service(SID:0X10)
详解UDS CAN诊断:SecurityAccess Service(SID:0X27)
详解UDS CAN诊断:SecurityAccess Service(SID:0X27)