WriteMemoryByAddress服务允许客户端在一个或多个连续的内存位置将信息写入服务器。
WriteMemoryByAddress请求消息将由参数dataRecord[]指定的信息写入到由参数memoryAddress和memorySize指定的服务器内存位置。memoryAddress和memorySize参数使用的字节数由addressAndLengthFormatIdentifier (low nibble和high nibble)定义。也可以使用固定的addressAndLengthFormatIdentifier,在memoryAddress或memorySize参数中未使用的字节被填充为更高范围地址位置中的0x00值。
数据记录的格式和定义应为特定于车辆制造商的,可能存在也可能不存在。车辆制造商有责任确保在执行此服务时满足服务器条件。此服务的可能用途包括:
a. 清除非易失性存储器
b. 更改校准值
2.1 请求消息定义
C1:此参数的存在取决于addressAndLengthFormatIdentifier的地址长度信息参数
C2:此参数是否存在取决于AddressAndLengthformatIdentifier的内存大小长度信息。
此服务不使用子函数参数。
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)}内写入服务器内存地址的数据。
addressAndLengthFormatIdentifier
此参数是请求消息中addressAndLengthFormatIdentifier的回声。
memoryAddress
此参数是请求消息中memoryAddress的回声
memorySize
此参数是请求消息中memorySize的回声。
该服务应执行以下否定响应代码。下表中记录了每个响应代码发生的情况。如果错误场景适用于服务器,则应使用列出的否定响应。
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。 |
假设
此子条款指定了示例执行WriteMemoryByAddress服务所需满足的条件。本例中的服务不受服务器的任何限制。
以下示例分别演示了将数据字节写入服务器内存的2字节、3字节和4字节寻址格式。
示例#1:WriteMemoryByAddress,2字节(16位)寻址
定义了WriteMemoryByAddress请求消息流示例#1。
定义了WriteMemoryByAddress肯定响应消息流示例#1。
示例#2:WriteMemoryByAddress,3字节(24位)寻址
定义了WriteMemoryByAddress请求消息流示例#2。
定义了WriteMemoryByAddress肯定响应消息流示例#2。
示例#3:WriteMemoryByAddress,4字节(32位)寻址
定义WriteMemoryByAddress请求消息流示例#3
定义WriteMemoryByAddress肯定响应消息流示例#3