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)服务
UDS 诊断 - RequestFileTransfer(请求文件传输)(0x38)服务
本文可能涉及的文章
addressAndLengthFormatIdentifier(地址和长度格式标识符)示例值
文章目录
一、服务说明
0x3D 服务允许客户端向服务器的一个或多个连续存储单元写入信息。
0x3D 服务的请求消息在服务器中参数 memoryAddress(内存地址)和 memorySize(内存大小)所指定的存储单元处写入由参数 dataRecord(数据记录)[] 指定的习性。memoryAddress(内存地址)和 memorySize(内存大小)参数所用的字节数由 addressAndLengthFormatIdentifier(地址和长度格式标识符)确定。也可使用固定的 addressAndLengthFormatIdentifier(地址和长度格式标识符),并且,memoryAddress(内存地址)和 memorySize(内存大小)参数中未使用的字节在更高范围的地址位置填充有数值 0x00。
dataRecord 的格式和定义应随车辆制造商而变,且可能受保护也可能不受保护。在执行本服务时,车辆制造商须确保满足服务器条件。
本服务的可能用途有:
— 清楚非易失性存储器;
— 改变标定值;
二、请求消息
1. 请求消息定义
字节 | 参数名称 | 字节值 | Cvt |
---|---|---|---|
#1 | WriteMemoryByAddress(按地址写内存)请求SID | 0x3D | M |
#2 | addressAndLengthFormatIdentifier(地址和长度格式标识符) | 0x00 - 0xFF | M |
#3 . . #m+2 | memoryAddress[] = [
. . byte#m ] | 0x00 - 0xFF . . 0x00 - 0xFF | M . . C1 |
#n-r-2-(k-1) . . #n-r-2 | memorySize[] = [
. . byte#m ] | 0x00 - 0xFF . . 0x00 - 0xFF | M . . C2 |
#n-(r-1) . . #n | dataRecord[] = [
. . data#m ] | 0x00 - 0xFF . . 0x00 - 0xFF | M . . U |
C1:此参数的存在性取决于 addressAndLengthFormatIdentifier(地址和长度格式标识符)的地址长度信息参数。
C2:此参数的存在性取决于 addressAndLengthFormatIdentifier(地址和长度格式标识符)的内存大小长度信息。
2. 请求消息数据参数定义
定义 |
---|
addressAndLengthFormatIdentifier(地址和长度格式标识符) 此参数为单字节值,每个半字节采用单独的编码:第 7 位至第 4 位:memorySize(内存大小)参数的长度(字节数),第 3 - 0 位:memoryAddress(内存地址)参数的长度(字节数)。 |
memoryAddress(内存地址) 此参数是待写入数据的服务器内存的起始地址。该地址所用的字节数由 addressAndLengthFormatIdentifier(地址和长度格式标识符)的低效半字节(第 3 位至第 0 位)确定。memoryAddress(内存地址)参数的第 m 个字节始终为服务器中当前所引用的地址的最低有效字节。地址的最高有效字节可以用作内存标识符。 内存标识符的使用示例可为一个带 16 位寻址和内存地址重叠的双处理器服务器(给定地址适用于处理器但得出不同的物理内存设备或使用内部和外部闪存的情况下)。在该情况下,可以将 memoryAddress(内存地址)参数中另外未使用的字节指定为用于选择期望内存设备的内存标识符。此功能的使用应由车辆制造商 / 系统供应商确定。 |
memorySize(内存大小) 此参数说明了从服务器内存中 memoryAddress 所指定的地址开始写入的字节数量。该内存大小所用的字节数由 addressAndLengthFormatIdentifier(地址和长度格式标识符)的高效半字节(第 7 位至第 4 位)确定。 |
dataRecord(数据记录) 此参数说明了在间隔{0xMA,(0xMA + 0xMS - 0x01)}内实际试图写入服务器内存地址中的数据。 |
三、肯定响应消息
1. 肯定响应消息定义
字节 | 参数名称 | 字节值 | Cvt |
---|---|---|---|
#1 | WriteMemoryByAddress(按地址写内存)响应SID | 0x7D | M |
#2 | addressAndLengthFormatIdentifier(地址和长度格式标识符) | 0x00 - 0xFF | M |
#3 . . #(m-1)+3 | memoryAddress[] = [
. . byte#m ] | 0x00 - 0xFF . . 0x00 - 0xFF | M . . C1 |
#n-(k-1) . . #n | memorySize[] = [
. . byte#m ] | 0x00 - 0xFF . . 0x00 - 0xFF | M . . C2 |
C1:此参数的存在性取决于 addressAndLengthFormatIdentifier(地址和长度格式标识符)的地址长度信息参数。
C2:此参数的存在性取决于 addressAndLengthFormatIdentifier(地址和长度格式标识符)的内存大小长度信息。
2. 肯定响应消息数据参数定义
定义 |
---|
addressAndLengthFormatIdentifier(地址和长度格式标识符) 本参数是请求消息中 addressAndLengthFormatIdentifier(地址和长度格式标识符)的回显。 |
memoryAddress(内存地址) 本参数是请求消息中 memoryAddress(内存地址)的回显。 |
memorySize(内存大小) 本参数是请求消息中 memorySize(内存大小)的回显。 |
四、支持的NRC
NRC | 说明 |
---|---|
0x13 | 消息长度不正确或格式无效 |
0x22 | 条件不正确 若因不满足服务器的运行条件而无法执行所需的操作,则应发送此 NRC。 |
0x31 | 请求超过限值 以下情况下,应发送此 NRC: - 间隔[0xMA, (0xMA + 0xMS - 0x1)]内的内存地址无效; - 间隔[0xMA, (0xMA + 0xMS - 0x1)]内的内存地址受限; - 服务器不支持请求消息中的 memorySize 参数值; 指定的 addressAndLengthFormatIdentifier(地址和长度格式标识符)无效; - 请求消息中的 memorySize 参数中为 0; |
0x33 | 安全访问被拒绝 若间隔[0xMA, (0xMA + 0xMS - 0x1)]内的内存地址是受保护的且服务器已锁定,则应发送此 NRC。 |
0x72 | 一般编程故障 若在写入一个存储单元时服务器检测到错误,则应发送此 NRC。 |
下图为 0x3D 服务 NRC 的处理。
图例
1. 至少 5 个(SI + addressAndLengthFormatIdentifier(地址和长度格式标识符)+ 最短 memoryAddress + 最小 memorySize + 最小 dataRecord)
2. 单字节 SI + 单字节 addressAndLengthFormatIdentifier(地址和长度格式标识符)+ n 字节 memoryAddress 参数长度 + n 字节 memorySize 参数长度 + n 字节 dataRecord 长度
五、示例
1. 假设
本条规定了执行 0x3D 服务示例所需满足的条件。
本示例中的服务不受服务器任何限制条件的限制。
下例分别展示了以 2 字节、3 字节以及 4 字节寻址格式向服务器内存写入数据字节的方式。
2. 示例 1:2 字节(16 位)寻址
req 3D
12(addressAndLengthFormatIdentifier,其中,memorySize Length = 0x1,memoryAddress Length = 0x2)
20 48(memoryAddress)
02(memorySize)
00 8C(dataRecord)
resp 7D 12 20 48 02
3. 示例 2:3 字节(24 位)寻址
req 3D
13(addressAndLengthFormatIdentifier,其中,memorySize Length = 0x1,memoryAddress Length = 0x3)
20 48 13(memoryAddress)
03(memorySize)
00 01 8C(dataRecord)
resp 7D 13 20 48 13 03
4. 示例 3:4 字节(32 位)寻址
req 3D
14(addressAndLengthFormatIdentifier,其中,memorySize Length = 0x1,memoryAddress Length = 0x4)
20 48 13 09(memoryAddress)
05(memorySize)
00 01 8C 09 AF(dataRecord)
resp 7D 14 20 48 13 09 05