第1章:UDS协议概述

大家好,我是你们的讲师。咱们直接进入正题——UDS协议。

说实话,我刚入行那会儿,对UDS也是一头雾水。那时候车载诊断协议五花八门,各家OEM都有自己的“方言”。直到UDS统一诊断服务(ISO 14229)出现,才算是给行业立了个规矩。

这一章,咱们先聊聊UDS是什么,它在车里扮演什么角色,以及它和咱们熟悉的OBD-II到底有啥区别。嗯,这些基础打牢了,后面学起来才不费劲。

1.1 UDS协议简介

UDS,全称是Unified Diagnostic Services,统一诊断服务。说白了,它就是一套标准化的“车机对话规则”。

你想想看,一辆车上几十个ECU(电子控制单元),发动机、变速箱、ABS、网关……它们之间怎么沟通?出了问题怎么查?UDS就是干这个的。

它定义了一套通用的“服务”,比如:

  • 读取故障码:0x19服务,读DTC(诊断故障码)
  • 读取数据:0x22服务,读ECU内部的各种参数
  • 写入数据:0x2E服务,比如刷写配置
  • 例程控制:0x31服务,执行一些特殊功能,比如自学习

我个人习惯把UDS理解成“医生和病人的对话”。ECU是病人,诊断仪是医生。医生问“你哪里不舒服?”,ECU回答“我报了个P0101故障码”。就这么简单。

核心要点:UDS不是一种物理总线,而是一种应用层协议。它可以在CAN、LIN、以太网等多种总线上跑。这一点很重要,很多新手容易搞混。

1.2 OSI七层模型与UDS

聊协议,绕不开OSI七层模型。但咱们不用背,理解就行。

UDS主要工作在应用层(第7层)。它定义了“服务”的格式和含义。但数据要发出去,还得靠下面的层。

我画个简化的对应关系:

OSI层 UDS相关协议/标准 我的理解
应用层 (7) ISO 14229-1 (UDS) 定义“说什么”
表示层 (6) ISO 14229-2 (会话层) 定义“怎么说”
会话层 (5) ISO 15765-3 (DoCAN) 管理会话,比如默认会话、扩展会话
传输层 (4) ISO 15765-2 (TP层) 处理长报文的分包与重组
网络层 (3) ISO 15765-2 (网络层) 寻址,比如物理寻址、功能寻址
数据链路层 (2) CAN 2.0 / CAN FD 定义帧格式、仲裁、错误检测
物理层 (1) ISO 11898 (CAN物理层) 定义电压、电平、线束

你看,UDS只是冰山一角。真正干活的时候,你得把下面几层都搞明白。我在项目中遇到过一个问题:诊断仪发了个请求,ECU死活没响应。查了半天,发现是TP层(传输层)的流控制帧没处理好。嗯,这种坑踩过一次就记住了。

我的建议:学习UDS,不要只盯着应用层。至少要把ISO 15765-2(DoCAN的传输层和网络层)看一遍。否则你连“为什么诊断请求有时要分好几帧发”都搞不懂。

1.3 UDS在车载网络中的角色

UDS在车里到底干嘛用?我总结了三件事:

  1. 下线检测(EOL):车刚造出来,得用UDS刷写软件、配置参数、做功能测试。
  2. 售后诊断:车坏了,4S店用诊断仪通过UDS读故障码、读数据流、做动作测试。
  3. 远程诊断:现在车联网了,T-Box可以通过UDS远程读取车辆状态,甚至远程刷写。

你想想看,没有UDS,这些事怎么做?每家OEM自己搞一套协议?那4S店得备多少种诊断仪?

UDS的出现,让诊断变得标准化。不管你是博世的ECU,还是大陆的ECU,只要支持UDS,诊断仪就能用同一套“语言”跟它们对话。

我个人觉得,UDS最大的价值在于解耦。它把诊断应用和底层硬件分开了。你写诊断上位机的人,不用关心ECU是用的什么芯片;你写ECU固件的人,也不用关心诊断仪长什么样。

注意:虽然UDS是标准协议,但各家OEM会在此基础上做“裁剪”和“扩展”。比如,0x22服务(读数据)的DID(数据标识符)定义,每家都不一样。所以,做项目时一定要拿到OEM的诊断规范,不能只看ISO标准。

1.4 UDS与OBD-II的区别

这个问题,我几乎每次培训都会被问到。UDS和OBD-II到底啥关系?

简单说:

  • OBD-II:是法规强制要求的,主要为了监测排放相关系统。它只定义了有限的几个服务(比如读故障码、读排放数据)。协议基于ISO 15031(或SAE J1979)。
  • UDS:是功能更全面的诊断协议,覆盖了车辆所有ECU的诊断需求。它不限于排放,还包括刷写、配置、例程控制等。

我打个比方:

OBD-II就像“体检套餐”,只查几个关键指标(排放)。UDS就像“全身体检”,从头到脚都能查,还能做手术(刷写)。

具体区别,我列个表:

对比项 OBD-II UDS
法规要求 强制(排放相关) 非强制(OEM自选)
服务数量 约10个(如01、02、03...) 约26个(0x10~0x3E)
功能范围 读故障码、读数据、清故障码 读/写、刷写、例程控制、会话控制等
寻址方式 功能寻址为主 物理寻址+功能寻址
传输层 单帧为主(CAN) 支持多帧传输(TP层)
应用场景 售后排放检测 研发、生产、售后全生命周期

这里有个坑,我曾经踩过:

有些ECU同时支持OBD-II和UDS。但它们的诊断ID(CAN ID)是分开的。OBD-II通常用0x7DF(功能寻址),UDS用0x7E0/0x7E8(物理寻址)。如果你用UDS的请求去问OBD-II的服务,ECU会回复“服务不支持”。嗯,别问我怎么知道的。

一句话总结:OBD-II是“必答题”,UDS是“选做题”。但现在的车,基本都选了UDS,因为它功能强大太多了。

好了,第一章就聊这么多。下一章,咱们深入UDS的会话管理和安全访问,那可是诊断的“门禁系统”。