UDS诊断协议——网络层协议

一、UDS诊断协议概述

 UDS(unified Diagnostic Service, 统一诊断服务)是一个在整个汽车系统上经常使用的设备维护协议。其主要遵循: ISO-15765、ISO-14229,其ISO-15765协议是适用于网络层的协议,主要规范了“传输协议和网络层服务”, ISO-14229协议对应用层、会话层做出了定义。

二、网络层协议

协议功能

       UDS网络层主要目的把数据转换成能适应CAN总线规范的单一数据帧,从而进行传输。如果将要传输的报文长度超过了CAN数据帧的长度,则需要将报文信息进行拆分后传输,每次至多可以传输4095个字节长度的报文。

网络层协议数据单元(N_PDU)

        网络层协议数据单元(N_PDU,Network_Protocol Data Unit)包含N_AI,N_PCI,N_Data。即地址信息,协议控制信息和数据。

     地址信息主要由三种寻址方式:隐含源地址、目标地址、寻址方式信息

      协议控制信息主要用于标识N_PDU类型:单帧,第一帧、连续帧,流控帧。

协议控制信息(N_PCI)

N_PCL字节概要:

 N_PCL type值的定义:

1、单帧(SF)

一帧can报文就可以处理完uds服务。can报文首字节为N_PCI字节,单帧字节预览如下图所示:

单帧字节中相关值说明:

     举例说明:单帧传输  03 49 53 44 00 00 00 00

     单帧can报文首字节高4bit为0表示首帧,首字节低4bit表示单帧数据长度,即N_Data的有效字节数。通过上面报文我们可以看到N_Data有效字节数为3,有效字节数不足8字节,可填充任意数,这里填充00。在接收方接收到该can报文后,解析can报文首字节03便可知该报文为单帧且只有3个有效字节数,后续全为补充的无效字节数。

2、首帧(FF)

        如果发送方发送N_Data数据过长时,则需要拆分成多帧报文,被拆分后的报文需要通过多个N_PDU来发送,而接收方接收到多个N_PDU信息后进行重组。发送方发送多帧时,需要先发送首帧来告知接收方有多少字节数要发送到接收方。首帧字节预览如下图所示:

 首帧字节中相关值说明:

  举例说明:首帧传输  10 18 00 00 00 00 00 00

      can报文首字节高4bit为1表示首帧。首字节低4bit和byte2组合12bit表示发送方发送的数据长度,即N_Data的有效字节数。在图中可以看到N_Data有效字节数为0x018,即24个有效字节数。因此如图所示,在接收方接收到该can报文后,解析can报文前两个字节0x10 0x18便可知该报文为第一帧且有24个有效字节数,后续全为补充的无效字节数。

3、连续帧(SN)

        发送方发送首帧FF,然后接收到接收方的流控帧FC后,若条件允许可继续发送信息,则需根据连续帧CF的控制信息格式来发送信息。连续帧是发送方为了发送大量数据字节而采用的方法,发送模块将发送的数据进行拆分,通过多帧传送的方式传递出去。

连续帧字节总览图:

 

SN表示 Sequence Number,用来指示连续帧的序号是多少,使用这个机制的目的就是为了让发送方按顺序发送CF,并且接收方在接收CF的时候,能根据 SN 来判断数据帧是否按照正确顺序来接收,从而做出相应的判断。

SN一共有4位表示,所以其可以表达的范围是 0x0 - 0xf;

相应的,对于 SN 标准是有一条约束的:

(1)、SN应该从0开始计数,首帧的序列号应该为0,首帧虽然没有明确表示出序列号,但是应该将首帧当作0号序列对待;

(2)、 连续帧的第一帧的序列号应该为1;

(3)、当拆分传输时,SN 序列号加一递增;

(4)、SN的值不应受任何流控制帧的影响;

(5)、 SN的值循环增加。

举例说明:连续帧传输  23 00 00 00 00 00 00

        can报文首字节byte1高4bit为2时表示该帧为连续帧CF。byte1低4bit 为连续帧的顺序号SN。对于所有的拆分信息,SN开始于0。第一帧应当分配值为0。虽然第一帧 N_PCI没有明确表示出序列号,但是应该将首帧当作0号序列对待,第一个流控帧FC后的连续帧SN设置为1,同一拆分信息上,每一个新增的连续帧顺序号SN增1,连续帧顺序号SN的值不受流控帧的影响,当连续帧顺序号SN值为0x0F时,下一个连续帧中将顺序号SN重置为0。

4、流控帧(FC)

      UDS多帧通讯时:1、发送方发送首帧FF给接收方。2、接收方接收到首帧,解析首帧。3、接受方根据自身条件判断后(如:接收数据缓存大小,接收数据快慢能力,当前是否可以接收数据等),回复一帧流控帧FC给发送方。4、发送方根据接收到接收方的流控帧FC来决定后续的操作。

流控帧字节总览图:

 流控帧FS值定义:

 流控帧BS值定义:

 流控帧间隔时间STmin值定义:

 举例说明: 30 02 14 00 00 00 00 00

        can报文首字节byte1高4bit为3时表示该帧为流控帧FC。byte1低4bit为流状态FS(0表示继续发送、1表示等待、2表示溢出即第一帧中的FF_DL信息的长度超过接受实体缓冲区的大小),byte2为块大小(允许一次可连续发送连续帧CF的次数),byte3为发送方发送连续帧CF与连续帧CF间的最小间隔时间。

网络层定时

网络层定义了N_Ar、N_As、N_Br、N_Bs、N_Cr、N_Cs六个时间参数

由六个参数得出几种超时有:
N_As超时:发送方没有及时发送N_PDU。
N_Ar超时:接收方没有及时发送N_PDU。
N_Bs超时:发送方没有接收到流控帧。
N_Cr超时:接收方没有收到连续帧。
N_Br超时:接收方没有发出流控帧。
N_Cs:即STmin,发送两个连续帧需要等待的最短时间,N_Cr最大1000ms。

三、应用层协议

应用层主要由:A_SDU、A_PDU、A_PCI、A_PUD构成

A_SDU—应用层服务数据单元

Application Layer Service Data Unit

SA, TA, TA_type  [,RA]   [,parameter1,…]

A_PDU —应用层协议数据单元

Application Layer Protocol Data Unit

SA, TA, TA_type  [,RA], A_Data A_Data=A_PCI+[parameter1,…]

 

A_PCI —应用层协议控制信息

Application Layer Protocol Control Information

A_PUD = A_PCI + A_SDU

应用层协议控制信息有两周不同格式

A_PCI(SI):SI—Service ID(Request服务和Result=positive的Response)
类型:1字节无符号整数
范围:00~FF


A_PCI(NR_SI,SI):NR_SI—Negative Service ID
类型:1字节无符号整数
范围:7F

 请求服务主要有两种:

1、不带子功能请求服务:SID+具体数据内容

2、带子功能请求服务:SID+子功能+具体数据内容

具体相应也分为两种:

1、肯定相应:

不带子功能:SID+40+具体的数据

带子功能:SID+40+子功能+具体数据

2、否定相应:7F+请求报文里的SID+一个字节的NRC

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值