UDS(统一诊断服务)协议介绍
一、概述与定位
UDS(Unified Diagnostic Services,统一诊断服务)是国际标准ISO 14229系列定义的车辆诊断协议,位于OSI模型的应用层。为的是“规范化诊断服务的格式和流程”,例如读取故障码、数据流等操作应发送的指令格式。
- 与OBD的区别:OBD是面向排放系统的行业规范,具有强制性;而UDS是面向整车所有ECU的增强型诊断规范,强调统一性,并允许主机厂自定义私有服务。
- 协议栈实现:
- UDS作为应用层协议,可基于多种总线实现(CAN、LIN、Ethernet等)
- 在CAN基础上实现称为DoCAN,依赖ISO 15765-2网络层协议解决CAN帧数据长度限制问题
二、核心通信机制:请求与响应
UDS采用客户端-服务器模型,诊断仪(客户端)发送请求Request,ECU(服务器)返回响应Response。
1.请求格式
- SID(Service Identifier):1字节,标识诊断功能(如0x22为读数据)
- Sub-function:1字节(低7位有效),定义服务的具体操作;最高位用于抑制肯定响应:0=需要响应 1=不需要
- Parameter:可变长度,传递具体数据或条件
2.响应格式
- 肯定响应(Positve Response):格式为SID+0x40+其他参数(如0x62 响应0x22请求)
- 否定响应(Negative Response):格式固定为0x7F+SID+NRC,其中NRC说明失败原因
| 数值 | 描述 |
|---|---|
| 0x11 | serviceNotSupported 服务器不支持客户端请求的诊断服务 |
| 0x12 | subfuntionNotSupported 服务器不支持客户端请求服务的子功能 |
| 0x13 | incorrectMessageLengthOrInvalidFormat 服务器认为客户端的请求报文的数据长度或格式不符合标准 |
| 0x22 | conditionsNotCorrect 服务器执行诊断服务的条件不满足 |
| 0x31 | requestOutOfRange 服务器没有客户端请求的数据,此否定响应适用于支持数据读、写,或者根据数据调整功能的服务器 |
| 0x33 | securityAccessDenied 服务器阻止客户端的受限诊断服务请求,原因包括:服务器的测试调节不满足或服务器的安全状态处于锁定状态 |
| 0x35 | invalidKey 服务器认为客户端返回的秘钥错误 |
| 0x36 | exceedNumberOfAttempts 服务器认为客户端尝试安全访问(解锁)的失败次数超标(一般是大于3次) |
| 0x37 | requiredTimeDelayNotExpired 服务器拒绝客户端的安全访问请求,因为服务器允许接受请求的计时器未到时 |
| 0x78 | requestCorrectlyReceived-PesponsePending 服务器正确接收到客户端发送的请求,正在处理中,但尚未处理完,此否定响应的发送时间应满足本规范中P2CAN_Server的要求,并且服务器应重复发送此否定响应,直到完成操作 |
| 0x7F | serviceNotSupportedInActiveSession 在当前诊断模式下,服务器不支持客户端请求的SID |
三、关键诊断服务详解
UDS包含6大类工26中服务,以下重点介绍7种核心服务
| SID | 描述 |
|---|---|
| 0x10 | 诊断会话控制 |
| 0x11 | ECU复位 |
| 0x14 | 清除诊断信息 |
| 0x19 | 读取故障码信息 |
| 0x22 | 通过ID读数据 |
| 0x27 | 安全访问 |
| 0x28 | 通讯控制 |
| 0x2E | 通过ID写数据 |
| 0x31 | 例行程序控制 |
| 0x3E | 待机握手 |
| 0x85 | 控制DTC的设置 |
| 0x2F | 通过ID控制输入输出 |
1.$10服务:诊断会话控制
功能:控制ECU切换至不同会话模式,各模式权限不同。
常用子功能
-
0x01:默认会话,权限最低。
-
0x02:编程会话,用于刷写软件。
-
0x03:扩展会话,开放更多诊断功能。
示例:
请求:10 03 (进入扩展会话)
响应:50 03 00 32 01 F4(会话参数回显)
2.$27服务:安全访问
功能:通过种子-密钥机制实现身份验证,解锁受保护服务。
流程:
1.诊断仪发送 27 05请求种子;
2.ECU返回67 05 01 01 01(种子值)
3.诊断仪计算密钥并发送27 06 02 03 04;
4.ECU验证通过后返回67 06
关键点:密钥算法由主机厂定义,ECU重启后自动锁定。
3.$22/2E服务:数据读写
功能:通过DID读写ECU数据(如零件号、软件版本)。
DID示例
- 0xF187:车辆制造商零件号
- 0xF188:ECU软件编号
示例:
- 读数据:请求22 F1 87——>响应62 F1 87 48 32 30 31
- 写数据:请求2E F1 87 48 32 30 31——>响应6E F1 87
4.$19服务:读取DTC信息
功能:读取故障码及其状态、环境数据等。
DTC结构:4字节(3字节故障码+1字节状态位)
常用子功能
- 0x02:按状态码读取DTC列表
- 0x06:读取指定DTC快照数据
示例:19 02 FF 请求读取所有DTC
5.$14服务:清除DTC
功能:复位故障码存储区
示例:请求14 FF FF FF——>响应54(清除所有DTC)
6.$3E服务:待机握手
功能:维持非默认会话状态,防止ECU超时退出。
示例:请求3E 80(无需响应)或 3E 00(需响应7E 00)
7.$2F/3E服务:输入输出与控制例程
应用场景:生产线测试(如控制车窗升降)、触发ECU内部自检流程。
示例: 2F 9B 00 03 3C:控制进气门位置至60% 31 01 08 09:启动软件刷写条件检测例程
四、总结
UDS作为汽车诊断的“通用语言”,其核心价值在于:
1.标准化:统一服务格式,降低开发复杂度。
2.灵活性:支持自定义服务与跨平台实现。
3.可扩展性:通过分层协议适配不同总线与功能需求。