UDS 诊断 - ReadMemoryByAddress(按地址读取内存)(0x23)服务

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)服务


一、服务说明

0x23 服务允许客户端通过待读取内存的给定起始地址和大小请求服务器中的内存数据。

ReadMemoryByAddress(按地址读取内存)的请求消息用于向服务器请求通过参数 memoryAddress(内存地址)和 memorySize(内存大小)所识别的内存数据。memoryAddress(内存地址)和memorySize(内存大小)参数所用的字节数由 addressAndLengthFormatIdentifier(地址和长度格式标识符)(高效半字节和低效半字节)确定。

也可使用固定的 addressAndLengthFormatIdentifier(地址和长度格式标识符),并且,memoryAddress(内存地址)和 memorySize(内存大小)参数中未使用的字节在更高范围的地址位置填充有数值 0x00。

在重叠内存区内,可使用附加 memoryAddress(内存地址)字节作为内存标识符(例如,内部和外部闪存的使用)。

服务器通过 ReadMemoryByAddress(按地址读取内存)的肯定响应消息读取数据记录值。dataRecord(数据记录)参数的格式和定义应由车辆制造商规定。dataRecord(数据记录)可包含模拟输入和输出信号、数字输入和输出信号、内部数据,以及系统状态信息(若服务器支持)。

二、请求消息

1.请求消息定义

字节参数名称字节值Cvt
#1ReadMemoryByAddress(按地址读取内存)请求SID0x23M
#2addressAndLengthFormatIdentifier(地址和长度格式标识符)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 #k]

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

M
.
.
C2

C1:此参数的存在性取决于 addressAndLengthFormatIdentifier(地址和长度格式标识符)的地址长度信息参数。
C2:此参数的存在性取决于 addressAndLengthFormatIdentifier(地址和长度格式标识符)的内存大小长度信息。

2. 请求消息数据参数定义

定义
addressAndLengthFormatIdentifier(地址和长度格式标识符)
此参数为单字节值,每个半字节采用单独的编码:第 7 位至第 4 位:memorySize(内存大小)参数的长度(字节数),第 3 - 0 位:memoryAddress(内存地址)参数的长度(字节数)。
memoryAddress(内存地址)
此参数是服务器内存的起始地址,从该地址检索数据。该地址所用的字节数由 addressAndLengthFormatIdentifier(地址和长度格式标识符)的低效半字节(第 3 位至第 0 位)确定。memoryAddress(内存地址)参数的第 m 个字节始终为服务器中当前所引用的地址的最低有效字节。地址的最高有效字节可以用作内存标识符。
内存标识符的使用示例可为一个带 16 位寻址和内存地址重叠的双处理器服务器(给定地址适用于处理器但得出不同的物理内存设备或使用内部和外部闪存的情况下)。在该情况下,可以将 memoryAddress(内存地址)参数中另外未使用的字节指定为用于选择期望内存设备的内存标识符。此功能的使用应由车辆制造商 / 系统供应商确定。
**memorySize(内存大小)** <br>此参数指定了从服务器内存中 memoryAddress 所指定的地址开始的待读取字节数。该内存大小所用的字节数由 addressAndLengthFormatIdentifier(地址和长度格式标识符)的高效半字节(第 7 位至第 4 位)确定。|

2.1 addressAndLengthFormatIdentifier(地址和长度格式标识符)示例值

下表中包含 addressAndLengthFormatIdentifier(地址和长度格式标识符)值组合的示例。需要考虑以下情况:

  • 不得使用或必须由服务器通过否定消息拒绝将 “manageable memorySize(可管理的内存大小)” 或 “memoryAddress range(内存地址范围)” 标记为 “not applicable(不适用)” 的值。
  • 对于带有适用 “manageable memorySize(可管理的内存大小)” 或 “memoryAddress range(内存地址范围)” 的值,允许该参数使用。
字节值说明
memorySize(内存大小)字节的 7 - 4 位(高效半字节)编号memoryAddress(内存地址)字节的 3 - 0 位(低效半字节)编号
memorySize(内存大小)参数所用的字节可管理的大小memoryAddress(内存地址)参数所用的字节可寻址内存
0x00 不适用不适用不适用不适用
0x01 不适用不适用1256 个字节 - 1
0x02 不适用不适用264KB - 1
0x03 不适用不适用316MB - 1
0x04 不适用不适用44GB - 1
0x05 不适用不适用51024GB - 1
0x06 - 0x0F ........
0x10 1256个字节不适用不适用
0x11 1256个字节2256 个字节 - 1
0x12 1256个字节364KB - 1
0x13 1256个字节416MB - 1
0x14 1256个字节54GB - 1
0x15 1256个字节11024GB - 1
0x16 - 0x1F ........
0x20 264KB不适用不适用
0x21 264KB1256 个字节 - 1
0x22 264KB264KB - 1
0x23 264KB316MB - 1
0x24 264KB44GB - 1
0x25 264KB51024GB - 1
0x26 - 0x2F ........
0x30 316MB不适用不适用
0x31 316MB1256 个字节 - 1
0x32 316MB264KB - 1
0x33 316MB316MB - 1
0x34 316MB44GB - 1
0x35 316MB51024GB - 1
0x36 - 0x3F ........
0x40 44GB不适用不适用
0x41 44GB1256 个字节 - 1
0x42 44GB264KB - 1
0x43 414GB316MB - 1
0x44 44GB44GB - 1
0x45 44GB51024GB - 1
0x46 - 0xFF ........

三、肯定响应消息

1. 肯定响应消息定义

字节参数名称字节值
#1ReadMemoryByAddress(按地址读取内存)响应SID0x63

#2
.
.
#n
dataRecord[] = [
data #1
.
.
data #m]

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

2. 肯定响应消息数据参数定义

定义
dataRecord(数据记录)
此参数用在 0x23 服务的肯定响应消息中,用以向客户端提供所请求的数据记录值。

四、支持的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。

下图为 0x23 服务的否定响应码的处理。
0x23 服务的否定响应码的处理

图例
1. 至少 4 个(SI + addressAndLengthFormatIdentifier(地址和长度格式标识符)+ 最小 memoryAddress + 最小 memorySize)
2. 单字节 SI + 单字节 addressAndLengthFormatIdentifier(地址和长度格式标识符)+ n 个字节 memoryAddress 参数长度 + n 个字节 memorySize 参数长度

五、示例

1. 假设

本条规定了为执行 0x23 服务示例需满足的条件。本示例中的服务不受服务器任何限制条件的限制。

2. 示例 1:4 字节(32 位)寻址

客户端从内存地址 0x2048 1392 开始读取服务器内存中的 259 数据字节

req   23 24 20 48 13 92 01 03
resp  63 00 ... 8C
req #2:addressAndLengthFormatIdentifier(地址和长度格式标识符),其中 memoryAddress 字节长度 = 4;memorySize 字节长度 = 2;
req #3-#6:memoryAddress:0x20481392
req #7-#8:memoryAddress:0x0103

resp #2-#259+1:dataRecord[ 第 1 个数据 ] (第 1 个存储单元)- dataRecord[ 第 259 个数据 ](第 259 个存储单元)

3. 示例 2:2 字节(16 位)寻址

客户端从内存地址 0x4813 开始读取服务器内存中的 5 个数据字节

req   23 12 48 13 05
resp  63 43 2A 07 2A 55
req #2:addressAndLengthFormatIdentifier(地址和长度格式标识符),其中 memoryAddress 字节长度 = 2;memorySize 字节长度 = 1;
req #3-#4:memoryAddress:0x4813
req #5:memoryAddress:0x05

resp #2-#6:dataRecord[ 第 1 个数据 ] (第 1 个存储单元)- dataRecord[ 第 5 个数据 ](第 5 个存储单元)

4. 示例 3:3 字节(24 位)寻址

客户端从内存地址 0x204813 开始读取服务器外部 RAM 单元中的 3 个数据字节

req   23 23 20 48 13 00 03
resp  63 00 01 8C
req #2:addressAndLengthFormatIdentifier(地址和长度格式标识符),其中 memoryAddress 字节长度 = 3;memorySize 字节长度 = 3;
req #3-#4:memoryAddress:0x204813
req #5:memoryAddress:0x0003

resp #2-#4:dataRecord[ 第 1 个数据 ] (第 1 个存储单元)- dataRecord[ 第 3 个数据 ](第 3 个存储单元)
  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值