type
status
date
slug
summary
tags
category
icon
password

一、UDS简介

统一诊断服务(英语:Unified Diagnostic Services,简称UDS)是车用电子的通信协议,是电子控制器(ECU)中设备诊断用的网络传输协议,对应的标准是ISO 14229-1[1]。此标准是派生自ISO 14230-3(KWP2000)以及目前已不使用的ISO 15765-3 (控制器局域网上的诊断通信,DoCAN[2])。“统一诊断服务”中的“统一”是指此标准是国际性标准,不是特定公司的专用标准。目前所有一阶供应商新生产的ECU都已支持此通信协议,也已集成到其他标准中,例如AUTOSAR。现代汽车中的电子控制器控制了非常多的机能,包括燃料喷射设备(EFI)、发动机控制器、传动、防锁死刹车系统(ABS)、门锁、刹车、窗户动作等。
诊断工具可以连接车上所有支持统一诊断服务功能的电子控制器。车上常用的控制器局域网只用到OSI模型的第一层及第二层,而统一诊断服务集成了OSI模型的第五层及第七层。服务标识符(Service ID、SID)及服务相关的参数都放在8个字节的消息框内。
现今的车辆有配合离线诊断的诊断接口,让电脑或是诊断工具(作为测试设备)可以连接到汽车上的通信系统。因此可以发送统一诊断服务的请求到控制器,控制器必须回复(可能是正面或是负面的回复),这样可以确认个别控制单元中的故障存储器、更新控制单元的固件、和硬件进行低端的交互(例如开启或关闭特定的输出)、或是进行特定的机能,目的是了了解电子控制器的环境或是操作条件,以诊断故障或是不希望出现的行为。

二、UDS所包含的常用的服务

功能群
请求  SID
回复  SID
服务
说明
0x7F
否定回应Negative Response
此回应会在服务无法进行时回复,例如不支持的资料识别符。此时会加上否定的回应码。
存储资料发送
0x14
0x54
清除诊断信息Clear Diagnostic Information
清除已存储的诊断问题码(Diagnostic Trouble Code,简称DTC)
存储资料发送
0x19
0x59
读取DTC信息Read DTC Information
DTC是诊断问题码。每一个DTC对应一个控制单元的故障,会以其编码存储在错误存储器中,可以在任意时候读取。除了错误外,也可能会记录一些相关的信息,也可以一并读取。
上传/下载
0x34
0x74
请求下载Request Download
利用“请求下载”服务,可以下载新的软件或是其他资料到控制单元内。需标示资料的位置以及长度,因此,控制器可以知道数据包的大小。
上传/下载
0x35
0x75
请求上传Request Upload
“请求上传”服务和“请求下载”服务是类似的,此服务可以将控制单元的软件发送给测试者。也需标示资料的位置以及长度,测试者需指定数据包的大小。
上传/下载
0x36
0x76
发送资料Transfer Data
在真正发送资料时,会用到此一服务,不论是上传或是下载都是使用此一服务。发送的方向则视之前是“请求上传”服务或“请求下载”服务而不同。此一服务会用之前指定的最大数据包长度发送资料,若资料长度超过最大数据包长度,需要用数个数据包来发送,直到发送完成为止。
上传/下载
0x37
0x77
请求结束发送Request Transfer Exit
可以用此服务中止资料发送。此服务用在测试着和控制单元比较时。在执行时,控制单元可以负面回应来中止资料发送请求。若指定的资料量还没发送完,也可以用此服务中止发送。
上传/下载
0x38
0x78
请求文件发送Request File Transfer
此服务用来启始客户端到服务器的文件下载,或是服务器到客户端的文件上传。也可以提供一些文件系统的相关信息。
输入/输出控制
0x2F
0x6F
根据标识符的输入/输出控制Input Output Control By Identifier
此服务可以让外部系统接口透过诊断接口控制输入/输出信号 透过设置选择字节,可以设置有关请求的特殊条件,可以设置以下的值: ReturnControlToECU:设备需将信号的控制权送回 ResetToDefault:测试者试图重置信号,回到系统的默认值 Freeze Current State:设备需冻结目前的信号,不允许变化 ShortTermAdjustment:设备需使用目前提供的信号值
远程启动程序
0x31
0x71
远程控制Routine Control
此控制服务程序可以进行各种的服务,有三种不同的信息种类: 配合启始信息,可以开始服务。可以定义此信息来确认要执行各动作,或是提示服务已经完成。 配合停止信息,运行中的服务可以在任何时间下中断。 第三个选项是查询服务状态的信息 可以特别标示启始及结束的信息参数,因此可以实现每一种项目特定的服务。
诊断及通信管理
0x10
0x50
诊断会话控制Diagnostic Session Control
UDS会使用不同的会话(session),可以用诊断会话控制(Diagnostic Session Control)来切换。可用的服务会依照目前有效的会话而不同。在一开始,控制单元默认是在“默认会话”(Default Session),有定义其他的会话,需要实现的会话会依照设备的种类而不同。 “程序会话”(Programming Session)可以用来上传固件到设备,并更新设备的固件。 “扩展诊断会话”(Extended Diagnostic Session)可解锁特定的诊断功能,例如调整传感器等。 “安全系统诊断会话”(Safety system diagnostic session)用来测试安全相关的诊断机能,例如安全气囊的测试。 此外,也有一些保留的会话识别符,为了汽车生产者及供应商的特殊需求而设计。
诊断及通信管理
0x11
0x51
ECU重置ECU Reset
ECU重置的服务是要重启ECU。依照控制单元硬件以及实现方式的不同,有以下几种不同的重置: “硬重置”模拟电源关闭的重置。 “关闭锁匙重置”模拟用锁匙将汽车熄火,再开启汽车的点火开关。 “软重置”初始化特定程序单元以及存储结构。 也有一些汽车生产者及供应商定义的特殊数值。
诊断及通信管理
0x27
0x67
安全性访问Security Access
可以用安全性检查(Security check)来启动大部分的安全关键性服务(security-critical services)。此情形下控制单元会发送“密码种子(seed)”到客户端(电脑或是诊断工具)。客户端再用密码种子计算密钥(key)送回控制单元,以此来解安全关键性服务
诊断及通信管理
0x28
0x68
通信控制Communication Control
此服务可以关闭控制单元发送以及接收消息的功能。
诊断及通信管理
0x29
0x69
认证Communication Control
标准在2020年的更新版本,提供一种标准化的方式,可以提供一些安全性访问(0x27)服务无法支持的现代认证方式,包括以PKI为基础的认证交换,以及双向的验证机制。
诊断及通信管理
0x3E
0x7E
测试者存在Tester Present
若客户端长时间没有交换通信资料,控制单元会自动离开目前的会话,回到“默认会话”,也可能会进入休眠模式。而此一服务的目的就是让控制单元知道客户端仍存在。
诊断及通信管理
0x83
0xC3
访问时序参数Access Timing Parameters
在控制器及从机的通信中,需要观察一定的时间,若时间超过此限制,仍没有提交消息,就会假设连接已有问题。可以读取及修改此时间。
诊断及通信管理
0x84
0xC4
安全资料传输Secured Data Transmission
诊断及通信管理
0x85
0xC5
控制DTC设置Control DTC Settings
启动或关闭部分(或所有)错误的侦测。若诊断工作是在车内进行的,这个机能格外重要,因为诊断工作有可能造成部分零件的异常行为。
诊断及通信管理
0x86
0xC6
事件回复Response On Event
诊断及通信管理
0x87
0xC7
链接控制Link Control
服务链接控制是用来设置诊断访问的比特率。多半只在中间网关上实现此一机能。
资料传输
0x22
0x62
根据标识符读取资料Read Data By Identifier
透过此服务可以读取控制单元中一个或多个的资料。这些资料的种类不限,也可以有不同的长度,例如料号或是软件版本等。也可以读取像是传感器状态之类会变动的值。每一个值会对一个资料标识符(Data Identifier、简称DID),数值从0到65535。会用正常的CAN信号来发送特定ECU使用的资料。DID资料只用在资料请求上,也可以用一些没有ECU使用的DID来发送信息,虽ECU不会使用,但服务工具或软件测试程序可以使用这类的信息。
资料传输
0x23
0x63
根据地址读取存储器Read Memory By Address
依给定地址读取物理内存中的值。测试工具可以用此机能来读取软件内部的行为。
资料传输
0x24
0x64
根据标识符读取缩放比例资料Read Scaling Data By Identifier
资料传输
0x2A
0x6A
周期性根据标识符读取资料Read Data By Identifier Periodic
透过此服务可以让控制单元周期性发送资料。只能发送透过“动态定义资料标识符”定义的标识符
资料传输
0x2C
0x6C
动态定义资料标识符Dynamically Define Data Identifier
此服务提供一个修正设备资料标识符(DID)的方式,可以重新调整资料标识符。这个通常是不同资料标识符的组合,或者单纯是所有DID的串接。 请求资料可以依以下的原则规划配置: 原始资料标识符、位置、长度(依字节表示)、子功能字节:defineByIdentifier 存储器位置、长度(依字节表示)、子功能字节:defineByMemoryAddress 可以结合上述二种方式
资料传输
0x2E
0x6E
根据标识符写入资料Write Data By Identifier
可以更改资料标识符中的数值,命令中除了资料标识符外,也要同时提供要修改的数值
资料传输
0x3D
0x7D
根据地址写入到存储器Write Memory By Address
“根据地址写入到存储器”可以让外面诊断工具写信息到ECU里的特定地址,或特定的连续地址

三、应答类型(SID service identify 服务ID)

3.1肯定应答:

  • 应答格式 服务ID+40: SID+40

3.2否定应答:

  • 应答格式1 7F + 服务类型+否定响应码
  • 78等待否定应答格式:7F +服务ID(SID)+ 78
  • 举例1:03 7F 10 13 00 00 00 00
  • 举例2: 03 7F 10 78 00 00 00 00

常见的否定响应码(NRC)

响应码
代码名称
描述
0x10
General Reject
请求被拒绝,通常是因为不支持当前的服务请求。
0x11
Service Not Supported
请求的诊断服务不被支持。
0x12
Sub-Function Not Supported
请求的子功能不被支持。
0x13
Incorrect Message Length/Format
请求消息的长度或格式不正确。
0x14
Response Too Long
响应超出了允许的长度。
0x21
Busy Repeat Request
ECU 当前忙于处理其他请求,建议重试。
0x22
Conditions Not Correct
当前条件不满足,无法处理请求。例如,车辆未达到所需状态(如发动机未启动)。
0x24
Request Sequence Error
请求的消息顺序错误。例如,服务要求先前发送了特定请求,而当前请求并未遵循该顺序。
0x25
No Response From Subnet Component
子网组件未响应,导致请求失败。
0x31
Request Out Of Range
请求的参数超出了允许的范围。例如,试图写入的地址或数据无效。
0x33
Security Access Denied
诊断服务访问被拒绝,通常是因为未完成安全认证或安全级别不足。
0x35
Invalid Key
提供的安全认证密钥无效。
0x36
Exceeded Number Of Attempts
尝试次数超出了限制(例如,输入错误密码超过允许的次数)。
0x37
Required Time Delay Not Expired
请求过于频繁,必须等待一定时间后再重新发送。
0x70
Upload Download Not Accepted
上传或下载请求被拒绝,可能是因为内存不可访问或条件不满足。
0x71
Transfer Data Suspended
数据传输被暂停。
0x78
Response Pending
ECU 处理时间较长,响应需要更多时间。客户端需要等待,并可能需要发送 Tester Present 来保持会话活动。
0x7E
Sub-Function Not Supported In Active Session
当前诊断会话不支持该子功能。例如,尝试在默认会话中请求编程功能。
0x7F
Service Not Supported In Active Session
当前诊断会话不支持该服务。
0x92
Voltage Too High
ECU 电压过高,无法处理请求。
0x93
Voltage Too Low
ECU 电压过低,无法处理请求。

常见场景及解释

  1. 安全访问失败(NRC 0x33 和 0x35)
    1. 如果诊断请求需要安全级别访问(如 ECU 的编程功能),但提供的密钥无效或未进行认证,会返回相应的否定响应码。
  1. 条件不满足(NRC 0x22)
    1. 当车辆处于不适合执行该服务的状态(如尝试在车辆行驶时读取存储器)时,会返回该码。
  1. 响应超时或挂起(NRC 0x78)
    1. 某些复杂的请求可能需要 ECU 较长时间来处理。在这种情况下,ECU 返回 0x78 来通知客户端等待更多时间。
  1. 会话模式问题(NRC 0x7E 或 0x7F)
    1. UDS 服务通常在不同的会话模式下操作(如默认会话、扩展诊断会话、编程会话)。某些服务只能在特定会话下执行。

 
CANoe采集日志以及总线报文回放跑步日记
Loading...
joybard
joybard
海边拾贝
Latest posts
python模块与包
2025-2-23
python clear方法与del语句的区别
2025-2-23
编程语言中常见的标点符号英文
2025-2-23
CANoe采集日志以及总线报文回放
2025-1-24
跑步日记
2025-1-11
UDS诊断
2024-12-21