UDS关于0x3D按地址写内存服务

1.服务介绍

WriteMemoryByAddress服务允许客户端在一个或多个连续的内存位置将信息写入服务器。

     WriteMemoryByAddress请求消息将由参数dataRecord[]指定的信息写入到由参数memoryAddress和memorySize指定的服务器内存位置。memoryAddress和memorySize参数使用的字节数由addressAndLengthFormatIdentifier (low nibble和high nibble)定义。也可以使用固定的addressAndLengthFormatIdentifier,在memoryAddress或memorySize参数中未使用的字节被填充为更高范围地址位置中的0x00值。

    数据记录的格式和定义应为特定于车辆制造商的,可能存在也可能不存在。车辆制造商有责任确保在执行此服务时满足服务器条件。此服务的可能用途包括:

 a. 清除非易失性存储器

 b. 更改校准值

2.请求消息

2.1 请求消息定义

 UDS关于0x3D按地址写内存服务_第1张图片

C1:此参数的存在取决于addressAndLengthFormatIdentifier的地址长度信息参数

C2:此参数是否存在取决于AddressAndLengthformatIdentifier的内存大小长度信息。 

2.2请求消息子功能参数$Level(LEV_)定义

此服务不使用子函数参数。

2.3请求消息数据参数定义

addressAndLengthFormatIdentifier

该参数为一个字节值,每个nibble分别编码(参见H.1或样例)。

bit 7—bit 4: memorySize参数的长度(字节数)

bit 3—bit 0: memoryAddress参数的长度(字节数)

memoryAddress

     参数memoryAddress是要写入数据的服务器内存的起始地址。用于此地址的字节数由addressAndLengthFormatIdentifier的低位(位3 - 0)定义。memoryAddress参数中的字节#m始终是服务器中引用的地址中最不重要的字节。地址的最高位字节可用作内存标识符。

     使用内存标识符的一个示例是具有16位寻址和内存地址重叠的双处理器服务器(当给定的地址对任一处理器都有效,但产生不同的物理内存设备或使用内部和外部闪存时)。在这种情况下,可以将memoryAddress参数中未使用的字节指定为用于选择所需内存设备的内存标识符。此功能的使用应由车辆制造商/系统供应商定义。

memorySize

     WriteMemoryByAddress请求消息中的参数memorySize指定从服务器内存中memoryAddress指定的地址开始写入的字节数。用于此大小的字节数由addressAndLengthFormatIdentifier的高位(位7 - 4)定义。

dataRecord

   此参数提供客户端实际试图在间隔{0xMA,(0xMA+0xMS-0x01)}内写入服务器内存地址的数据。

3.肯定响应消息

3.1肯定响应消息定义

UDS关于0x3D按地址写内存服务_第2张图片

3.2肯定响应消息数据参数定义

addressAndLengthFormatIdentifier

此参数是请求消息中addressAndLengthFormatIdentifier的回声。

memoryAddress

此参数是请求消息中memoryAddress的回声

 memorySize

此参数是请求消息中memorySize的回声。

4.支持的否定响应代码(NRC_)

该服务应执行以下否定响应代码。下表中记录了每个响应代码发生的情况。如果错误场景适用于服务器,则应使用列出的否定响应。

NRC代码 代名词 描述
0x13  消息长度不正确或格式无效 如果消息长度错误,则应发送此NRC
0x22 条件不正确 如果服务器的操作条件不满足,则应发送该NRC以执行所需的操作。
0x31 请求超出范围

如果出现以下情况,则应发送本NRC:

a.间隔[0xMA,(0xMA+0xMS-0x1)]内的任何内存地址都无效

b.时间间隔[0xMA,(0xMA+0xMS-0x1)]内的任何内存地址都受到限制;

c.服务器不支持请求消息中的memorySize参数值

d.指定的addressAndLengthFormatIdentifier无效

e.请求消息中的memorySize参数值为零

0x33  安全访问被拒绝 如果间隔[0xMA,(0xMA+0xMS-0x1)]内的任何内存地址是安全的并且服务器被锁定,则应发送该NRC。
0x72  常规编程失败 如果服务器在写入内存位置时检测到错误,则应返回此NRC。

UDS关于0x3D按地址写内存服务_第3张图片

5.例子

假设

    此子条款指定了示例执行WriteMemoryByAddress服务所需满足的条件。本例中的服务不受服务器的任何限制。

    以下示例分别演示了将数据字节写入服务器内存的2字节、3字节和4字节寻址格式。

示例#1:WriteMemoryByAddress,2字节(16位)寻址

定义了WriteMemoryByAddress请求消息流示例#1。

UDS关于0x3D按地址写内存服务_第4张图片

定义了WriteMemoryByAddress肯定响应消息流示例#1。

UDS关于0x3D按地址写内存服务_第5张图片

示例#2:WriteMemoryByAddress,3字节(24位)寻址

定义了WriteMemoryByAddress请求消息流示例#2。

UDS关于0x3D按地址写内存服务_第6张图片 定义了WriteMemoryByAddress肯定响应消息流示例#2。

UDS关于0x3D按地址写内存服务_第7张图片

示例#3:WriteMemoryByAddress,4字节(32位)寻址

定义WriteMemoryByAddress请求消息流示例#3

UDS关于0x3D按地址写内存服务_第8张图片 定义WriteMemoryByAddress肯定响应消息流示例#3

UDS关于0x3D按地址写内存服务_第9张图片

 

 

 

 

你可能感兴趣的:(UDS学习,嵌入式硬件,学习,单片机)