概述以经典can来描述。
一.什么是UDS
UDS:unified Diagnostic Service, 统一诊断服务。
usd是一个在整个汽车系统上经常使用的设备维护协议。其主要遵循:ISO-15765、ISO-14229,其主要协议模式脱胎于OBD(On-board diagnostic)诊断协议。经常应用在整车的各种ECU上面。是一个在整车ECU应用层开发常用的协议之一
二.uds用途
目前市面上的新车都具有用于车外诊断的诊断接口,这使得我们可以用电脑或诊断工具(业内称为诊断仪Tester)连接到车辆的总线系统上。因此,UDS中定义的消息可以发送到支持UDS服务的控制器(业内称ECU)。这样我们就可以访问各个控制单元的故障存储器或用新的固件更新ECU的程序。除此之外,UDS还用于下线检测时把一些信息(如VIN码)写入到汽车的各个零部件中。这些功能也是UDS最为核心的功能。
除了CAN总线以外,UDS也可在不同的汽车总线(例如 LIN, Flexray, Internet 和K-line)上实现
三.uds重点描述
uds通讯模式:由客户端发起请求,服务端响应客户端请求。客户端可以使用功能id和多个服务端进行通讯,即一对多模式。客户端也可以使用物理ID单独跟某个服务端进行通讯,即一对一模式。
uds安全访问:安全访问主要是防止设备被非法访问读取重要信息和篡改设备数据,如读取汽车VIN、刷写flash程序等受限的诊断服务。
-
客户端client
诊断设备(诊断仪Tester),发出诊断请求 -
服务端server
整车上的电控单元(ECU),响应诊断服务请求,每一个具备uds诊断功能的ecu,都具有三个特殊的can id,分别为功能寻址和物理寻址:功能寻址(一对多通信,仅仅支持单帧通讯)整车上规定每个ECU功能寻址 can id 相同,一般设置为0x7DF。物理寻址(一对一通讯,支持网络层所有类型通讯),即请求can id,响应can id。,整车上每个ECU的物理寻址can id 都是唯一的。
客户端(Tester)可以通过功能id向多个服务端(ECU)发出同一功能的诊断请求,即客户端(Tester)与服务端ECU)之间一对多的诊断通信。客户端(Tester)与服务端(ECU)通过物理ID实现一对一的诊断通信。
客户端(Tester)向 服务端(ECU) 发出的请求报文可能采用任意一种通信方式,但 服务端(ECU) 发送给客户端(Tester)的响应报文必须采用物理通信,即服务端(ECU)以can id为响应id响应报文发送给客户端(tester) -
安全访问
分为锁定状态和解锁状态。ECU 上电后,自动进入锁定状态,此状态禁止执行受限的诊断服务。服务端(ECU)进入解锁状态需要通过执行安全访问服务(SID = 0x27,SID是UDS应用层功能)完成密码核查。
通过密码核查后,ECU 的安全状态变为解锁状态,客户端(Tester)可以请求受限诊断服务(受限诊断服务:需要安全状态在解锁状态才允许执行的诊断服务)。 -
uds协议栈
uds协议栈主要分为网络层和应用层两大部分。
网络层:ISO 14229 并不仅仅是为了CAN总线设计的,最大容量达到4095个字节 ,但是经典can数据链路层最大内容纳8字节。如果uds发送或接受数据超过CAN链路层容纳数据长度,那就需要对uds数据进行拆分或组合,而uds网络层就是为此而生,网络层分为单帧和多帧,单帧(SF)就是一帧can报文8字节内就可以把uds数据处理完毕。
多帧就是一帧can报文8字节内处理不完,需分为首帧(FF),流控帧(FC),连续帧(CF)来处理。网络层还有时间参数,如N_Ar、N_As、N_Br、N_Bs、N_Cr、N_Cs。后续网络层会详细讲解
应用层:应用层协议通常作为确认消息的传输,意味着从客户端发送的每一个请求都将有由服务器端产生的与之相对的响应。
唯一的例外在于:例如使用了功能id寻址方式,或者该请求/指示没有指定生成响应/确定的少数情况下。为了减轻不必要的消息对系统造成的压力,在个别场合即使服务器处理请求诊断服务失败了也不发送否定响应(抑制响应)。
应用层协议是与会话层协议并行执行,这样,即使客户端等待上一个请求的响应时,也将会保持正确的会话层校时功能(例如:发送一个TesterPresent以使其他服务器的诊断会话持续下去;具体实施细则取决于所使用的数据链路层)。
基于UDS协议栈的网络层和应用层讲解,点击下方链接:
UDS(二)网络层