一、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+子功能+具体数据文章来源:https://www.toymoban.com/news/detail-756060.html
2、否定相应:7F+请求报文里的SID+一个字节的NRC文章来源地址https://www.toymoban.com/news/detail-756060.html
到了这里,关于UDS诊断协议——网络层协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!