统一诊断服务

统一诊断服务(英语: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). 

外部链接

编辑