一. 概述
什么是UDS
UDS: Unified Diagnostic Service, 统一诊断服务。
UDS是一个在整个汽车系统上经常使用的设备维护协议。其主要遵循:ISO-15765、ISO-14229 等协议。经常应用在整车的各种ECU上面。是一个在整车ECU应用层开发常用的协议之一。
UDS用途:
可以通过诊断仪Tester连接到支持UDS服务的车辆总线系统上,来读取存在ECU内的一些信息,包括软,硬件版本,故障信息,还可以对写入一些配置参数,比如VIN 码,另外,使用bootloader 也会使用UDS中上传下载服务来进行ECU版本升级。
除了CAN总线以外,UDS也可在不同的汽车总线(例如 LIN, Flexray, 以太网)上实现,下文为基于标准CAN总线
UDS通讯模式:由客户端(Tester)发起请求,服务端响应客户端请求。客户端可以使用功能id和多个服务端进行通讯,即一对多模式。客户端也可以使用物理ID单独跟某个服务端进行通讯,即一对一模式。
UDS安全访问:安全访问主要是防止设备被非法访问读取重要信息和篡改设备数据,如读取汽车VIN、刷写flash程序等受限的诊断服务。
服务端Server: 每一个具备uds诊断功能的ecu,都具有三个特殊的can id,分别为功能寻址和物理寻址:功能寻址(一对多通信,仅仅支持单帧通讯)整车上规定每个ECU功能寻址 can id 相同,一般设置为0x7DF。物理寻址(一对一通讯,支持网络层所有类型通讯),即请求can id,响应can id。整车上每个ECU的物理寻址can id 都是唯一的。
客户端(Tester)与服务端(ECU)通过物理ID实现一对一的诊断通信;通过功能ID实现一对多的诊断通信;
服务端(ECU) 发送给客户端(Tester)的响应报文必须采用物理通信,即服务端(ECU)以can id为响应id响应报文发送给客户端(tester);
诊断服务数据格式
UDS服务是通过诊断请求和诊断响应组成的,一股情况下是诊断仪发出诊断请求,ECU根据诊断请求执行具体诊断服务,并将结果通过诊断应发出给诊断仪。
诊断服务分为带子服务的请求和不带子服务的请求,响应分为正响应和负响应,正响应会区分对应带子服务的响应