UDS协议

1、简介

在车辆维修和开发工作中,诊断工具必不可少,通过诊断工具,可以读取车辆的故障码,定位故障原因,也可以读取和解析车辆的实时数据。而**诊断协议就是指诊断工具与车辆之间的通信协议**。目前,市场上最常见的两种汽车诊断协议是OBD和UDS。

统一诊断服务(UDS,Unified Diagnostic Services)是基于**ISO 14229标准的诊断协议,用于在车辆中对ECU进行诊断、修复、调试等操作。UDS协议可以提供丰富的服务,包括故障诊断、数据读取、编程、ECU重启**等功能,是车辆故障诊断、调试以及维修保养中不可或缺的一部分。

UDS协议

UDS协议

2、目的

本设计文档旨在定义和规范基于 ISO 14229 标准的UDS协议的实现方案,主要包括寻址模式、服务功能、诊断请求和响应及TP层实现,为开发人员提供清晰的开发指导。

3、参考ISO标准

  1. ISO14229

UDS协议规范在 ISO 14229 的不同子标准中进行了定义。ISO-14229 标准由以下部分组成:

  • ISO 14229-1:UDS协议的规范和要求。
  • ISO 14229-2:UDS协议的会话层服务。
  • ISO 14229-3:定义了UDS基于CAN总线的实现。
  • ISO 14229-4:定义了UDS基于FlexRay总线的实现。
  • ISO 14229-5:定义了UDS基于以太网协议的实现。
  • ISO 14229-6:定义了UDS基于K-Line总线的实现。
  • ISO 14229-7:定义了UDS基于LIN总线的实现。
  1. 基于CAN总线实现

UDS协议是一个应用层的协议,不关心底层通信的接口如何实现,可以基于CAN、LIN、以太网等任意通信接口。

UDS基于CAN总线的实现,在物理层和数据链路层遵循的是ISO 11898(定义经典CAN物理、数据链路层规范),而它的传输层遵循的是ISO 15765-2(定义CAN传输层规范),在应用层遵循的是ISO 14229-3(定义UDS基于CAN应用层规范)。

经典CAN数据链路层最大能够支持8个字节,但ISO 14229并不仅仅是为了CAN总线设计的,最大容量达到4095个字节。比如VIN码是17个字节,CAN总线必然需要传递3帧才能传完VIN码,那么如何科学、快捷、安全地将多个字节通过经典CAN来进行传输,就成了一个需要解决的问题。ISO 15765-2 协议由此诞生。

UDS协议

4、术语和缩写

  • **UDS: **Unified Diagnostic Services (统一诊断服务)
  • **ECU: **Electronic Control Unit (电子控制单元)
  • DTC: Diagnostic Trouble Code (诊断故障码)
  • **SID: **Service ID (服务ID)
  • **DID: **Data Identifier (数据标识符)
  • RID: Routine Identifier (例程标识符)
  • **NRC: **Negative Response Code (否定响应码)
  • Tester: 外部诊断仪

二、UDS协议的基本概念

1、UDS协议的寻址模式

物理寻址(点对点、一对一)

根据物理地址的不同进行访问,但只能访问(通过CAN ID访问)单个ECU节点,TesterSA源地址,ECU作为TA目标地址。

功能寻址(广播、一对多)

根据功能的不同进行访问,它能访问(通过CAN ID访问)多个ECU节点,对于标准帧来说,通常是0x7DF,也就是说本网络中所有ECU都要对这条指令做出响应,即一对多模式。

每一个ECU都有2个CAN的诊断帧ID,分别对应物理寻址的收与发。通常由主机厂来确定不同ECU的这两个特定的诊断ID。比如0x701对应接收Tester的消息,0x709对应发给Tester的消息。

2、服务ID(SID)

在UDS协议中,Service ID(SID)是指服务标识符,用于标识要执行的服务。每个服务都有一个唯一的SID,在诊断会话中通过SID来区分要执行/响应哪种服务请求。14229-1中定义了26种服务并将这些服务分为6大类:诊断和通信管理类、数据传输类、存储数据传输类、输入输出控制类、例程功能类、上传下载类。

UDS协议

UDS协议

3、诊断请求

诊断请求是指诊断工具向车辆发送的请求消息,用于请求执行某个服务。诊断请求消息由三个部分组成:SID、子功能和实际数据。其中,SID用于标识要执行的服务,至于子功能:指的是这个服务还能更进一步的划分或者具有启动/暂停之类的子功能。

尽管服务类型不尽相同,但UDS针对这些服务定义了统一的诊断请求包的格式,每个诊断请求由1个Byte的SID+1个Byte的sub-function(实际上是1bit spr+7bitsub-function,具体解释看下文)+不定长的实际数据构成,其格式如下所示:

UDS协议

UDS协议

4、正响应/负响应

诊断工具向车辆发送服务请求后,如果服务执行成功,则返回的响应消息称为正响应,反之,返回的响应消息称为负响应。

正响应报文格式

正响应报文的字节组成格式如下图:

UDS协议

举例:0x10诊断会话控制服务

UDS协议

负响应报文格式

负响应消息由两部分组成:SID和负响应码(NRC)。SID用于标识响应的服务,负响应码指示服务执行失败的原因。

负响应报文的字节组成格式如下所示:

UDS协议

举例:0x10诊断会话控制服务

UDS协议

5、负响应码(NRC)

在UDS协议中,负响应码用于指示服务执行失败的原因。NRC用一个字节表示,每个取值都对应一种不同的错误类型。

NRC码 含义 NRC码 含义
0x01 – 0x0f 暂保留; 0x78 收到请求,延迟响应;
0x10 未知错误,服务被拒绝; 0x79 – 0x7d 暂保留;
0x11 不支持该服务请求; 0x7e 当前会话下子功能不支持;
0x12 不支持子功能; 0x7f 当前会话下服务不支持;
0x13 消息长度或格式错误; 0x80 暂保留;
0x14 请求信息长度超出; 0x81 rpm(每分钟转速)太高;
0x15 – 0x20 暂保留; 0x82 rpm太低;
0x21 服务端正忙; 0x83 当前引擎正在运行;
0x22 条件不满足; 0x84 当前引擎未运行;
0x23 暂保留; 0x85 截止当前时间引擎运行时间太短;
0x24 请求顺序错误; 0x86 温度过高;
0x25 指令已经被接收,但是未被执行; 0x87 温度过低;
0x26 失败的操作导致当前操作无法执行; 0x88 车速过高;
0x27 – 0x30 暂保留; 0x89 车速过低;
0x31 参数错误; 0x8a 油门/踏板过高(超过了当前要求的最大阈值);
0x32 暂保留; 0x8b 油门/踏板过低;
0x33 安全校验未通过; 0x8c 变速器档位不在空档;
0x34 暂保留; 0x8d 变速器档位不在排挡;
0x35 密钥不匹配; 0x8e 暂保留;
0x36 已达到解锁最大错误次数; 0x8f 制动开关没有关闭
0x37 超时时间未到; 0x90 换挡杆不在驻车档;
0x38 – 0x4f 由扩展数据链路安全性保留; 0x91 变矩器离合器锁定;
0x50 – 0x6f 暂保留; 0x92 电压过高;
0x70 不允许上传下载; 0x93 电压过低;
0x71 数据传输中断; 0x94 – 0xef 暂保留(特定条件下);
0x72 擦除或烧写内存错误; 0xf0 – 0xfe 为汽车制造商保留;
0x73 块序列计数错误; 0xff 暂保留;
0x74 – 0x77 暂保留;
 

三、UDS协议的服务

UDS协议提供多种诊断服务,下面介绍常见的几种服务。

1、诊断和通信管理类

1.1、会话控制服务(SID=0x10)

服务功能
功能描述

在《ISO14229-1》ISO标准文档中针对10服务做了十分详细的说明,总结下来其主要体现为以下几点:

  • 10服务是用来使能Server(即ECU)不同诊断会话的一种服务;
  • 不同的诊断会话则规定了Server在相应session可以开启的功能权限;
  • 在不同的诊断会话则应使用对应的数据链路层的时间参数;

其中最为核心的一点就是诊断服务权限控制。如下图所示,明确规定了不同的诊断服务在默认会话和非默认会话下的可用性,其中“X”则代表可用,”not applicable”则代表不可用。

UDS协议

应用场景
  • 如上图所示,当执行27或者28等非常规服务时,则需要在非默认会话下执行,在默认会话下则不

能够使用;

  • 当需要重新编程Server时,那么此时需进入到编程会话下,这样所有与编程会话相关的诊断服务便

可以设定仅允许在该session下运行;

  • 当整车制造商或者零部件供应商需要在自定义的seesion下完成某些特别的操作时,可以采用10服

务控制,如产线内部使用的特定服务便可以在其自定义的会话下进行,避免与客户的会话下服务需求起冲突。

服务请求格式

UDS协议

SessionType的取值及对应含义如下:(标黄的为主要使用类型)

取值 SessionType 含义
0x00 保留未使用(ISOSAE Reserved)
0x01 默认会话模式(Default Session),一般ECU上电后的默认状态就是这个,该会话模式不需要0x3E服务维持。
0x02 编程会话模式(Programming Session),主要用于ECU软件的升级刷写,刷写流程涉及多类UDS服务。
0x03 扩展会话模式(Extended Diagnostic Session),用于解锁需要高权限的诊断服务,基本覆盖各类服务。 最常见的就是读写DID前先进扩展会话模式。
0x04 安全模式(Safety System Diagnostic Session)使能所有跟车载系统安全相关的服务,比如安全气囊。
0x05-0x3F 保留未使用(ISOSAE Reserved)
0x40-0x5F 保留未使用,整车厂自定义使用(Vehicle Manufacturer Specific)
0x60-0x7E 保留未使用,ECU供应商/系统供应商自定义使用(System Supplier Specific)
0x7F 保留未使用(ISOSAE Reserved)
 
服务响应格式
正响应

UDS协议

SessionType的取值同上,SessionParameterRecord的4个字节含义如下:

UDS协议

这四个字节实际上是两个时间参数的值(P2Server max和P2*Server max),关于时间参数,可以简单理解为Server端接收到请求后如果未在指定的时间参数内给出响应,则需要执行超时操作。

负响应

UDS协议

支持的负响应码(NRC)如下:

否定响应码(NRC) 定义(Definition)
0x12 服务器支持诊断请求中的服务标识符(Service ID),但不支持收到的子功能参数时,回复此编码。
0x13 请求服务的诊断报文中的数据长度与定义不一致时,回复此编码。请求服务中参数的格式与定义不一致时也会回复此编码。
0x22 请求的诊断服务的执行条件不满足时,回复此编码。
0x21 服务器忙
0x11 诊断服务不支持
0x7F 诊断服务在当前会话下不支持
0x78 收到诊断请求,等待响应
 
服务示例

假设现在诊断仪控制目标ECU进入编程会话模式,发送请求时设置spr位为0(即不抑制正响应),同时假设目标ECU中设置的时间参数分别为:P2server_max=50ms(0×0032),和P2*Server_max=5000ms(0×01F4),通信过程如下所示:

UDS协议

1.2、ECU复位服务(SID=0x11)

服务功能
功能描述

该服务请求ECU根据请求消息中的ResetType参数的值执行不同类型的ECU复位。复位成功后(ECU正响应该服务请求),进入Default Session(默认会话模式)。

应用场景
  • ECU被刷写新的软件后,此时需要通过11服务重启该ECU使其恢复到初始状态;
  • 为满足特定功能的需要,输入相关标定参数给到ECU后,只有通过11服务重启该ECU才能使得标定参数生效的场景;
服务请求格式

UDS协议

对应请求消息中的ResetType的取值及其含义如下表所示:(标黄的为主要使用类型)

复位类型 取值 含义/复位特点
0x00 保留
HardReset (硬复位) 0x01 模拟KL30电源的重上电,该复位基本可以等同于Server直接掉电然后重启,主要用于需要彻底复位的场景,比如刷写之后的复位
KeyOffOnReset (点火开关复位) 0x02 模拟KL15点火钥匙的重启,此类复位用于模拟点火开关从off->on的过程
SoftReset (软复位) 0x03 效果同上,只是复位没有那么彻底,在无需初始化任何数据的前提下重置PC指针重新运行应用程序,即RAM中的内容不会重置
enableRapidPowerShutDown (使能快速休眠流程) 0x04 即开启ECU的休眠功能,该子功能适用于非点火上电而仅采用电池供电(KL30供电)的ECU。 对于这类ECU通常情况下,当关闭钥匙电后,过段时间ECU会进入PowerOff状态(即整体下电) 当通过0x11服务请求使用该子功能后,关闭钥匙电不会使ECU进入下电状态,而是进入休眠状态 这种状态下,ECU可以被快速唤醒。相对于整体下电状态,休眠状态的进入和退出都更加迅速, 但同时这种状态也会多一些功耗。
disableRapidPowerShutDown (抑制快速休眠流程) 0x05 适用于非点火上电而仅采用电池供电(KL30供电)的ECU,抑制其进入下电休眠流程
vehicleManufacturerSpecific (供整车制造商使用的自定义复位类型) 0x40-0x5F 整车厂自定义
systemSupplierSpecific (供系统供应商使用的自定义复位类型) 0x60-0x7E 零部件供应商自定义
7F 保留
 
服务响应格式
正响应

UDS协议

**ResetType:**取值及对应含义与上表相同;

powerDownTime:****该参数仅在subfunction(即ResetType)=0x04时才会有,指的是ECU断电过程中保持待机状态的最小时间,即指示这个ECU至少要多久才能进入休眠状态。其他情况下,Server只回复前两个字节,该参数取值范围为0x00-0xFE(254s),0xFF为无效值。

负响应

UDS协议

支持的负响应码(NRC)

负响应码(NRC) 定义(Definition)
0x12 服务器支持诊断请求中的服务标识符(Service ID),但不支持收到的子功能参数时,回复此编码。
0x13 请求服务的诊断报文中的数据长度与定义不一致时,回复此编码。请求服务中参数的格式与定义不一致时也会回复此编码。
0x22 请求的诊断服务的执行条件不满足时,回复此编码。
0x33 通常在所请求的诊断服务需要服务器处于解锁状态,但服务器未被解锁时,回复此编码。
0x21 服务器忙
0x11 诊断服务不支持
0x7F 诊断服务在当前会话下不支持
0x78 收到诊断请求,等待响应
 
服务示例

假设现在诊断仪控制目标ECU进行硬复位,发送请求时设置spr位为0(即不抑制正响应),通信过程如下所示:

UDS协议

1.3、安全访问服务(SID=0x27)

服务功能
功能描述

在车载ECU中,一些数据或者操作是比较重要的,对于这种敏感的数据或者操作需要有安全访问控制,因此,诊断服务0x27应运而生。它主要用于车载ECU数据上传或者下载,传递重要信息以及敏感操作等过程中。即对请求执行操作的人进行**鉴权,只有正确解锁对应的安全等级**,才能访问该安全等级的数据,否则无法访问。

应用场景
  • 通常在向Flash中写数据时,都需要先执行0x27安全解锁之后才能进行安全写入,最常见的就是对ECU进行软件刷写时,需要先通过0x27安全解锁才能进行后续重编程操作,否则将对ECU造成极大的安全风险。
  • 使用0x31服务执行十分重要的routine时,需要优先执行0x27进行安全解锁之后才能够执行对应的routine。
  • 在产线写入较为重要的版本或者标定等信息过程中,需要先使用0x27服务才能使用写操作的诊断指令,如0x2E服务。
声明:本站内容资源均来源于网友分享及网络公开合法渠道,但我们不对这些内容的观点、描述的准确性负责,也不保证所有信息的原创性、真实性、完整性及即时性。对于本站所含文章或资料的版权问题,如您发现有侵犯版权的情况,请联系我们进行处理,或注册本站进行认领。同时,我们提倡将本站内容用于个人学习交流,严禁未授权的商业用途,否则由此产生的法律后果由使用者自行承担。感谢支持!
技术分享智能网联资料下载

资料下载|自动驾驶 无人驾驶 adas 车道居中lka/lca控制算法 matlab simulink模型

2025-11-18 21:49:43

三电系统技术分享

动力电池CCS安全设计(十)FFC

2025-11-19 13:34:12

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索