8.7 读取数据 ReadDataByIdentifier (22h)
此服务允许诊断工具读取数据标识符对应的数据记录。
ECU通过肯定响应报文发送数据记录值。记录值的格式和定义需在零部件诊断规范中详细描述。记 录值要求包括模拟输入和输出信号, 数字输入和输出信号,ECU支持的内部数据和系统的状态等。
8.7.1 报文格式
表 36 读取数据服务的请求报文
Byte | Name | Cvt | Value (Hex) |
#1 | RequestServiceIdentifier | M | 22 |
#2 #3 | DataIdentifier[]=[ byte#1 byte#2] | M | 00-FF 00-FF |
表 37 读取数据服务的肯定响应
Byte | Name | Cvt | Value (Hex) |
#1 | PositiveResponseServiceID | M | 62 |
#2 #3 | DataIdentifier[]=[ byte#1 byte#2] | M | 00-FF 00-FF |
#4 … | DataRecord[]=[ data#1 … data#n] | M | 00-FF … 00-FF |
8.7.2 支持的否定响应码
表 38 读取数据服务的否定响应码
Hex | Cvt | ErrorText |
13 | M | 报文长度错误 如果报文长度错误或者诊断工具一次请求的DID个数超过允许的最大值,则 发送此否定响应码。 |
31 | M | 请求超出范围 如下情况时,发送此否定响应码: 1.没有一个请求的DID值被ECU支持; 2.当前会话下没有一个请求的DID值被ECU支持。 |
22 | U | 条件未满足 如果ECU的操作条件不满足执行相应动作的要求,发送此否定响应代码。 |
33 | U | 安全访问拒绝 如果与专用地址相关的数据标识符处于保护状态并且ECU锁定, 发送此否定响应 码。 |
8.7.3 参数定义
附录B中定义了h事业部强制要求的“数据标识符”,每个ECU都必须支持。其他与ECU功能相关的“数 据标识符”由h事业部及供应商的诊断工程师共同定义并在零部件诊断规范中详细描述。
8.7.4 执行规定
通过此诊断服务一次读取的“数据标识符”最多为1个。
8.8 读取内存 Read Memory By Address (23h)
该服务允许诊断工具根据起始地址及定义的数据大小从ECU中读取数据。
8.8.1 报文格式
表 39 读取内存服务的请求报文
Byte | Name | Cvt | Value (Hex) |
#1 | Request Service Identifier | M | 23 |
#2 | Address And Length Format Identifier | M | 24 |
#3 … #6 | Memory Address[]=[ byte#1(MSB) … byte#m] | M … M | 00-FF |
#7 #8 | memorySize[]=[ byte#1(MSB) byte#2] | M M | 00-FF |
表 40 读取内存服务的肯定响应
Byte | Name | Cvt | Value (Hex) |
#1 | PositiveResponseServiceID | M | 63 |
#2 #3 | dataRecord[]=[ data#1 … data#m] | M … U | 00-FF … 00-FF |
8.8.2 支持的否定响应码
表 41 读取内存服务的否定响应码
Hex | Cvt | ErrorText |
13 | M | 报文长度错误 如果报文长度错误,发送此否定响应码。 |
31 | M | 请求超出范围 如下情况时,发送此否定响应码: 1.[$MA,($MA+$MS-$1)]内的任意内存地址无效; 2.[$MA,($MA+$MS-$1)]内的任意内存地址受限; 3.请求报文中的参数memorySize值大于ECU支持的最大值; 4.指定的addressAndLengthFormatIdentifier无效。 |
33 | M | 安全访问拒绝 如果[$MA,($MA+$MS-$1)]内的任意内存地址是受保护的且ECU没有处于解锁状 态,发送此否定响应码。 |
22 | U | 条件未满足 如果ECU的操作条件不满足执行相应动作的要求,发送此否定响应码。 |
8.8.3 参数定义
参数“内存地址” (MemoryAddress)长度为4字节。
参数“内存大小” (MemorySize)长度为2字节。
8.8.4 执行规定
此服务的参数无特殊要求,但ECU需为直接读取内存的执行考虑适当的安全机制。