工具/软件:
您好、
我需要对远程帧和数据帧使用相同的三个 CAN ID。
当我收到远程帧时、需要检查 ID、并据此发送具有相同 ID 的数据帧。
在第一次迭代中、我接收到一个远程帧并发送一个具有相同 ID 的数据帧。
在下一次迭代中、我不会接收远程帧(接收中断即将到来、而不是消息对象中断)。
如果我使用任何其他 ID 发送数据帧、则能够接收远程帧。
- 是否知道导致此问题的原因?
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.
工具/软件:
您好、
我需要对远程帧和数据帧使用相同的三个 CAN ID。
当我收到远程帧时、需要检查 ID、并据此发送具有相同 ID 的数据帧。
在第一次迭代中、我接收到一个远程帧并发送一个具有相同 ID 的数据帧。
在下一次迭代中、我不会接收远程帧(接收中断即将到来、而不是消息对象中断)。
如果我使用任何其他 ID 发送数据帧、则能够接收远程帧。
尊敬的 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寄存器之前和之后禁用和启用中断、但行为保持不变。
期待您对我们缺失的内容做出回应。
谢谢。