UDS介绍统一诊断服务UDS )诊断协议是由ISO 15765和ISO 14229定义的汽车通用诊断协议,位于OSI模型中的APP应用层,用于不同的汽车总线例如以太网) net )中UDS协议的APP应用层定义为ISO 14229-1,目前大多数汽车制造商采用的是UDS on CAN诊断协议。
UDS本质上是一系列的服务,共有6种26种。 每个服务都有自己的ID,即SID。
SID:Service Identifier,诊断服务IDUDS本质上是一种定向通信,是一种交互协议Request/Response ),是诊断方向ECU指定的请求数据如果是肯定应答Positive Response),则回复[SID0x40],而对于请求10而言回复50; 请求22,回应62。 如果是否定的回答3358www.Sina.com/),则回复Negative Response,回复声明。7F+SID+NRC
常用的服务介绍在UDS的26种服务中,有7种很重要。 分别如下
$ 10诊断会话控制、$ 14 clear诊断信息、$ 19 read DTC信息和$ 22 readdatabyidentification $ 27 secure
image
就这7项服务进行解读。
$10诊断会话$10包含三个子功能:
01 Default,02 Programming,03 Extended,肯定响应和否定响应的形式一定要熟记。当然,有$3E的服务可以将诊断保持在非默认状态。
ECU上电时,进入的是默认会话(Default)。如果您进入了一个非默认会话的状态,一个定时器会运转,如果一段时间内没有请求,那么到时间后,诊断退回到默认会话01,即
SID、sidSFsuB-function )、sid did data identifier ) )读写用)、SID SF DID。 如果报文包含4种类型ECU拒绝请求,它将响应NRC。 不同的NRC有不同的含义。
NRC.jpg
例如:以CAN总线网络为例。
NRC:Negative Response Code(否定响应码)
请求Request ) 3360021002xxxxxxxx
02中的0表示网络层的第一帧SF,2表示数据字段有2个字节。八个数据字节,第一字节被网络层占用
肯定应答: 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服务器消息,保持非默认会话状态。 80表示不需要回复。
$27可以通过安全访问27服务器并添加子服务器和密钥来解锁这些服务请求。
例如,在以下示例中,2n-1是一个子服务,一轮种子请求,一轮ECU返回67 01 AA BB CC DD,AA~DD为种子。 然后,诊断方利用种子进行运算利用整车厂的算法),生成k1 ),发送请求,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肯定应答,10是SID,02是子功能
rx:062706 fffff 00http://www.Sina.com /,4个ff。 注意06与05成对使用。
Tx: 03 7F 27 78 00 00 00 00否定应答,7F 27 NRC
Tx: 02 67 06 00 0
0 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的故障码。
DTCHighByteDTCMiddleByteDTCLowByteDTCStatusByte 1Byte 2Byte 3Byte 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-4bit3-0Byte 2Byte 3单帧PCItype=0SF_DLN/AN/A首帧PCItype=1FF_DLFF_DLN/A连续帧PCItype=2SNN/AN/A流控帧PCItype=3FSBSST_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、数据溢出2BS规定发送端允许持续传输连续帧数目的最大值(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 2730 00 00 00 00 00 00 0021 00 0B FF FF FF FF FF22 FF FF FF FF FF FF FF23 FF FF FF FF FF FF FF24 FF FF FF AA AA AA AA
数据发送为单帧,所以06代表发送的数据中含有6个字节,
回复为Positive Response,为连续帧。
10中的1代表连续帧的首帧,==01E代表此连续帧含有30个字节==,30代表此连续帧的流控制帧,21,22,23,24代表连续帧中的第几帧,21代表第一帧,22代表第二帧,依此类推,其中AA为填充位。
参考资料:
https://zhuanlan.zhihu.com/p/37310388https://zhuanlan.zhihu.com/p/29250948
作者:智车科技
链接:https://www.jianshu.com/p/b5805e734ed6
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。