【问题标题】:Read memory by Address - Read more than 255 bytes按地址读取内存 - 读取超过 255 个字节
【发布时间】:2021-08-19 19:06:17
【问题描述】:

我想使用 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 Incorrect Message Length or Invalid Format Error”。

谁能帮我解决这个问题。 提前致谢。

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

【问题讨论】:

  • 向我们展示您在跟踪窗口中发送的完整帧。
  • 进行扩展会话并给出命令“23 22 1C 22 01 50”。响应为 0x13。
  • 0x23 是按地址读取内存的 UDS 命令
  • 你真的是在 CAN 帧中为 UDS 请求发送“23 22 1C 22 01 50”,还是以长度 6 为前缀,如“06 23 22 1C 22 01 50”? UDS 工具通常会自动执行此操作,但如果您将其作为普通 CAN 帧执行,则必须小心自己。

标签: capl uds


【解决方案1】:

NRC 0x13 的含义

根据 ISO 14229-1:2020:

这意味着:

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

如何正确发送请求

好吧,我们不知道服务器接受的确切格式是什么(这取决于服务器的内存),但 ISO 14229-1:2020 定义 SID 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 的特定值。不过,很难百分百确定地判断。您应该提供至少一个具有积极响应的请求。 请在评论中这样做,我将指导您解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    相关资源
    最近更新 更多