This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHXL-F28P65X:需要使用相同的 ID 发送/接收 CAN 远程和数据帧

Guru**** 2319290 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1517174/launchxl-f28p65x-need-to-send-receive-can-remote-and-data-frame-with-same-id

器件型号:LAUNCHXL-F28P65X

工具/软件:

您好、

我需要对远程帧和数据帧使用相同的三个 CAN ID。

当我收到远程帧时、需要检查 ID、并据此发送具有相同 ID 的数据帧。

在第一次迭代中、我接收到一个远程帧并发送一个具有相同 ID 的数据帧。

在下一次迭代中、我不会接收远程帧(接收中断即将到来、而不是消息对象中断)。

如果我使用任何其他 ID 发送数据帧、则能够接收远程帧。

  1. 是否知道导致此问题的原因?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Shashi:

    在接收远程帧之前、数据帧是否已上传到消息 RAM 中的消息对象以便进行第二次迭代? 如果 umask=1、则不必通过配置 MSK[28:0]对数据帧使用相同的 ID。

    25.11.8接收远程帧

    接收到远程帧时、会考虑匹配消息对象的三种不同配置:

    1. DIR = 1 (方向=传输)、RmtEn = 1、umask = 1或0

      在接收到匹配的远程帧时设置该消息对象的 TxRqst 位。 消息对象的其余部分保持不变。

    2. DIR = 1 (方向=传输)、RmtEn = 0、umask = 0

      远程帧被忽略、此消息对象保持不变。

    3. DIR = 1 (方向=传输)、RmtEn = 0、umask = 1

      远程帧的处理方式与接收的数据帧类似。

      在接收到匹配的远程帧时、该消息对象的 TxRqst 位将复位。

      移位寄存器中的仲裁和控制位(标识符+ IDE + RTR + DLC)存储在消息 RAM 中的消息对象中、并设置该消息对象的 NewDAT 位。 消息对象的数据字节保持不变

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ Wang、

    感谢您的回答。  

    但是、我的当前应用需要3个具有自动回复功能的远程帧以及数据 Tx 和数据 Rx 帧。

    发生的情况是、每当远程请求到来时、缓冲区的自动回复(IF1数据寄存器位)都会在总线上传输、但根据缓冲区中的不同事件、缓冲区中的数据将被更新(这里的仲裁位也根据远程请求的消息 ID 进行更新)、并且新数据应作为远程帧的自动回复发送。

    上述场景可以正常工作、直到总线上有数据帧并使用 can.c 文件中的 can_sendMessage API 将数据传输到总线。

    在总线上传输数据帧后、自动响应停止工作、对于远程请求、没有响应。

    这可能是由于某些寄存器配置损坏、尝试在写入 IF1寄存器之前和之后禁用和启用中断、但行为保持不变。

    期待您对我们缺失的内容做出回应。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sonali:

    请检查远程帧和数据帧的 IFxCTL 寄存器的 EmptEn 位、以确保"远程启用"位未清零。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sonali:

    传输第一个数据帧后、您需要使用新数据、ID、门架和 RmtEN 来更新数据帧。