UDS 诊断服务系列文章目录
诊断和通信管理功能单元
UDS 诊断 - DiagnosticSessionControl(诊断会话控制)(0x10)服务
UDS 诊断 - ECUReset(ECU重置)(0x11)服务
UDS 诊断 - SecurityAccess(安全访问)(0x27)服务
UDS 诊断 - CommunicationControl(通信控制)(0x28)服务
UDS 诊断 - TesterPresent(测试仪保活)(0x3E)服务
UDS 诊断 - AccessTimingParameter(访问计时参数)(0x83)服务
UDS 诊断 - SecuredDataTransmission(受保护的数据传输)(0x84)服务
UDS 诊断 - ControlDTCSetting(控制DTC设置)(0x85)服务
UDS 诊断 - ResponseOnEvent(基于事件响应)(0x86)服务
UDS 诊断 - LinkControl(链路控制)(0x87)服务
数据传输功能单元
UDS 诊断 - ReadDataByIdentifier(按标识符读取数据)(0x22)服务
UDS 诊断 - ReadMemoryByAddress(按地址读取内存)(0x23)服务
UDS 诊断 - ReadScalingDataByIdentifier(按标识符读取换算数据)(0x24)服务
UDS 诊断 - ReadDataByPeriodicIdentifier(按周期性标识符读取数据)(0x2A)服务
UDS 诊断 - DynamicallyDefineDataIdentifier(动态定义数据标识符)(0x2C)服务
UDS 诊断 - WriteDataByIdentifier(按标识符写数据)(0x2E)服务
UDS 诊断 - WriteMemoryByAddress(按地址写内存)(0x3D)服务
存储数据传输功能单元
UDS 诊断 - ClearDiagnosticInformation(清除诊断信息)(0x14)服务
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(1) - 服务说明
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(2) - 请求消息
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(3) - 响应消息
UDS 诊断 - ReadDTCInformation(读取 DTC 信息)(0x19)服务(4) - 示例
输入输出控制功能单元
UDS 诊断 - InputOutputControlByIdentifier(按标识符的输入输出控制)(0x2F)服务
例程功能单元
UDS 诊断 - RoutineControl(例程控制)(0x31)服务
上传下载功能单元
UDS 诊断 - RequestDownload(请求下载)(0x34)服务
UDS 诊断 - RequestUpload(请求上传)(0x35)服务
UDS 诊断 - TransferData(传输数据)(0x36)服务
UDS 诊断 - RequestTransferExit(请求传输终止)(0x37)服务
本文可能涉及的文章
addressAndLengthFormatIdentifier(地址和长度格式标识符)示例值
一、 服务说明
客户端利用此服务终止客户端与服务器之间的数据传输(上传或下载)。
二、请求消息
1. 请求消息定义
字节 | 参数名称 | Cvt | 字节值 |
---|---|---|---|
#1 | RequestTransferExit(请求传输终止) 请求 SID | M | 0x37 |
#2 … #n | transferRequestParameterRecord[] = [ transferRequestParameter#1 … transferRequestParameter#m ] | U … U | 0x00 - 0xFF … 0x00 - 0xFF |
C:如果正在下载,则此参数为强制参数。
2. 请求消息数据参数定义
定义 |
---|
transferRequestParameterRecord(传输请求参数记录) 此参数记录包含服务器要求的支持数据传输的参数。参数格式和长度由车辆制造商规定。 |
三、肯定响应消息
1. 肯定响应消息定义
字节 | 参数名称 | Cvt | 字节值 |
---|---|---|---|
#1 | RequestTransferExit(请求传输终止)响应SID | M | 0x77 |
#2 … #n | transferResponseParameterRecord[] = [ transferResponseParameter#1 … transferResponseParameter#m ] | U … U | 0x00 - 0xFF … 0x00 - 0xFF |
C:如果正在上传,则此参数为强制参数。
2. 肯定响应消息数据参数的定义
定义 |
---|
transferResponseParameterRecord(传输响应参数记录) 此参数应包含客户端支持数据传输要求的参数。参数格式和长度由车辆制造商规定。 |
四、受支持的 NRC
NRC | 说明 |
---|---|
0x13 | 消息不正确或格式无效 |
0x24 | 请求序列错误 下列情况中,服务器应使用此响应码: - 收到此项服务请求时,编程尚未完成; - RequestDownload 或 RequestUpload 服务未激活。 |
0x31 | 请求超过限值 如果 transferRequestParameterRecord 包含无效数据,则此 NRC 会被返回。 |
0x72 | 一般编程故障 如果完成客户端与服务器之间的数据传输时服务器检测到错误(如通过完整性检查),则此 NRC 会被退回。 |
下图为 0x37 服务 NRC 的处理。
五、示例
1. 下载数据到服务器
1)假设
本小节详细说明了从客户端传输数据(下载)服务器的条件。
本示例包含三个步骤。
第 1 步,客户端和服务器执行 RequestDownload 服务。执行此项服务时,一下信息作为请求和肯定响应消息中的参数在客户端与服务器之间进行交换。
下表定义了 transferRequestParameter(传输请求参数)值。
数据参数名称 | 数据参数值 | 数据参数说明 |
---|---|---|
memoryAddress(3 字节) | 0x602000 | memoryAddress(开始)下载数据到 |
dataFormatIdentifier(数据格式标识符) | 0x11 | dataFormatIdentifier - compressionMethod = 0x1X - encryptingMethod = 0xX1 |
memorySize(3 字节) | 0x00FFFF | memorySize = 65535 字节 在执行 requestTransferExit(请求传输终止)服务时,服务器利用此参数值与传输的实际字数进行对比 |
下表定义了 transferResponseParameter(传输响应参数)值。
数据参数名称 | 数据参数值 | 数据参数说明 |
---|---|---|
maximumNumberOfBlockLength(最大信息组长度) | 0x0081 | SID + BlockSequenceCounter(1 字节) + 127 服务器数据字节 = 129 数据字节 |
第 2 步,客户端从 memoryAddress 0x602000 开始向服务器的快闪内存器传输 65535 字节数据。
第 3 步,客户端执行 requestTransferExit 服务终止向服务器传输数据。
测试条件:ignition = on,engine = off,Vehicle speed = 0 [kph](点火开关点开,发动机熄火,车辆速度为 0)
假设在此例中服务器支持三字节 memoryAddress 和三字节 memorySize。如果 memorySize 包含未压缩大小,则无法计算 127 数据字节的 TransferData 服务的大小,因为压缩方法和压缩比不规范。如果 memorySize 包含压缩大小,则 127 数据字节的 TransferData 服务大小应为 516,其后为 三字节的单个 TransferData 请求。因此,假设最后一个 TransferData 请求消息包含大小相当于 0x05 的 BlockSequenceCounter。
2)step 1:下载请求
req 34 11 - dataFormatIdentifier33 - addressAndLengthFormatIdentifier60 20 00 - memoryAddress00 FF FF - memoryAize
resp 74 20 - LengthFormatIdentifier 00 81 - maxNumberOfBlockLength
3)step 2:传输数据
req 36 01 - blockSequenceCounter XX ... XX - transferRequestParameterRecord[transferRequestParameter#1 - transferRequestParameter#127]
resp 76 01...req 36 05 - blockSequenceCounter XX ... XX - transferRequestParameterRecord[transferRequestParameter#1 - transferRequestParameter#n]
resp 76 05
4)请求传输终止
req 37
resp 77
2. 从服务器上传数据
本小节详细说明了从服务器传输数据(上传)到客户端的条件。
示例包含三个步骤。
第 1 步,客户端和服务器执行 RequestUpload 服务。执行此项服务时,以下信息作为请求和肯定响应消息中的参数在客户端与服务器之间进行交换:
下表定义了 transferRequestParameter(传输请求参数)值。
数据参数名称 | 数据参数值 | 数据参数说明 |
---|---|---|
memoryAddress(3 字节) | 0x201000 | memoryAddress(开始)从 XX 上传数据 |
dataFormatIdentifier(数据格式标识符) | 0x11 | dataFormatIdentifier - compressionMethod = 0x1X - encryptingMethod = 0xX1 |
memorySize(3 字节) | 0x0001FF | memorySize = 511 字节 在执行 requestTransferExit(请求传输终止)服务时,服务器利用此参数值与传输的实际字数进行对比。 |
下表定义了 transferResponseParameter(传输响应参数)值。
数据参数名称 | 数据参数值 | 数据参数说明 |
---|---|---|
maximumNumberOfBlockLength(最大信息组长度) | 0x0081 | SID + BlockSequenceCounter(1 字节) + 127 服务器数据字节 = 129 数据字节 |
第 2 步,服务器以服务器中的 memoryAddress 0x201000 为起点从外部 RAM 传输 511 数据字节(4 个 有 129 数据字节(127 个服务器数据字节 + 1 个 SID + 1 个 BlockSequenceCounter)的 TransferData 服务和 1 个有 5 数据字节(3 个服务器数据字节 + 1 个 SID + 1 个 BlockSequenceCounter)的 TransferData 服务。
第 3 步,客户端执行 requestTransferExit 服务终止向服务器传输数据。
测试条件:ignition = on,engine = off,Vehicle speed = 0 [kph](点火开关点开,发动机熄火,车辆速度为 0)
假设在此例中服务器支持三字节 memoryAddress 和三字节 MemorySize。另外还假设服务器支持 TransferData 服务中的 BlockSequenceCounter。
1)上传请求
req 35 11 - dataFormatIdentifier33 - addressAndLengthFormatIdentifier20 01 00 - memoryAddress00 01 FF - memoryAize
resp 75 20 - LengthFormatIdentifier 00 81 - maxNumberOfBlockLength
2)传输数据
req 36 01 - blockSequenceCounter
resp 76 01XX ... XX - transferResponseParameterRecord[transferResponseParameter#1 - transferResponseParameter#127]...req 36 05 - blockSequenceCounter
resp 76 05XX ... XX - transferResponseParameterRecord[transferResponseParameter#1 - transferResponseParameter#3]
3)请求传输终止
req 37
resp 77