UDS 诊断 - WriteMemoryByAddress(按地址写内存)(0x3D)服务

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(按地址写内存)请求SID0x3DM
#2 addressAndLengthFormatIdentifier(地址和长度格式标识符)0x00 - 0xFFM

#3
.
.
#m+2
memoryAddress[] = [
byte#1(MSB)
.
.
byte#m ]

0x00 - 0xFF
.
.
0x00 - 0xFF

M
.
.
C1

#n-r-2-(k-1)
.
.
#n-r-2
memorySize[] = [
byte#1(MSB)
.
.
byte#m ]

0x00 - 0xFF
.
.
0x00 - 0xFF

M
.
.
C2

#n-(r-1)
.
.
#n
dataRecord[] = [
data#1
.
.
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(按地址写内存)响应SID0x7DM
#2 addressAndLengthFormatIdentifier(地址和长度格式标识符)0x00 - 0xFFM

#3
.
.
#(m-1)+3
memoryAddress[] = [
byte#1(MSB)
.
.
byte#m ]

0x00 - 0xFF
.
.
0x00 - 0xFF

M
.
.
C1

#n-(k-1)
.
.
#n
memorySize[] = [
byte#1(MSB)
.
.
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 的处理。
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值