UDS介绍

UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是ISO 15765 和ISO 14229 定义的一种汽车通用诊断协议,位于OSI模型中的应用层,它可在不同的汽车总线(例如CAN, LIN, Flexray, Ethernet 和 K-line)上实现。UDS协议的应用层定义是ISO 14229-1,目前大部分汽车厂商均采用UDS on CAN的诊断协议。

UDS本质上是一系列的服务,共包含6大类26种。每种服务都有自己独立的ID,即SID。

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

如果是肯定的响应(Positive Response),回复[SID+0x40],如请求10,响应50;请求22,响应62。

如果是否定的响应(Negative Response),回复7F+SID+NRC,回复的是一个声明。

肯定响应和否定响应的形式一定要熟记。

常用服务介绍

UDS的26种服务中,有7种很重要。它们分别是:

$10 Diagnostic Session Control(诊断会话),

$14 Clear Diagnostic Information(清除诊断信息),

$19 Read DTC Information,

$22 Read Data By Identifier(通过ID读数据),

$27 Security Access(安全访问),

$2E Write Data By Identifier(通过ID写数据),

$3E Tester Present(待机握手)。

image

下面对这7个服务进行解读。

$10诊断会话

$10包含3个子功能,

01 Default,

02 Programming,

03 Extended,

ECU上电时,进入的是默认会话(Default)。如果您进入了一个非默认会话的状态,一个定时器会运转,如果一段时间内没有请求,那么到时间后,诊断退回到默认会话01。当然,我们有一个$3E的服务,可以使诊断保持在非默认的状态。

报文包含4种类型,即

SID,

SID+SF(Sub-function),

SID+DID(Data Identifier)(读写用),

SID+SF+DID。

NRC:Negative Response Code(否定响应码)。如果ECU拒绝了一个请求,它会回应一个NRC。不同的NRC有不同的含义。

NRC.jpg

例子:以CAN总线网络举例。

八个数据字节,第一字节被网络层占用。

请求(Request):

02 10 02 xx xx xx xx xx

02中的0代表网络层单帧SF,2代表 数据域有2个字节;10是SID,02是子功能。

肯定响应:

02 50 02 xx xx xx xx xx

02同上,10+40表示对SID的肯定回复,02是子功能。

否定响应:

03 7F 10 22 xx xx xx xx;

03同上,7F表示否定响应,10是SID,22是NRC。

$3E待机握手

$3E服务用于向服务器指示诊断仪仍然连接在网络上,之前已经激活的诊断服务功能可以仍然保持激活状态。

例子:

02 3E 80 00 00 00 00 00,发送一个3E服务的报文,保持非默认会话状态。80表示无需回复。

$27安全访问

27服务,加上一个子服务,再加上一个钥匙,这样的服务请求可以进行解锁。

比如下面的例子,2n-1是某个子服务,通过首轮种子的请求,首轮ECU会返回67+01+AA+BB+CC+DD,AA~DD就是种子了。之后第二轮,诊断端会利用种子进行运算(利用整车厂的算法),生成k1(不一定是1个字节),那么发送请求,27+02+[k1]。ECU同样也会通过种子算出k2。当k1和k2匹配时,解锁(Unlocked)成功。

例子:

Rx: 02 27 05 00 00 00 00 00 安全访问,05子功能

Tx: 07 67 05 08 27 11 F0 77 肯定响应,回复了对应安全级别的种子

Rx: 06 27 06 FF FF FF FF 00 发送密钥,4个FF。注意06是与05成对使用的。

Tx: 03 7F 27 78 00 00 00 00 否定响应,7F+27+NRC

Tx: 02 67 06 00 00 00 00 00 肯定响应,通过安全校验

$22读数据

$22读数据,

Request(请求):

22+DID(Data Identifier,通常是两个字节)

Response(响应):

62+DID+Data

DID有一部分已经被ISO 14229-1规定了。比如0xF186就是当前诊断会话数据标识符,0xF187就是车厂备件号数据标识符,0xF188就是车厂ECU软件号码数据ID,0xF189就是车厂ECU软件版本号数据标识符。

$2E写数据

$22写数据,

Request(请求):

2E+DID+Data

Response(响应):

6E+DID

注意,比如0xF186这个DID不支持直接写入数据,需要用$10来进行会话转换。也就是说,对于写数据的请求,一般来说需要在一个非默认会话,或解锁的状态下才能进行。

$19 读DTC

DTC(diagnostic trouble code):如果系统检测到了一个错误,它将其存储为DTC。DTC可表现为:一个显而易见的故障:通讯信号的丢失(不会使故障灯亮起);排放相关的故障;安全相关的错误等。DTC可以揭示错误的位置和错误类型。通常DTC占用3个字节,OBD II占用两个字节。

故障码包括四个大类,分别是PCBU,P是powertrain动力系统,C是Chassis底盘,B是Body车身,U是network通信系统。一个DTC信息占用4个字节。最后一个字节是DTC的状态。前两个字节是我们熟知的类似P0047的故障码。

DTCHighByte

DTCMiddleByte

DTCLowByte

DTCStatus

Byte 1

Byte 2

Byte 3

Byte 4

$19 拥有28个子服务(Sub-Function)。常用的子服务有02(通过DTC状态掩码读取DTC),04(读取快照信息),06(读取扩展信息),0A(读ECU支持的所有DTC数据)。

$14清除DTC

清除(复位)DTC格式,它可以改变DTC的状态。3个FF代表清除所有DTC。

Request:14+FF+FF+FF;

Response:54 。

诊断报文解析

UDS 的诊断数据的发送与接收都是基于CAN,所以每个数据流都包含基本的CAN Message 的架构

CAN Message =CAN ID + CAN DATA

根据上篇UDS文章的叙述,每一个PDU 包含控制信息PCI,数据信息Data.

N_PDU format.png

网络层 PDU(协议数据单元)PCI(协议控制信息)格式:具体如下图所示:

帧类型

bit7-4

bit3-0

Byte 2

Byte 3

单帧

PCItype=0

SF_DL

N/A

N/A

首帧

PCItype=1

FF_DL

FF_DL

N/A

连续帧

PCItype=2

SN

N/A

N/A

流控帧

PCItype=3

FS

BS

ST_min

PCI_format.png

综上所述,N_PDU =N_PCI+N_DATA, N_PCI的值主要集中的前三个字节,N_DATA值主要集中在后面7位字节。其中,

SF_DL 代表单帧中数据字节数(取值0-7),

FF_DL代表 连续帧中的数据字节数(12bit可表四8~4095),

SN代表此帧为连续帧中的第几帧,(0、1、2...E、F、0、1...)

FS流控制帧,有三种状态:继续发送0、保持等待1、数据溢出2

BS规定发送端允许持续传输连续帧数目的最大值(0~255),

STmin限定连续帧相互之间所允许的最小时间间隔。

先面用连个例子进行说明,请参考!

例子 1--- 单帧的数据传输与接收

[图片上传失败...(image-b66bab-1538824826939)]

数据发送: 02 27 09

数据反馈: 03 7F 27 7E ---==否定的响应==(Negative Response),回复==7F+SID+NRC==,回复的是一个声明

数据发送: 02 10 40

数据反馈: 06 50 40 00 32 01 F4 ---==肯定的响应==(Positive Response),回复[==SID+0x40==],就是请求10,响应40;回复的是一组数据

由于这个数据发送与接收都是单帧传输,所以第一个数据的高四位均为0,四个数据流中的第一个字节的低四位,02,03,02,06代表的为此帧数据含有几个字节,多余的数据位都用 00或者AA行填充。

例子2 --- 多帧的数据接收与传输

[图片上传失败...(image-b5e84b-1538824826939)]

数据发送:

06 19 04 00 01 00 00 00

数据反馈:

10 1E 59 04 00 01 00 27

30 00 00 00 00 00 00 00

21 00 0B FF FF FF FF FF

22 FF FF FF FF FF FF FF

23 FF FF FF FF FF FF FF

24 FF FF FF AA AA AA AA

数据发送为单帧,所以06代表发送的数据中含有6个字节,

回复为Positive Response,为连续帧。

10中的1代表连续帧的首帧,==01E代表此连续帧含有30个字节==,

30代表此连续帧的流控制帧,

21,22,23,24代表连续帧中的第几帧,21代表第一帧,22代表第二帧,依此类推,其中AA为填充位。

参考资料:

uds帧格式_如何看懂UDS诊断报文相关推荐

  1. 建筑电气工程设计常用图形和文字符号_怎么看懂建筑电气工程图?用最直白方式,教你基础识图!超级详细...

    ​如何看懂建筑电气工程图?我们可能知道AutoCAD,也可能知道在迅捷CAD图库下载建筑电气工程图纸,还可能会使用CAD绘制简单的图形对象.但是,当我们需要进行建筑识图的时候,你也可能连里面的经典图纸 ...

  2. 符号说明表怎么做_能看懂这些房屋施工图,说明你家装修没问题了

    一.基本知识 1.标高 1.1绝对标高亦称绝对高程或海拔高度,我国把青岛附近黄海的平均海平面定为绝对标高的零点,全国各地的标高均以此为基准. 1.2标高是把某地点对应的绝对标高定义为±0.000,(如 ...

  3. 触摸传感器的电路图符号_如何看懂汽车电路常用图形符号,看完这篇文章就懂了...

    汽车电器的电原理图主要由各种单元电路组成,各单元电路又由各种元器件根据不同功能的需要组合而成.因此,要想轻松看懂汽车电器电路图,首先要认识电路图中各种元器件(零部件)的符号并懂得一些与其有关的基本知识 ...

  4. violinplot如何看懂_如何看懂电工图纸

    微信用户求助:如何看懂电工图纸 电动机控制线路分为主线路和控制线路两部分.我们看图一般是从左到右从上到下的顺序来看.  从上图来看,左边是主线路图.三相电源经过主开关QS,然后经过保险FU,在经过接触 ...

  5. 怎么看外文文献的影响因子_如何看懂英文论文?别找了,方法在这儿!

    自从从小编在公众号推出了"EasyGPA论文干货"系列后,就有不少小伙伴在后台跟小编讨论关于论文的知识. 首先小编很感谢各位童鞋对小编的支持,很认真的阅读了那些真的让人" ...

  6. ct值在哪里看_如何看懂电流互感器铭牌

    原标题:如何看懂电流互感器铭牌 电流互感器的种类 电流互感器大致可按用途分为两类: 01 测量用电流互感器(或电流互感器的测量绕组):在正常工作电流范围内, 向 测量.计量等装置提供电网的电流信息 . ...

  7. dwr框架查看外放方法_轻松看懂建筑图纸符号!这样简单高效的方法你一定要知道...

    视频学习教程推荐: [天正建筑CAD2020教程]点击查看 [天正暖通CAD2020教程]点击查看 [天正电气CAD2020教程]点击查看 [天正给排水CAD2020教程]点击查看 [园林景观设计教程 ...

  8. 地质勘查土质分类图片_如何看懂地质勘察报告

    1.如何阅读勘察报告 (1)直接看结束语和建议中的持力层土质.地基承载力特征值和地基类型以及基础砌筑标高. (2)地基承载力一般以千帕kPa为单位,1kPa=1kN/m2. (3)从持力层土质提供的承 ...

  9. rocketmq原理_彻底看懂RocketMQ事务实现原理

    面试中经常会问到比如RocketMQ的事务是如何实现的呢?学习框架,我们不仅要熟练使用,更要掌握设计及原理,才算熟悉一个框架. 1 RocketMQ 事务使用案例 public class Creat ...

最新文章

  1. jsp java乱码转换_Java Web 编码问题一:jsp的编码问题
  2. 再来一个吊打百度网盘的开源神器,还是99年妹子开发的
  3. python request_python爬虫03 | 那个叫做 Urllib 的库让我们的 python 假装是浏览器
  4. spyder jupyter集成
  5. 框架:mybatis常用标签(refid、foreach、trim)
  6. Android开发之在Fragment和Activity页面拍照需要注意的地方
  7. Golang面向API编程-interface(接口)
  8. Java加密与解密的艺术~RSA实现
  9. Qemu之CPU mode介绍
  10. AJAX(异步的 JavaScript 和 XML)
  11. 运算符重载为类的成员函数
  12. SOCKET编程详解
  13. matlab 编写雷达波形,雷达信号处理+Matlab程序
  14. 极验打码平台官网地址
  15. MBA-day4数学-十字交叉法
  16. 国家开放大学2021春1021劳动与社会保障法题目
  17. c语言对数函数log的使用
  18. 构建linux图形安装程序,Scientific Linux 5.5 图形安装教程
  19. c语言计算利息答案是0.0,ACCP北大青鸟4.0 程序逻辑和C语言实现课本后的习题和上机题目,怎么做?...
  20. 如何把pdf转换成excel

热门文章

  1. 面试官不讲武德,竟然问了我18个JVM问题!
  2. 集合使用与内部实现原理
  3. Visual Studio扩展工具添加与卸载
  4. Opencv dnn实现人类性别检测和年龄预测
  5. Spring+SpringMVC+Mybatis 整合入门
  6. python做大屏数据可视化_超强大!Python 可视化这款大屏就够了!
  7. 怎么更改Windows11鼠标指针大小和样式
  8. SAP ABAP刷新ALV 渲染刷新 (我也不太懂,反正就这么写了)
  9. oracle 监听拒绝连接,报mybatis映射文件错误Listener refused the connection with the following error: ORA-12519, TNS
  10. 利用dos进入mysql数据库操作数据