UDS服务理解

UDS服务理解

UDS 服务理解框架

这份文档用一个固定框架吸收所有 UDS 服务:

服务目的 -> 使用条件 -> 请求格式 -> 示例报文 -> 示例逐字节解释 -> 正响应 -> 负响应 -> 常见子功能/对象

读任何服务时,不要先背字节,先问 7 个问题:

  1. 这个服务让 ECU 干什么?
  2. 它在哪个会话/安全等级下能用?
  3. 请求报文由哪些字段组成?
  4. 示例报文每个字节是什么意思?
  5. ECU 收到后做什么业务动作?
  6. 成功怎么回?
  7. 失败用哪个 NRC 说明原因?

通用报文规则

1.1 请求报文

UDS 请求可以抽象成:

SID + 子功能/动作参数 + 目标对象 + 数据参数

字段理解:

字段 作用
SID 选择服务,例如 10/22/2F/31
子功能/动作参数 选择动作,例如进入扩展会话、启动例程、短期控制
目标对象 DID、RID、DTC、内存地址等
数据参数 写入值、控制值、数据块、校验值等

1.2 正响应

正响应 SID 统一等于:

请求 SID + 0x40

请求 正响应 服务
10 50 DiagnosticSessionControl
11 51 ECUReset
14 54 ClearDiagnosticInformation
19 59 ReadDTCInformation
22 62 ReadDataByIdentifier
27 67 SecurityAccess
28 68 CommunicationControl
2E 6E WriteDataByIdentifier
2F 6F InputOutputControlByIdentifier
31 71 RoutineControl
34 74 RequestDownload
36 76 TransferData
37 77 RequestTransferExit
3E 7E TesterPresent
85 C5 ControlDTCSetting

1.3 负响应

负响应格式统一:

7F + 原请求 SID + NRC

例:

7F 2F 31

意思是:2F 服务失败,原因是 31 requestOutOfRange

常见 NRC:

NRC 名称 怎么理解
11 serviceNotSupported ECU 不支持这个 SID
12 subFunctionNotSupported 子功能不支持
13 incorrectMessageLengthOrInvalidFormat 长度或格式错
22 conditionsNotCorrect 当前条件不满足
24 requestSequenceError 请求顺序错
31 requestOutOfRange DID/RID/参数/地址超范围
33 securityAccessDenied 安全等级不够
35 invalidKey key 错
36 exceedNumberOfAttempts 解锁错误次数超限
37 requiredTimeDelayNotExpired 延时未到
70 uploadDownloadNotAccepted 下载请求不接受
72 generalProgrammingFailure 编程失败
73 wrongBlockSequenceCounter 传输块序号错
78 responsePending ECU 正在处理
7E subFunctionNotSupportedInActiveSession 当前会话不支持该子功能
7F serviceNotSupportedInActiveSession 当前会话不支持该服务
92 voltageTooHigh 电压过高
93 voltageTooLow 电压过低

当前工程服务总览

SID 服务 用一句话理解
10 DiagnosticSessionControl 切换诊断会话
11 ECUReset 请求 ECU 复位
14 ClearDiagnosticInformation 清除 DTC
19 ReadDTCInformation 读取故障信息
22 ReadDataByIdentifier 通过 DID 读数据
27 SecurityAccess Seed/Key 解锁
28 CommunicationControl 控制通信收发
2E WriteDataByIdentifier 通过 DID 写数据
2F InputOutputControlByIdentifier 临时控制 IO
31 RoutineControl 执行内部例程
34 RequestDownload 请求开始下载
36 TransferData 传输下载数据
37 RequestTransferExit 结束下载传输
3E TesterPresent 保持诊断会话
85 ControlDTCSetting 控制 DTC 是否更新

0x10 DiagnosticSessionControl

目的

切换 ECU 当前诊断会话。很多服务只有在扩展会话或编程会话下才能执行。

常见子功能

子功能 名称 含义
1 defaultSession 默认会话
2 programmingSession 编程会话
3 extendedDiagnosticSession 扩展会话

请求格式

10 sessionType

示例请求

10 03

逐字节解释:

字节 含义
byte0 10 DiagnosticSessionControl
byte1 3 请求进入扩展会话

ECU 执行动作

ECU 检查会话切换是否允许,允许后准备切换到目标会话。

正响应格式

50 sessionType P2_H P2_L P2_H P2_L

示例正响应

50 03 00 32 00 C8

逐字节解释:

字节 含义
byte0 50 0x10 的正响应
byte1 3 已接受扩展会话
byte2-3 00 32 P2Server 时间
byte4-5 00 C8 P2*Server 时间

常见负响应

7F 10 12 子功能不支持

7F 10 22 条件不满足

7F 10 7E 当前会话不允许切换到目标会话


0x11 ECUReset

目的

请求 ECU 执行复位。

常见子功能

子功能 名称 含义
1 hardReset 硬复位
3 keyOffOnReset/softReset 类似下电上电或软复位

请求格式

11 resetType

示例请求

11 01

逐字节解释:

字节 含义
byte0 11 ECUReset
byte1 1 请求 hardReset

正响应格式

51 resetType

示例正响应

51 01

逐字节解释:

字节 含义
byte0 51 0x11 的正响应
byte1 1 回显 hardReset

ECU 执行动作

ECU 先发正响应,再执行复位动作。

常见负响应

7F 11 12 resetType 不支持

7F 11 22 当前条件不允许复位


0x14 ClearDiagnosticInformation

目的

清除 DTC 故障信息。

请求格式

14 groupOfDTC_H groupOfDTC_M groupOfDTC_L

常见 groupOfDTC

groupOfDTC 含义
FF FF FF 清除全部 DTC
xx xx xx 清除指定 DTC 或指定组

示例请求

14 FF FF FF

逐字节解释:

字节 含义
byte0 14 ClearDiagnosticInformation
byte1-3 FF FF FF 请求清除全部 DTC

正响应格式

54

示例正响应

54

逐字节解释:

字节 含义
byte0 54 清除 DTC 成功

常见负响应

7F 14 13 长度错误

7F 14 22 条件不满足

7F 14 31 DTC 组不支持


0x19 ReadDTCInformation

目的

读取故障码数量、故障码列表、快照数据和支持的 DTC。

常见子功能

子功能 名称 请求用途
1 reportNumberOfDTCByStatusMask 按状态掩码读取 DTC 数量
2 reportDTCByStatusMask 按状态掩码读取 DTC 列表
3 reportDTCSnapshotIdentification 读取快照标识
4 reportDTCSnapshotRecordByDTCNumber 按 DTC 读取快照记录
6 reportDTCExtDataRecordByDTCNumber 按 DTC 读取扩展数据
0A reportSupportedDTC 读取所有支持的 DTC

示例 1:读取 DTC 数量

请求:

19 01 FF

逐字节解释:

字节 含义
byte0 19 ReadDTCInformation
byte1 1 读取匹配状态掩码的 DTC 数量
byte2 FF statusMask,匹配所有状态位

UDS 服务理解框架

这份文档用一个固定框架吸收所有 UDS 服务:

服务目的 -> 使用条件 -> 请求格式 -> 示例报文 -> 示例逐字节解释 -> 正响应 -> 负响应 -> 常见子功能/对象

读任何服务时,不要先背字节,先问 7 个问题:

  1. 这个服务让 ECU 干什么?
  2. 它在哪个会话/安全等级下能用?
  3. 请求报文由哪些字段组成?
  4. 示例报文每个字节是什么意思?
  5. ECU 收到后做什么业务动作?
  6. 成功怎么回?
  7. 失败用哪个 NRC 说明原因?

通用报文规则

1.1 请求报文

UDS 请求可以抽象成:

SID + 子功能/动作参数 + 目标对象 + 数据参数

字段理解:

字段 作用
SID 选择服务,例如 10/22/2F/31
子功能/动作参数 选择动作,例如进入扩展会话、启动例程、短期控制
目标对象 DID、RID、DTC、内存地址等
数据参数 写入值、控制值、数据块、校验值等

1.2 正响应

正响应 SID 统一等于:

请求 SID + 0x40

请求 正响应 服务
10 50 DiagnosticSessionControl
11 51 ECUReset
14 54 ClearDiagnosticInformation
19 59 ReadDTCInformation
22 62 ReadDataByIdentifier
27 67 SecurityAccess
28 68 CommunicationControl
2E 6E WriteDataByIdentifier
2F 6F InputOutputControlByIdentifier
31 71 RoutineControl
34 74 RequestDownload
36 76 TransferData
37 77 RequestTransferExit
3E 7E TesterPresent
85 C5 ControlDTCSetting

1.3 负响应

负响应格式统一:

7F + 原请求 SID + NRC

例:

7F 2F 31

意思是:2F 服务失败,原因是 31 requestOutOfRange

常见 NRC:

NRC 名称 怎么理解
11 serviceNotSupported ECU 不支持这个 SID
12 subFunctionNotSupported 子功能不支持
13 incorrectMessageLengthOrInvalidFormat 长度或格式错
22 conditionsNotCorrect 当前条件不满足
24 requestSequenceError 请求顺序错
31 requestOutOfRange DID/RID/参数/地址超范围
33 securityAccessDenied 安全等级不够
35 invalidKey key 错
36 exceedNumberOfAttempts 解锁错误次数超限
37 requiredTimeDelayNotExpired 延时未到
70 uploadDownloadNotAccepted 下载请求不接受
72 generalProgrammingFailure 编程失败
73 wrongBlockSequenceCounter 传输块序号错
78 responsePending ECU 正在处理
7E subFunctionNotSupportedInActiveSession 当前会话不支持该子功能
7F serviceNotSupportedInActiveSession 当前会话不支持该服务
92 voltageTooHigh 电压过高
93 voltageTooLow 电压过低

当前工程服务总览

SID 服务 用一句话理解
10 DiagnosticSessionControl 切换诊断会话
11 ECUReset 请求 ECU 复位
14 ClearDiagnosticInformation 清除 DTC
19 ReadDTCInformation 读取故障信息
22 ReadDataByIdentifier 通过 DID 读数据
27 SecurityAccess Seed/Key 解锁
28 CommunicationControl 控制通信收发
2E WriteDataByIdentifier 通过 DID 写数据
2F InputOutputControlByIdentifier 临时控制 IO
31 RoutineControl 执行内部例程
34 RequestDownload 请求开始下载
36 TransferData 传输下载数据
37 RequestTransferExit 结束下载传输
3E TesterPresent 保持诊断会话
85 ControlDTCSetting 控制 DTC 是否更新

0x10 DiagnosticSessionControl

目的

切换 ECU 当前诊断会话。很多服务只有在扩展会话或编程会话下才能执行。

常见子功能

子功能 名称 含义
1 defaultSession 默认会话
2 programmingSession 编程会话
3 extendedDiagnosticSession 扩展会话

请求格式

10 sessionType

示例请求

10 03

逐字节解释:

字节 含义
byte0 10 DiagnosticSessionControl
byte1 3 请求进入扩展会话

ECU 执行动作

ECU 检查会话切换是否允许,允许后准备切换到目标会话。

正响应格式

50 sessionType P2_H P2_L P2_H P2_L

示例正响应

50 03 00 32 00 C8

逐字节解释:

字节 含义
byte0 50 0x10 的正响应
byte1 3 已接受扩展会话
byte2-3 00 32 P2Server 时间
byte4-5 00 C8 P2*Server 时间

常见负响应

7F 10 12 子功能不支持

7F 10 22 条件不满足

7F 10 7E 当前会话不允许切换到目标会话


0x11 ECUReset

目的

请求 ECU 执行复位。

常见子功能

子功能 名称 含义
1 hardReset 硬复位
3 keyOffOnReset/softReset 类似下电上电或软复位

请求格式

11 resetType

示例请求

11 01

逐字节解释:

字节 含义
byte0 11 ECUReset
byte1 1 请求 hardReset

正响应格式

51 resetType

示例正响应

51 01

逐字节解释:

字节 含义
byte0 51 0x11 的正响应
byte1 1 回显 hardReset

ECU 执行动作

ECU 先发正响应,再执行复位动作。

常见负响应

7F 11 12 resetType 不支持

7F 11 22 当前条件不允许复位


0x14 ClearDiagnosticInformation

目的

清除 DTC 故障信息。

请求格式

14 groupOfDTC_H groupOfDTC_M groupOfDTC_L

常见 groupOfDTC

groupOfDTC 含义
FF FF FF 清除全部 DTC
xx xx xx 清除指定 DTC 或指定组

示例请求

14 FF FF FF

逐字节解释:

字节 含义
byte0 14 ClearDiagnosticInformation
byte1-3 FF FF FF 请求清除全部 DTC

正响应格式

54

示例正响应

54

逐字节解释:

字节 含义
byte0 54 清除 DTC 成功

常见负响应

7F 14 13 长度错误

7F 14 22 条件不满足

7F 14 31 DTC 组不支持


0x19 ReadDTCInformation

目的

读取故障码数量、故障码列表、快照数据和支持的 DTC。

常见子功能

子功能 名称 请求用途
1 reportNumberOfDTCByStatusMask 按状态掩码读取 DTC 数量
2 reportDTCByStatusMask 按状态掩码读取 DTC 列表
3 reportDTCSnapshotIdentification 读取快照标识
4 reportDTCSnapshotRecordByDTCNumber 按 DTC 读取快照记录
6 reportDTCExtDataRecordByDTCNumber 按 DTC 读取扩展数据
0A reportSupportedDTC 读取所有支持的 DTC

示例 1:读取 DTC 数量

请求:

19 01 FF

逐字节解释:

字节 含义
byte0 19 ReadDTCInformation
byte1 1 读取匹配状态掩码的 DTC 数量
byte2 FF statusMask,匹配所有状态位

正响应:

59 01 AA 01 00 03

逐字节解释:

字节 含义
byte0 59 0x19 的正响应
byte1 1 回显子功能
byte2 AA ECU 支持的 DTC 状态掩码示例
byte3 1 DTC 格式标识
byte4-5 00 03 匹配的 DTC 数量为 3

示例 2:读取 DTC 列表

请求:

19 02 FF

逐字节解释:

字节 含义
byte0 19 ReadDTCInformation
byte1 2 读取 DTC 列表
byte2 FF statusMask

正响应:

59 02 AA 12 34 56 2F 23 45 67 2F

逐字节解释:

字节 含义
byte0 59 正响应
byte1 2 回显子功能
byte2 AA 可用状态掩码
byte3-5 12 34 56 第 1 个 DTC 编号
byte6 2F 第 1 个 DTC 状态
byte7-9 23 45 67 第 2 个 DTC 编号
byte10 2F 第 2 个 DTC 状态

示例 3:读取指定 DTC 快照

请求:

19 04 12 34 56 01

逐字节解释:

字节 含义
byte0 19 ReadDTCInformation
byte1 4 读取 DTC 快照记录
byte2-4 12 34 56 DTC 编号
byte5 1 快照记录号

正响应:

59 04 12 34 56 2F snapshotData…

逐字节解释:

字段 含义
59 正响应
4 回显子功能
12 34 56 回显 DTC
2F statusOfDTC
snapshotData 快照数据,通常由 DID + DID 数据组成

常见负响应

7F 19 12 子功能不支持

7F 19 13 长度错误

7F 19 31 DTC、状态掩码或记录号不支持

7F 19 7E 当前会话不支持该子功能


0x22 ReadDataByIdentifier

目的

按 DID 读取 ECU 数据。

请求格式

22 DID_H DID_L [DID_H DID_L …]

常见 DID 类型

DID 类型 例子 含义
版本/零件号 F183、F187、F18A、F18E、F191、F195 软件、硬件、零件、版本信息
VIN/配置 F190、F1A1 车辆识别或配置数据
快照 DID DF01-DF06 DTC 快照相关数据

示例请求

22 F1 90

逐字节解释:

字节 含义
byte0 22 ReadDataByIdentifier
byte1-2 F1 90 DID = F190

正响应格式

62 DID_H DID_L data…

示例正响应

62 F1 90 31 32 33 34 35 36 37 38 39 …

逐字节解释:

字段 含义
62 0x22 的正响应
F1 90 回显 DID
data DID 对应的数据内容

多 DID 示例

请求:

22 F1 90 F1 A1

响应:

62 F1 90 data1… F1 A1 data2…

理解:一次读多个 DID,响应中按顺序返回每个 DID 和数据。

常见负响应

7F 22 13 长度错误

7F 22 31 DID 不支持

7F 22 33 权限不够

7F 22 7F 当前会话不支持该服务


0x27 SecurityAccess

目的

通过 Seed/Key 获取安全权限。很多写入、IO 控制、刷写服务都要先解锁。

常见子功能

子功能 含义
1 请求 Level1 seed
2 发送 Level1 key
11 请求 Level4/FBL seed
12 发送 Level4/FBL key

示例 1:请求 seed

请求:

27 01

逐字节解释:

字节 含义
byte0 27 SecurityAccess
byte1 1 请求 Level1 seed

正响应:

67 01 seed16…

逐字段解释:

字段 含义
67 0x27 的正响应
1 回显请求 seed 的子功能
seed16 ECU 返回的 16 字节 seed

示例 2:发送 key

请求:

27 02 key32…

逐字段解释:

字段 含义
27 SecurityAccess
2 发送 Level1 key
key32 32 字节 key 数据,前 16 字节 DF,后 16 字节 token

正响应:

67 02

逐字节解释:

字节 含义
byte0 67 正响应
byte1 2 key 通过,Level1 解锁成功

ECU 执行动作

ECU 发 seed 后保存 seed;收到 key 后,用内部密钥和 seed 计算结果,与 tester 发来的 token 比较。匹配则安全等级提升,不匹配则返回 invalidKey 并累计错误次数。

常见负响应

7F 27 12 子功能不支持

7F 27 24 没有先请求 seed 就发 key,或等级不匹配

7F 27 35 key 错误

7F 27 36 错误次数超限

7F 27 37 延时时间未到


0x28 CommunicationControl

目的

控制 ECU 某类通信报文的接收和发送。

常见子功能

子功能 含义
0 enableRxAndTx
1 enableRxAndDisableTx
2 disableRxAndEnableTx,当前工程服务表未启用
3 disableRxAndTx

communicationType 常见值

含义
1 normalCommunicationMessages
3 normal + networkManagement

示例请求

28 03 01

逐字节解释:

字节 含义
byte0 28 CommunicationControl
byte1 3 禁止接收和发送
byte2 1 控制普通通信报文

正响应格式

68 controlType

示例正响应

68 03

逐字节解释:

字节 含义
byte0 68 正响应
byte1 3 回显控制类型

常见负响应

7F 28 12 子功能不支持

7F 28 22 条件不满足

7F 28 31 communicationType 不支持


0x2E WriteDataByIdentifier

目的

按 DID 写入 ECU 数据。

当前工程常见可写 DID

DID 长度 常见含义 写入条件
F184 9 指纹/编程相关数据 编程会话,Level4
F190 17 VIN 类数据 扩展会话,Level1
F1A1 8 自定义配置数据 扩展会话,Level1

请求格式

2E DID_H DID_L data…

示例请求

2E F1 90 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37

逐字段解释:

字段 含义
2E WriteDataByIdentifier
F1 90 DID = F190
31 32 … 37 写入数据,长度必须等于 F190 定义长度 17 字节

正响应格式

6E DID_H DID_L

示例正响应

6E F1 90

逐字节解释:

字节 含义
byte0 6E 0x2E 的正响应
byte1-2 F1 90 回显写入成功的 DID

常见负响应

7F 2E 13 写入数据长度不等于 DID 定义长度

7F 2E 31 DID 不支持写入

7F 2E 33 安全权限不够

7F 2E 7F 当前会话不支持该服务


0x2F InputOutputControlByIdentifier

目的

临时控制 ECU 的输入/输出对象,例如阀位置、水泵使能和转速。

controlParameter 常见值

名称 含义
0 returnControlToECU 交还 ECU 控制
1 resetToDefault 复位默认值
2 freezeCurrentState 冻结当前状态
3 shortTermAdjustment 短期控制到指定值

当前工程支持的 IO DID

DID 对象 控制值
6501 5 通阀位置 2 字节角度,0-360
6502 6 通阀位置 2 字节角度,0-360
6503 电机水泵 byte0=使能 0/1,byte1=速度 0-100
6504 空调水泵 byte0=使能 0/1,byte1=速度 0-100
6505 电池水泵 byte0=使能 0/1,byte1=速度 0-100

请求格式

2F DID_H DID_L controlParameter [controlState…]

示例 1:短期控制电机水泵

请求:

2F 65 03 03 01 50

逐字节解释:

字节 含义
byte0 2F IO 控制服务
byte1-2 65 03 DID = 6503,电机水泵
byte3 3 shortTermAdjustment,短期控制
byte4 1 水泵使能 = 1
byte5 50 水泵速度 = 0x50 = 80

正响应:

6F 65 03 03 01 50

逐字节解释:

字节 含义
byte0 6F 0x2F 的正响应
byte1-2 65 03 回显 DID
byte3 3 回显控制方式
byte4-5 01 50 回显控制状态

示例 2:复位空调水泵默认值

请求:

2F 65 04 01

逐字节解释:

字节 含义
2F 2F IO 控制服务
65 04 65 04 DID = 6504,空调水泵
1 1 resetToDefault

正响应:

6F 65 04 01

常见负响应

7F 2F 13 长度错误

7F 2F 22 条件不满足

7F 2F 31 DID 不支持、控制参数不支持或控制值超范围

7F 2F 33 安全权限不够


0x31 RoutineControl

目的

让 ECU 启动、停止或查询一个内部例程。本工程实际主要使用 startRoutine。

常见子功能

子功能 名称 含义
1 startRoutine 启动例程
2 stopRoutine 停止例程
3 requestRoutineResults 查询例程结果

当前工程常见 RID

RID 名称 请求参数长度 响应状态长度
203 检查编程前置条件 0 1
FF00 擦除内存 9 1
202 校验内存 64 1
FF01 检查编程依赖 0 1

请求格式

31 routineControlType RID_H RID_L [routineControlOption…]

示例 1:检查编程前置条件

请求:

31 01 02 03

逐字节解释:

字节 含义
byte0 31 RoutineControl
byte1 1 startRoutine
byte2-3 02 03 RID = 0203,检查编程前置条件

正响应:

71 01 02 03 00

逐字节解释:

字节 含义
byte0 71 0x31 的正响应
byte1 1 回显 startRoutine
byte2-3 02 03 回显 RID
byte4 0 routineStatus,00 表示正确/条件满足

示例 2:擦除内存

请求:

31 01 FF 00 44 00 02 00 00 00 01 00 00

逐字段解释:

字段 含义
31 RoutineControl
1 startRoutine
FF 00 RID = FF00,擦除内存
44 地址 4 字节,大小 4 字节
00 02 00 00 起始地址示例
00 01 00 00 擦除大小示例

可能先返回:

7F 31 78

表示擦除中。完成后返回:

71 01 FF 00 00

逐字节解释:

字段 含义
71 正响应
1 startRoutine
FF 00 擦除内存 RID
0 擦除结果正确

常见负响应

7F 31 12 子功能不支持

7F 31 13 长度错误

7F 31 22 条件不满足

7F 31 31 RID 或参数不支持

7F 31 33 安全权限不够

7F 31 78 例程执行中


0x34 RequestDownload

目的

开始下载流程,告诉 ECU 下载目标地址和总大小,并获取最大块长度。

请求格式

34 dataFormatIdentifier addressAndLengthFormatIdentifier memoryAddress… memorySize…

示例请求

34 00 44 00 02 00 00 00 01 00 00

逐字段解释:

字段 含义
34 RequestDownload
0 dataFormatIdentifier,当前表示无压缩/无加密
44 高 4 位=4,memorySize 4 字节;低 4 位=4,memoryAddress 4 字节
00 02 00 00 memoryAddress 示例
00 01 00 00 memorySize 示例

正响应格式

74 lengthFormatIdentifier maxNumberOfBlockLength…

示例正响应

74 20 01 02

逐字节解释:

字节 含义
byte0 74 0x34 的正响应
byte1 20 后面 maxNumberOfBlockLength 占 2 字节
byte2-3 01 02 ECU 允许的最大传输块长度示例

常见负响应

7F 34 13 长度错误

7F 34 22 下载条件不满足

7F 34 31 地址、大小或格式超范围

7F 34 33 安全权限不够

7F 34 70 下载不被接受


0x36 TransferData

目的

在 0x34 成功后,按块传输下载数据。

请求格式

36 blockSequenceCounter transferData…

示例请求

36 01 AA BB CC DD

逐字节解释:

字节 含义
byte0 36 TransferData
byte1 1 第 1 块数据
byte2… AA BB CC DD 本块下载数据

正响应格式

76 blockSequenceCounter

示例正响应

76 01

逐字节解释:

字节 含义
byte0 76 0x36 的正响应
byte1 1 回显已接收的数据块序号

常见负响应

7F 36 24 请求顺序错误,未先执行 0x34 或流程状态不对

7F 36 31 数据长度或总量超范围

7F 36 72 写入失败

7F 36 73 blockSequenceCounter 错误

7F 36 92 电压过高

7F 36 93 电压过低


0x37 RequestTransferExit

目的

结束下载传输流程。

请求格式

37

示例请求

37

逐字节解释:

字节 含义
byte0 37 RequestTransferExit

正响应格式

77

示例正响应

77

逐字节解释:

字节 含义
byte0 77 0x37 的正响应,传输退出成功

常见负响应

7F 37 13 长度错误

7F 37 24 下载流程未完成或请求顺序错误


0x3E TesterPresent

目的

保持诊断会话,防止 ECU 因 S3 超时回默认会话。

常见子功能

子功能 含义
0 正常 TesterPresent
80 设置抑制正响应位,成功时不回复

示例请求

3E 00

逐字节解释:

字节 含义
byte0 3E TesterPresent
byte1 0 tester 在线,要求正响应

正响应格式

7E 00

示例正响应

7E 00

逐字节解释:

字节 含义
byte0 7E 0x3E 的正响应
byte1 0 回显子功能

常见负响应

7F 3E 12 子功能不支持

7F 3E 13 长度错误


0x85 ControlDTCSetting

目的

控制 ECU 是否允许 DTC 记录/更新。

常见子功能

子功能 名称 含义
1 on 开启 DTC 更新
2 off 关闭 DTC 更新

请求格式

85 settingType

示例请求

85 02

逐字节解释:

字节 含义
byte0 85 ControlDTCSetting
byte1 2 暂停 DTC 更新

正响应格式

C5 settingType

示例正响应

C5 02

逐字节解释:

字节 含义
byte0 C5 0x85 的正响应
byte1 2 回显暂停 DTC 更新

常见负响应

7F 85 12 子功能不支持

7F 85 22 条件不满足


复杂服务吸收口诀

复杂服务就按这句话拆:

SID 说明服务,子功能说明动作,DID/RID/DTC/地址说明对象,后面的数据说明值或范围;ECU 检查条件后执行动作,成功回 SID+0x40 并回显关键字段,失败回 7F+SID+NRC。

拿到报文后按这个顺序标注:

  1. 标 SID:这是哪个服务。
  2. 标子功能:这次要做哪个动作。
  3. 标对象:操作哪个 DID/RID/DTC/地址。
  4. 标参数:写入值、控制值、长度、数据块或校验值。
  5. 标响应:正响应回显了什么,新增了什么结果字段。
  6. 标 NRC:失败原因属于长度、条件、权限、范围还是顺序。

正响应:

59 01 AA 01 00 03

逐字节解释:

字节 含义
byte0 59 0x19 的正响应
byte1 1 回显子功能
byte2 AA ECU 支持的 DTC 状态掩码示例
byte3 1 DTC 格式标识
byte4-5 00 03 匹配的 DTC 数量为 3

示例 2:读取 DTC 列表

请求:

19 02 FF

逐字节解释:

字节 含义
byte0 19 ReadDTCInformation
byte1 2 读取 DTC 列表
byte2 FF statusMask

正响应:

59 02 AA 12 34 56 2F 23 45 67 2F

逐字节解释:

字节 含义
byte0 59 正响应
byte1 2 回显子功能
byte2 AA 可用状态掩码
byte3-5 12 34 56 第 1 个 DTC 编号
byte6 2F 第 1 个 DTC 状态
byte7-9 23 45 67 第 2 个 DTC 编号
byte10 2F 第 2 个 DTC 状态

示例 3:读取指定 DTC 快照

请求:

19 04 12 34 56 01

逐字节解释:

字节 含义
byte0 19 ReadDTCInformation
byte1 4 读取 DTC 快照记录
byte2-4 12 34 56 DTC 编号
byte5 1 快照记录号

正响应:

59 04 12 34 56 2F snapshotData…

逐字节解释:

字段 含义
59 正响应
4 回显子功能
12 34 56 回显 DTC
2F statusOfDTC
snapshotData 快照数据,通常由 DID + DID 数据组成

常见负响应

7F 19 12 子功能不支持

7F 19 13 长度错误

7F 19 31 DTC、状态掩码或记录号不支持

7F 19 7E 当前会话不支持该子功能


0x22 ReadDataByIdentifier

目的

按 DID 读取 ECU 数据。

请求格式

22 DID_H DID_L [DID_H DID_L …]

常见 DID 类型

DID 类型 例子 含义
版本/零件号 F183、F187、F18A、F18E、F191、F195 软件、硬件、零件、版本信息
VIN/配置 F190、F1A1 车辆识别或配置数据
快照 DID DF01-DF06 DTC 快照相关数据

示例请求

22 F1 90

逐字节解释:

字节 含义
byte0 22 ReadDataByIdentifier
byte1-2 F1 90 DID = F190

正响应格式

62 DID_H DID_L data…

示例正响应

62 F1 90 31 32 33 34 35 36 37 38 39 …

逐字节解释:

字段 含义
62 0x22 的正响应
F1 90 回显 DID
data DID 对应的数据内容

多 DID 示例

请求:

22 F1 90 F1 A1

响应:

62 F1 90 data1… F1 A1 data2…

理解:一次读多个 DID,响应中按顺序返回每个 DID 和数据。

常见负响应

7F 22 13 长度错误

7F 22 31 DID 不支持

7F 22 33 权限不够

7F 22 7F 当前会话不支持该服务


0x27 SecurityAccess

目的

通过 Seed/Key 获取安全权限。很多写入、IO 控制、刷写服务都要先解锁。

常见子功能

子功能 含义
1 请求 Level1 seed
2 发送 Level1 key
11 请求 Level4/FBL seed
12 发送 Level4/FBL key

示例 1:请求 seed

请求:

27 01

逐字节解释:

字节 含义
byte0 27 SecurityAccess
byte1 1 请求 Level1 seed

正响应:

67 01 seed16…

逐字段解释:

字段 含义
67 0x27 的正响应
1 回显请求 seed 的子功能
seed16 ECU 返回的 16 字节 seed

示例 2:发送 key

请求:

27 02 key32…

逐字段解释:

字段 含义
27 SecurityAccess
2 发送 Level1 key
key32 32 字节 key 数据,前 16 字节 DF,后 16 字节 token

正响应:

67 02

逐字节解释:

字节 含义
byte0 67 正响应
byte1 2 key 通过,Level1 解锁成功

ECU 执行动作

ECU 发 seed 后保存 seed;收到 key 后,用内部密钥和 seed 计算结果,与 tester 发来的 token 比较。匹配则安全等级提升,不匹配则返回 invalidKey 并累计错误次数。

常见负响应

7F 27 12 子功能不支持

7F 27 24 没有先请求 seed 就发 key,或等级不匹配

7F 27 35 key 错误

7F 27 36 错误次数超限

7F 27 37 延时时间未到


0x28 CommunicationControl

目的

控制 ECU 某类通信报文的接收和发送。

常见子功能

子功能 含义
0 enableRxAndTx
1 enableRxAndDisableTx
2 disableRxAndEnableTx,当前工程服务表未启用
3 disableRxAndTx

communicationType 常见值

含义
1 normalCommunicationMessages
3 normal + networkManagement

示例请求

28 03 01

逐字节解释:

字节 含义
byte0 28 CommunicationControl
byte1 3 禁止接收和发送
byte2 1 控制普通通信报文

正响应格式

68 controlType

示例正响应

68 03

逐字节解释:

字节 含义
byte0 68 正响应
byte1 3 回显控制类型

常见负响应

7F 28 12 子功能不支持

7F 28 22 条件不满足

7F 28 31 communicationType 不支持


0x2E WriteDataByIdentifier

目的

按 DID 写入 ECU 数据。

当前工程常见可写 DID

DID 长度 常见含义 写入条件
F184 9 指纹/编程相关数据 编程会话,Level4
F190 17 VIN 类数据 扩展会话,Level1
F1A1 8 自定义配置数据 扩展会话,Level1

请求格式

2E DID_H DID_L data…

示例请求

2E F1 90 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37

逐字段解释:

字段 含义
2E WriteDataByIdentifier
F1 90 DID = F190
31 32 … 37 写入数据,长度必须等于 F190 定义长度 17 字节

正响应格式

6E DID_H DID_L

示例正响应

6E F1 90

逐字节解释:

字节 含义
byte0 6E 0x2E 的正响应
byte1-2 F1 90 回显写入成功的 DID

常见负响应

7F 2E 13 写入数据长度不等于 DID 定义长度

7F 2E 31 DID 不支持写入

7F 2E 33 安全权限不够

7F 2E 7F 当前会话不支持该服务


0x2F InputOutputControlByIdentifier

目的

临时控制 ECU 的输入/输出对象,例如阀位置、水泵使能和转速。

controlParameter 常见值

名称 含义
0 returnControlToECU 交还 ECU 控制
1 resetToDefault 复位默认值
2 freezeCurrentState 冻结当前状态
3 shortTermAdjustment 短期控制到指定值

当前工程支持的 IO DID

DID 对象 控制值
6501 5 通阀位置 2 字节角度,0-360
6502 6 通阀位置 2 字节角度,0-360
6503 电机水泵 byte0=使能 0/1,byte1=速度 0-100
6504 空调水泵 byte0=使能 0/1,byte1=速度 0-100
6505 电池水泵 byte0=使能 0/1,byte1=速度 0-100

请求格式

2F DID_H DID_L controlParameter [controlState…]

示例 1:短期控制电机水泵

请求:

2F 65 03 03 01 50

逐字节解释:

字节 含义
byte0 2F IO 控制服务
byte1-2 65 03 DID = 6503,电机水泵
byte3 3 shortTermAdjustment,短期控制
byte4 1 水泵使能 = 1
byte5 50 水泵速度 = 0x50 = 80

正响应:

6F 65 03 03 01 50

逐字节解释:

字节 含义
byte0 6F 0x2F 的正响应
byte1-2 65 03 回显 DID
byte3 3 回显控制方式
byte4-5 01 50 回显控制状态

示例 2:复位空调水泵默认值

请求:

2F 65 04 01

逐字节解释:

字节 含义
2F 2F IO 控制服务
65 04 65 04 DID = 6504,空调水泵
1 1 resetToDefault

正响应:

6F 65 04 01

常见负响应

7F 2F 13 长度错误

7F 2F 22 条件不满足

7F 2F 31 DID 不支持、控制参数不支持或控制值超范围

7F 2F 33 安全权限不够


0x31 RoutineControl

目的

让 ECU 启动、停止或查询一个内部例程。本工程实际主要使用 startRoutine。

常见子功能

子功能 名称 含义
1 startRoutine 启动例程
2 stopRoutine 停止例程
3 requestRoutineResults 查询例程结果

当前工程常见 RID

RID 名称 请求参数长度 响应状态长度
203 检查编程前置条件 0 1
FF00 擦除内存 9 1
202 校验内存 64 1
FF01 检查编程依赖 0 1

请求格式

31 routineControlType RID_H RID_L [routineControlOption…]

示例 1:检查编程前置条件

请求:

31 01 02 03

逐字节解释:

字节 含义
byte0 31 RoutineControl
byte1 1 startRoutine
byte2-3 02 03 RID = 0203,检查编程前置条件

正响应:

71 01 02 03 00

逐字节解释:

字节 含义
byte0 71 0x31 的正响应
byte1 1 回显 startRoutine
byte2-3 02 03 回显 RID
byte4 0 routineStatus,00 表示正确/条件满足

示例 2:擦除内存

请求:

31 01 FF 00 44 00 02 00 00 00 01 00 00

逐字段解释:

字段 含义
31 RoutineControl
1 startRoutine
FF 00 RID = FF00,擦除内存
44 地址 4 字节,大小 4 字节
00 02 00 00 起始地址示例
00 01 00 00 擦除大小示例

可能先返回:

7F 31 78

表示擦除中。完成后返回:

71 01 FF 00 00

逐字节解释:

字段 含义
71 正响应
1 startRoutine
FF 00 擦除内存 RID
0 擦除结果正确

常见负响应

7F 31 12 子功能不支持

7F 31 13 长度错误

7F 31 22 条件不满足

7F 31 31 RID 或参数不支持

7F 31 33 安全权限不够

7F 31 78 例程执行中


0x34 RequestDownload

目的

开始下载流程,告诉 ECU 下载目标地址和总大小,并获取最大块长度。

请求格式

34 dataFormatIdentifier addressAndLengthFormatIdentifier memoryAddress… memorySize…

示例请求

34 00 44 00 02 00 00 00 01 00 00

逐字段解释:

字段 含义
34 RequestDownload
0 dataFormatIdentifier,当前表示无压缩/无加密
44 高 4 位=4,memorySize 4 字节;低 4 位=4,memoryAddress 4 字节
00 02 00 00 memoryAddress 示例
00 01 00 00 memorySize 示例

正响应格式

74 lengthFormatIdentifier maxNumberOfBlockLength…

示例正响应

74 20 01 02

逐字节解释:

字节 含义
byte0 74 0x34 的正响应
byte1 20 后面 maxNumberOfBlockLength 占 2 字节
byte2-3 01 02 ECU 允许的最大传输块长度示例

常见负响应

7F 34 13 长度错误

7F 34 22 下载条件不满足

7F 34 31 地址、大小或格式超范围

7F 34 33 安全权限不够

7F 34 70 下载不被接受


0x36 TransferData

目的

在 0x34 成功后,按块传输下载数据。

请求格式

36 blockSequenceCounter transferData…

示例请求

36 01 AA BB CC DD

逐字节解释:

字节 含义
byte0 36 TransferData
byte1 1 第 1 块数据
byte2… AA BB CC DD 本块下载数据

正响应格式

76 blockSequenceCounter

示例正响应

76 01

逐字节解释:

字节 含义
byte0 76 0x36 的正响应
byte1 1 回显已接收的数据块序号

常见负响应

7F 36 24 请求顺序错误,未先执行 0x34 或流程状态不对

7F 36 31 数据长度或总量超范围

7F 36 72 写入失败

7F 36 73 blockSequenceCounter 错误

7F 36 92 电压过高

7F 36 93 电压过低


0x37 RequestTransferExit

目的

结束下载传输流程。

请求格式

37

示例请求

37

逐字节解释:

字节 含义
byte0 37 RequestTransferExit

正响应格式

77

示例正响应

77

逐字节解释:

字节 含义
byte0 77 0x37 的正响应,传输退出成功

常见负响应

7F 37 13 长度错误

7F 37 24 下载流程未完成或请求顺序错误


0x3E TesterPresent

目的

保持诊断会话,防止 ECU 因 S3 超时回默认会话。

常见子功能

子功能 含义
0 正常 TesterPresent
80 设置抑制正响应位,成功时不回复

示例请求

3E 00

逐字节解释:

字节 含义
byte0 3E TesterPresent
byte1 0 tester 在线,要求正响应

正响应格式

7E 00

示例正响应

7E 00

逐字节解释:

字节 含义
byte0 7E 0x3E 的正响应
byte1 0 回显子功能

常见负响应

7F 3E 12 子功能不支持

7F 3E 13 长度错误


0x85 ControlDTCSetting

目的

控制 ECU 是否允许 DTC 记录/更新。

常见子功能

子功能 名称 含义
1 on 开启 DTC 更新
2 off 关闭 DTC 更新

请求格式

85 settingType

示例请求

85 02

逐字节解释:

字节 含义
byte0 85 ControlDTCSetting
byte1 2 暂停 DTC 更新

正响应格式

C5 settingType

示例正响应

C5 02

逐字节解释:

字节 含义
byte0 C5 0x85 的正响应
byte1 2 回显暂停 DTC 更新

常见负响应

7F 85 12 子功能不支持

7F 85 22 条件不满足


复杂服务吸收口诀

复杂服务就按这句话拆:

SID 说明服务,子功能说明动作,DID/RID/DTC/地址说明对象,后面的数据说明值或范围;ECU 检查条件后执行动作,成功回 SID+0x40 并回显关键字段,失败回 7F+SID+NRC。

拿到报文后按这个顺序标注:

  1. 标 SID:这是哪个服务。
  2. 标子功能:这次要做哪个动作。
  3. 标对象:操作哪个 DID/RID/DTC/地址。
  4. 标参数:写入值、控制值、长度、数据块或校验值。
  5. 标响应:正响应回显了什么,新增了什么结果字段。
  6. 标 NRC:失败原因属于长度、条件、权限、范围还是顺序。