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

1.服务介绍

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

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

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

 a. 清除非易失性存储器

 b. 更改校准值

2.请求消息

2.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肯定响应消息定义

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。

5.例子

假设

    此子条款指定了示例执行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

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值