统一诊断服务

统一诊断服务（Unified Diagnostic Services，简称UDS）是车用电子的通讯协定，是电子控制器（ECU）中设备诊断用的网络传输协议，对应的标准是ISO 14229-1。此标准是衍生自ISO 14230-3（KWP2000）以及目前已不使用的ISO 15765-3 （控制器局域网络上的诊断通讯，DoCAN）。“统一诊断服务”中的“统一”是指此标准是国际性标准，不是特定公司的专用标准。目前所有一阶供应商新生产的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｜资源暂时无法使用

## 相关条目

- 车上诊断系统，广义的车上诊断服务
- OBD-II PID，类似功能的美国标准

## 外部链接

- Unified Diagnostic Services - ISO 14229 (poster by softing.com)