统一诊断服务
统一诊断服务(英语: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),有定义其他的会话,需要实现的会话会依照设备的种类而不同。
此外,也有一些保留的会话识别符,为了汽车生产者及供应商的特殊需求而设计。 |
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的串接。
请求资料可以依以下的原则规划配置:
| |
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 | 资源暂时无法使用 |
相关条目
- 车上诊断系统,广义的车上诊断服务
- OBD-II PID,类似功能的美国标准
参考资料
外部链接
- Unified Diagnostic Services - ISO 14229 (页面存档备份,存于互联网档案馆) (poster by softing.com)