车载诊断入门之常用的SID

127 阅读5分钟

UDS(统一诊断服务)协议介绍

一、概述与定位

UDS(Unified Diagnostic Services,统一诊断服务)是国际标准ISO 14229系列定义的车辆诊断协议,位于OSI模型的应用层。为的是“规范化诊断服务的格式和流程”,例如读取故障码、数据流等操作应发送的指令格式。

69a9ceda6e8cdcb0f8924d0895c8c197.png

  • 与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说明失败原因
数值描述
0x11serviceNotSupported 服务器不支持客户端请求的诊断服务
0x12subfuntionNotSupported 服务器不支持客户端请求服务的子功能
0x13incorrectMessageLengthOrInvalidFormat 服务器认为客户端的请求报文的数据长度或格式不符合标准
0x22conditionsNotCorrect 服务器执行诊断服务的条件不满足
0x31requestOutOfRange 服务器没有客户端请求的数据,此否定响应适用于支持数据读、写,或者根据数据调整功能的服务器
0x33securityAccessDenied 服务器阻止客户端的受限诊断服务请求,原因包括:服务器的测试调节不满足或服务器的安全状态处于锁定状态
0x35invalidKey 服务器认为客户端返回的秘钥错误
0x36exceedNumberOfAttempts 服务器认为客户端尝试安全访问(解锁)的失败次数超标(一般是大于3次)
0x37requiredTimeDelayNotExpired 服务器拒绝客户端的安全访问请求,因为服务器允许接受请求的计时器未到时
0x78requestCorrectlyReceived-PesponsePending 服务器正确接收到客户端发送的请求,正在处理中,但尚未处理完,此否定响应的发送时间应满足本规范中P2CAN_Server的要求,并且服务器应重复发送此否定响应,直到完成操作
0x7FserviceNotSupportedInActiveSession 在当前诊断模式下,服务器不支持客户端请求的SID

三、关键诊断服务详解

UDS包含6大类工26中服务,以下重点介绍7种核心服务

SID描述
0x10诊断会话控制
0x11ECU复位
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(会话参数回显)

67ade11daba1124610fdb5d740b9ae01.png

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.可扩展性:通过分层协议适配不同总线与功能需求。