1

我想使用 Read Memory By Address UDS 服务从 NVRAM 读取大约 336 字节的数据。我给出的命令是“23 22 1C 22 01 50”,其中

  1. 0x23 - 按地址读取存储器的 UDS 命令
  2. 0x22 - 地址和长度格式标识符(内存地址参数 - 2 和内存大小参数 2)
  3. 0x1C 0x22 - 2 个字节的内存地址
  4. 0x01 0x50 - 以 2 个字节读取的数据长度(长度为 336 个字节)

当我提交命令时,我收到“0x13 消息长度不正确或格式无效错误”。

有人可以帮我解决这个问题。提前致谢。

参考:https ://piembsystech.com/uds-protocol/

4

1 回答 1

0

NRC 0x13 是什么意思

根据 ISO 14229-1:2020: 核证委员会 0x13

这表示:

  • 服务器支持 SID 0x23,否则您将收到 NRC 0x11 serviceNotSupported
  • 您的请求格式不正确(太长或太短),在其他情况下您会收到其他 NRC(例如 0x31 requestOutOfRange)。我怀疑地址值不是 2 个字节长。它可能有 4 个字节长(取决于内存类型和大小),但这只是一个猜测。

如何正确发送请求

我们不知道服务器接受的确切格式是什么(取决于服务器的内存),但 ISO 14229-1:2020 定义了 SID 0x23 请求格式如下: 请求 0x23 格式

我会尝试以下请求:

  • 0x22 0x44 0x00 0x00 0x1C 0x22 0x00 0x00 0x01 0x50

在哪里:

  • 0x00 0x00 0x1C 0x22 - 4 字节内存地址
  • 0x00 0x00 0x01 0x50 - memorySize(它也是 4 字节以确保服务器正确解释 addressAndLengthFormatIdentifier)

其他选项

服务器可能有缺陷(特别是如果您使用 2 字节长的地址成功读取内存)并且错误地显示 NRC 0x13或仅支持 addressAndLenghtFormatIdentifier 的某些值。不过,很难百分百确定地判断。您将至少提供一个具有积极响应的请求。请在评论中这样做,我将指导您解决问题。

于 2021-09-09T09:51:06.163 回答