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.

[参考译文] TMS320F28379D:LAUNCHXL-F28379D

Guru**** 2460850 points
Other Parts Discussed in Thread: LAUNCHXL-F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1499074/tms320f28379d-launchxl-f28379d

部件号:TMS320F28379D
主题中讨论的其他器件:LAUNCHXL-F28379D

工具/软件:

您好、

我正在使用  LAUNCHXL-F28379D 进行 CAN 通信。

我使用了示例代码 can_ex2_loopback_interrupts  、其中我通过对中断进行注释并使用 can_msg_obj_no_flags 配置 can_setupMessageObject 来绕过所有中断。

我尝试在不使用中断的情况下发送 CANopen SDO 数据包、并 探测了 CAN_H 和 CAN_L 我观察到、SDO 数据包只有在从 main 函数退出后才会传输、并且它会连续传输、尽管没有 while 循环或无限 for 循环位于 main 函数内部、没有调用中断 、并且在其他示例代码中也具有相同的行为。 此外,在发送各种其他函数,如 NMT handle 和 PDO 配置数据包被多次传输,这会导致 CANopen 实现中的问题。
我想逐个发送数据包,因为我必须实现完整的 CAN 开放协议,以及为什么数据包只在退出主循环后才发送,为什么不立即在函数调用后,并因此有问题在 CANopen 实现和为什么传输是在并发无限循环发生,即使在从电机驱动器接收确认后.
请提供有关这些问题的说明,这是一个错误还是为什么要观察此行为 。 我只提供基本代码。

请将其列为最高优先事项,我也已在早些时候发布。

代码截图附在下面以供参考。  

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

    尊敬的 Kumar:

    我不知道 CANopen 在您的设置中是如何工作的。  

    根据 CAN 规范、CAN 提供一种机制来 自动重新传输 仲裁失败或在传输过程中受到错误干扰的消息。

    默认情况下、启用此自动重传功能。 可以通过设置 CAN 控制寄存器中的位 DAR (禁用自动重传)来禁用该功能。

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

    如果启用了自动重传功能、请提供与 LAUNCHPADXL-TMS28379D 相对应的特定寄存器设置和详细信息。 即使从电机收到确认后,它是重新传输数据,这是主要的问题。 请提供澄清。

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

    此外,我通过设置 DAR 位检查了简单传输示例,但它正在重新传输,即使在这之后. 我还清除了 自动总线开启(ABO)位。

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

    尊敬的 Kishor:

    正如  Chirag 在另一个线程中提到的、您可能需要尝试 TI 推荐的4P 中的 CANopen 协议栈、例如 Simma 软件协议栈。

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

    好的、我将尝试使用 TI 推荐的4P CANopen 协议栈。 此外,我能够停止在环回中断示例通过设置 DAR 位重新传输.

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

    我已经解决了 DAR 寄存器设置的重新传输问题、但问题是 只有在退出主函数后才传输数据包。 此外,如果我必须发送多个 SDO,PDO 数据包,然后在 CRO 上的数据是反射只有在退出主循环后. 此外、在处理各种索引时、如果在函数调用后未发送数据包、如何观察各种数据包及其确认。 请说明如何解决此问题以及出现此问题的原因。

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

     我观察到 SDO、PDO、NMT 任何 CANopen 数据包只有在退出主函数后才会传输。 请澄清这一点。

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

    如果在 PDO_Config ()之后添加 while (1)循环或大延迟,会发生什么情况?

    PDO 是否会发送请求并等待其他节点的响应、然后再发送消息?