一、UDS概述
汽车故障诊断 UDS(Unified Diagnostic Service)是利用ECU监测控制系统各组成部分的工作情况,发现故障后自动启动故障记录和处理逻辑。汽车故障诊断模块不仅能够存储记忆汽车故障,还能够实时提供汽车各种运行参数。外部诊断设备通过一定的诊断通信规则与ECU建立诊断通信,并读取这些故障和参数,同时解析出来供外部测试人员分析。其主要遵循:ISO-15765、ISO-14229诊断协议。经常应用在整车的各种整车上的电控单元(ECU)上面。
二、UDS基本原理
1、UDS协议栈
UDS协议栈主要分为网络层和应用层两大部分
网络层:是为了解决ISO 11898 协议中的经典can数据链路层与UDS 应用层 ISO 14229 协议中定义的应用层,彼此的数据长度不一样问题。经典can数据链路层最大支持8字节,但 ISO 14229 不仅仅支持can总线设计的,其最大容量是达到4095字节。如UDS应用需要发送20字节数据信息,而can不能一帧报文处理完,需要3帧才能发送完毕。那么如何将多字节数据通过can进行有效,有序的传输呢?ISO 15765-2 由此而生。网络层分为单帧和多帧,单帧(SF)就是一帧can报文8字节内就可以把uds数据处理完毕。多帧就是一帧can报文8字节内处理不完,需分为首帧(FF),流控帧(FC),连续帧(CF)来处理。网络层还有时间参数,如N_Ar、N_As、N_Br、N_Bs、N_Cr、N_Cs。后续网络层会详细讲解。 应用层:应用层协议通常作为确认消息的传输,意味着从客户端发送的每一个请求都将有由服务器端产生的与之相对的响应。
2、功能寻址与物理寻址
由客户端诊断设备(诊断仪Tester),发出诊断请求,服务端server响应客户端请求。客户端可以使用功能寻址(一条报文对应本网络中所有Server(ECU),一般为报文ID为7DF),也就是说本网络中所有ECU都要对这条指令做出响应,即一对多模式。 客户端也可以使用物理寻址(是一种点对点的寻址模式,一条报文对应于单独一个Server(ECU))单独跟网络中某个ECU服务端进行通讯,即一对一模式。 功能寻址和物理寻址是每一个具备UDS诊断功能的ECU,所具有的两个CAN_ID,整车上规定每个ECU功能寻址的CAN_ID相同,一般设置为0x7DF。整车上也规定每个ECU的物理寻址CAN_ID 都是唯一的。
三、网络层概要
网络层功能
应用层诊断服务can数据帧的转发;
多帧数据传输,进行数据的打包、解包,协调上下层工作;
单帧报文传输
多帧报文传输
四、网络层协议
协议数据单元(N_PDU)
N_PDU一般包含3个领域,N_PDU:{ N_AI, N_PCI, N_Data }如图所示
协议控制信息(N_PCI)结构
网络层对于N_PDU分为单帧、第一帧(首帧)、连续帧、流控帧这四种类型,每种类型是通过协议控制信息(N_PCI)进行区分的,每一个N_PDU都只有一个N_PCI。通常对于CAN诊断来说,就可以通过识别每条CAN帧数据域的首个字节来确定它属于四种类型中的哪类。下面对这四种类型进行说明。
单帧(SF)
单帧顾名思义就是一帧can报文就可以处理完uds服务。can报文首字节为N_PCI字节,控制信息如下图所示:
从上图可知,can报文首字节高4bit为0表示首帧,首字节低4bit表示单帧数据长度,即N_Data的有效字节数。通过trace我们可以看到N_Data有效字节数为3,有效字节数不足8字节,可填充任意数,这里填充00。因此如图所示的trace,在接收方接收到该can报文后,解析can报文首字节03便可知该报文为单帧且只有3个有效字节数,后续全为补充的无效字节数。
第一帧(FF)
发送方发送N_Data数据过长时,则需要拆分成多帧报文,被拆分后的报文需要通过多个N_PDU来发送,而接收方接收到多个N_PDU信息后进行重组。发送方发送多帧时,需要先发送首帧来告知接收方有多少字节数要发送到接收方。首帧控制信息如下图所示
从上图可知,can报文首字节高4bit为1表示首帧。首字节低4bit和byte2组合12bit表示发送方发送的数据长度,即N_Data的有效字节数。通过trace我们可以看到N_Data有效字节数为0x018,即24个有效字节数。因此如图所示的trace,在接收方接收到该can报文后,解析can报文前两个字节0x10 0x18便可知该报文为第一帧且有24个有效字节数,后续全为补充的无效字节数。
流控帧(FC)
UDS多帧通讯时:1、发送方发送首帧FF给接收方。2、接收方接收到首帧,解析首帧。3、接受方根据自身条件判断后(如:接收数据缓存大小,接收数据快慢能力,当前是否可以接收数据等),回复一帧流控帧FC给发送方。4、发送方根据接收到接收方的流控帧FC来决定后续的操作。流控帧FC控制信息如下图所示:
从上图可知,can报文首字节byte1高4bit为3时表示该帧为流控帧FC。byte1低4bit为流状态FS(0表示继续发送、1表示等待、2表示溢出即第一帧中的FF_DL信息的长度超过接受实体缓冲区的大小),byte2为块大小(允许一次可连续发送连续帧CF的次数),byte3为发送方发送连续帧CF与连续帧CF间的最小间隔时间。
连续帧(CF)
发送方发送首帧FF,然后接收到接收方的流控帧FC后,若条件允许可继续发送信息,则需根据连续帧CF的控制信息格式来发送信息。连续帧CF控制信息如下图所示:
从上图可知,can报文首字节byte1高4bit为2时表示该帧为连续帧CF。byte1低4bit 为连续帧的顺序号SN。对于所有的拆分信息,SN开始于0。第一帧应当分配值为0。虽然第一帧 N_PCI没有明确表示出序列号,但是应该将首帧当作0号序列对待,第一个流控帧FC后的连续帧SN设置为1,同一拆分信息上,每一个新增的连续帧顺序号SN增1,连续帧顺序号SN的值不受流控帧的影响,当连续帧顺序号SN值为0x0F时,下一个连续帧中将顺序号SN重置为0。 如图为多帧举例:
定时参数
网络层定义了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。
五、寻址方式
将N_PDU映射到CAN数据帧的不同位置,构成了4种寻址格式:常规寻址(Normal addressing)-11位CANID、常规固定寻址(Normal fixed addressing)-29位CANID、扩展寻址(Extended addressing)-11位CANID、混合寻址(Mixed addressing)-11或29位CANID,以常规寻址(SF单帧)为例:
在物理通讯场景下,即一对一的通讯方式:
在功能通讯场景下,即一对多的通讯方式: