《UDS协议从入门到精通》系列——图解0x23:通过地址读取内存
- 一、简介
- 二、数据包格式
- 2.1 服务请求格式
- 2.2 服务响应格式
- 2.2.1 肯定响应
- 2.2.2 否定响应
- 三、通信示例
Tip📌:本文描述中但凡涉及到其他UDS服务的,将陆续提供链接跳转方式以便快速了解他们。(各服务介绍持续更新中…)
学习UDS基础知识以及其他相关内容?>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<
一、简介
简单的说,该服务允许Tester通过发送请求提供起始地址和要读取的内存大小从目标ECU中请求内存数据。
目标ECU将在正响应消息中返回内存中的实际数据。响应消息中的数据参数的格式和定义由车辆制造商具体决定。数据可能包括模拟输入输出信号、数字输入输出信号、内部数据和系统状态信息等,当然,前提是目标ECU支持这些数据的读取。
二、数据包格式
2.1 服务请求格式
其请求消息里面包含了两个重要的参数:memoryAddress
(内存地址)和memorySize
(内存大小)。memoryAddress
指的是数据开始的地址,而memorySize
指的是要读取的数据的字节数。请求消息中还有一个参数叫作addressAndLengthFormatIdentifier
,这个参数定义了内存地址和内存大小两个参数各使用多少字节表示。它由一个字节构成,低半字节表示内存地址使用的字节数,高半字节表示内存长度使用的字节数。
本服务不支持sub-function,各个参数的详细含义如下所示:
addressAndLengthFormatIdentifier(1Byte):这个参数是一个字节的值,用来定义接下来两个参数memoryAddress和memorySize的字节长度。它的每半字节都有独立的编码规则:
- 高半字节(bit 7 - 4):表示memorySize参数的长度(即,读取的字节数的长度用几个字节表示)。
- 低半字节(bit 3 - 0):表示memoryAddress参数的长度(即,内存地址的长度用几个字节表示)。
通常情况下,针对特定的ECU,addressAndLengthFormatIdentifier
的格式也是固定的。如果在memoryAddress
或memorySize
中有未使用到的字节,这些字节将一般会在高位用0x00填充。
memoryAddress(不定长):指定了目标ECU内存中数据读取的起始地址。此地址的具体字节数由addressAndLengthFormatIdentifier的低半字节确定。
Tip📌:地址的高位字节可以用作内存标识符,用于在存在地址重叠的情况下区分不同的内存装置或处理器。
例如,在一个具有16位地址的双处理器服务器上,如果某个地址对两个处理器都有效,但指向不同的物理内存装置或内部和外部闪存,这时可以使用内存地址参数中的一个未使用字节作为内存标识符来选择期望的内存装置。
memorySize(不定长):这个参数指定了从memoryAddress开始要读取的字节数。该字节数由addressAndLengthFormatIdentifier的高半字节定义。
2.2 服务响应格式
2.2.1 肯定响应
dataRecord(不定长):dataRecord包含的具体内容在UDS协议的文档中并没有定义。其格式由制造商定义,直接反映出Tester7请求读取的那部分内存内容。
Tip📌:尽管UDS协议没有定义dataRecord的具体内容,但数据的格式化方式应由车辆制造商或系统供应商事先定义。这是因为不同的车辆制造商或系统可能会以不同的方式存储和管理数据。
例如,如果一个诊断工具请求从ECU的特定内存地址开始读取某个传感器的数据,那么ECU返回的dataRecord参数将包含该传感器数据的实际值。这些数据可能是原始的二进制值,也可能是经过一定处理的数值,具体取决于车辆制造商定义的格式。诊断工具需要依据制造商提供的数据格式指南来解析dataRecord中的数据,进而得到有意义的诊断信息。
2.2.2 否定响应
可能出现的NRC及其含义如下:
NRC | 含义 |
---|---|
0x13 | 消息长度错误 |
0x22 | 当前条件不满足 |
0x31 | 请求参数不受支持,参数错误 |
0x33 | 未通过安全访问 |
NRC的处理流程如下所示(即推荐的错误情况检查顺序):
三、通信示例
假设目标ECU是32位寻址的,及其flash访问地址支持4个字节的寻址空间(换句话说就是地址占用4个字节),我们希望通过该服务从目标ECU的地址0x20481392处读取259字节的数据,请求及响应过程如下所示:
这个服务比较简单,UDS协议中还给出了地址为两字节的和三字节的示例,没什么大的区别,有需要的可以再去协议中找对应例子再看看,这里不再赘述。
>>>>>>>>> 返回专栏总目录 《UDS协议从入门到精通(UDS速查手册)》<<<<<<<<<