统一诊断服务

统一诊断服务(英语: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个字节的消息框内。

现今的车辆有配合离线诊断的诊断接口,让电脑或是诊断工具(作为测试设备)可以连接到汽车上的通信系统。因此可以发送统一诊断服务的请求到控制器,控制器必须回复(可能是正面或是负面的回复),这样可以确认个别控制单元中的故障存储器、更新控制单元的固件、和硬件进行低端的交互(例如开启或关闭特定的输出)、或是进行特定的机能,目的是了了解电子控制器的环境或是操作条件,以诊断故障或是不希望出现的行为。

服务

功能群 请求  SID 回复  SID 服务 说明
诊断及通信管理 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 认证
Authentication
标准在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里的特定地址,或特定的连续地址
存储资料发送 0x14 0x54 清除诊断信息
Clear Diagnostic Information
清除已存储的诊断问题码(Diagnostic Trouble Code,简称DTC)
0x19 0x59 读取DTC信息
Read DTC Information
DTC是诊断问题码。每一个DTC对应一个控制单元的故障,会以其编码存储在错误存储器中,可以在任意时候读取。除了错误外,也可能会记录一些相关的信息,也可以一并读取。
输入/输出控制 0x2F 0x6F 根据标识符的输入/输出控制
Input Output Control By Identifier
此服务可以让外部系统接口透过诊断接口控制输入/输出信号

透过设置选择字节,可以设置有关请求的特殊条件,可以设置以下的值:

ReturnControlToECU:设备需将信号的控制权送回

ResetToDefault:测试者试图重置信号,回到系统的默认值

Freeze Current State:设备需冻结目前的信号,不允许变化

ShortTermAdjustment:设备需使用目前提供的信号值

远程启动程序 0x31 0x71 远程控制
Routine Control
此控制服务程序可以进行各种的服务,有三种不同的信息种类:
  • 配合启始信息,可以开始服务。可以定义此信息来确认要执行各动作,或是提示服务已经完成。
  • 配合停止信息,运行中的服务可以在任何时间下中断。
  • 第三个选项是查询服务状态的信息

可以特别标示启始及结束的信息参数,因此可以实现每一种项目特定的服务。

上传/下载 0x34 0x74 请求下载
Request Download
利用“请求下载”服务,可以下载新的软件或是其他资料到控制单元内。需标示资料的位置以及长度,因此,控制器可以知道数据包的大小。
0x35 0x75 请求上传
Request Upload
“请求上传”服务和“请求下载”服务是类似的,此服务可以将控制单元的软件发送给测试者。也需标示资料的位置以及长度,测试者需指定数据包的大小。
0x36 0x76 发送资料
Transfer Data
在真正发送资料时,会用到此一服务,不论是上传或是下载都是使用此一服务。发送的方向则视之前是“请求上传”服务或“请求下载”服务而不同。此一服务会用之前指定的最大数据包长度发送资料,若资料长度超过最大数据包长度,需要用数个数据包来发送,直到发送完成为止。
0x37 0x77 请求结束发送
Request Transfer Exit
可以用此服务中止资料发送。此服务用在测试着和控制单元比较时。在执行时,控制单元可以负面回应来中止资料发送请求。若指定的资料量还没发送完,也可以用此服务中止发送。
0x38 0x78 请求文件发送
Request File Transfer
此服务用来启始客户端到服务器的文件下载,或是服务器到客户端的文件上传。也可以提供一些文件系统的相关信息。
0x7F 否定回应
Negative Response
此回应会在服务无法进行时回复,例如不支持的资料识别符。此时会加上否定的回应码。


NRC: Negative response codes

来自 ECU 的否定回应(Negative Response)包含 SID 0x7F 和两个有效负载字节:请求的 SID 和错误代码。

错误代码(NRC)如下:

NRC Description
0x10 General reject 一般拒绝
0x11 Service not supported 不支持的服务
0x12 Subfunction not supported 不支持的子功能
0x13 Incorrect message length or invalid format 消息长度不正确或格式错误
0x14 Response too long 反应时间太长
0x21 Busy, repeat request 忙碌/重复请求
0x22 Conditions not correct 条件不正确
0x24 Request sequence error 请求顺序错误
0x25 No response from subnet component 子网组件无回应
0x26 Failure prevents execution of requested action 阻止执行请求的操作失败
0x31 Request out of range 请求超出范围
0x33 Security access denied 安全访问被拒绝
0x34 Authentication failed 认证失败
0x35 Invalid key 无效的密钥
0x36 Exceeded number of attempts 超过尝试次数
0x37 Required time delay not expired 要求的延迟时间未到
0x38 Secure data transmission required 需要安全的资料传输(SID=0x84)
0x39 Secure data transmission not allowed 不允许安全资料传输
0x3A Secure data verification failed 安全资料验证失败
0x50 Certificate validation failed, invalid time period 证书验证失败,时段无效
0x51 Certificate validation failed, invalid signature 证书验证失败,签名无效
0x52 Certificate validation failed, invalid chain of trust 证书验证失败,信任链无效
0x53 Certificate validation failed, invalid type 证书验证失败,类型无效
0x54 Certificate validation failed, invalid format 证书验证失败,格式无效
0x55 Certificate validation failed, invalid content 证书验证失败,内容无效
0x56 Certificate validation failed, invalid scope 证书验证失败,范围无效
0x57 Certificate validation failed, invalid certificate 证书验证失败,证书无效
0x58 Ownership verification failed 所有权验证失败
0x59 Challenge calculation failed 挑战计算失败
0x5A Setting access right failed 设置访问权限失败
0x5B Session key creation/derivation failed 会话密钥建立/派生失败
0x5C Configuration data usage failed 配置资料使用失败
0x5D Deauthentication failed 取消认证失败
0x70 Upload download not accepted 上传下载不被接受
0x71 Transfer data suspended 传输资料暂停
0x72 General programming failure 一般程序设计失败
0x73 Wrong block sequence number 错误的区块序号
0x78 Request correctly received, response pending 请求已正确接收,回应待处理
0x7E Subfunction not supported in active session 当前会话中不支持子功能
0x7F Service not supported in active session 当前会话中不支持服务
0x81 RPM too high 转速太高
0x82 RPM too low 转速太低
0x83 Engine is running 引擎正在运转
0x84 Engine is not running 引擎未运转
0x85 Engine run time too low 引擎运转时间太短
0x86 Temperature too high 温度过高
0x87 Temperature too low 温度太低
0x88 Vehicle speed too high 车速太高
0x89 Vehicle speed too low 车速太低
0x8A Throttle/pedal too high 油门/踏板太高
0x8B Throttle/pedal too low 油门/踏板太低
0x8C Transmission range not in neutral 传输范围不在空档
0x8D Transmission range not in gear 未挂档的传动范围
0x8F Brake switch not closed 刹车开关未闭合
0x90 Shifter lever not in park 变速杆不在停车位置
0x91 Torque converter clutch locked 变矩器离合器锁止
0x92 Voltage too high 电压过高
0x93 Voltage too low 电压太低
0x94 Resource temporary unavailable 资源暂时无法使用

相关条目

参考资料

  1. ^ ISO 14229. [2020-06-12]. (原始内容存档于2020-03-03). 
  2. ^ ISO 15765-3:2004. [2020-06-12]. (原始内容存档于2020-06-12). 

外部链接