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.

[参考译文] TMS570LS1224:与 DCAN 的2个微控制器连接不起作用、接收器无法接收消息

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/595000/tms570ls1224-2-microcontrollers-connection-with-dcan-does-not-work-receiver-cannot-receive-message

器件型号:TMS570LS1224

大家好。 我有2个微控制器、并且希望在这两个微控制器之间进行 DCAN 通信。 我使用 CAN 收发器 MCP2551、所有硬件均已正确接线。 我认为这应该是软件问题。

我按照官方 TI 培训提供的教程进行操作、但该教程不起作用。

发送代码的主要部分是

   canInit();
   canTransmit (canREG1、canMESSAGE_BOX1、TX_DATA);
   while (1);

接收器代码的主要部分是

   canInit();
   while (!canIsRxMessageArrived (canREG1、canMESSAGE_BOX1));
   while (1);    //在此处设置断点、它不执行

正如我在注释中所说、我在 while (1)处设置断点;当我传输时、它不执行。

我使用示波器对其进行故障排除、首先、我检查传输微控制器的 Tx 引脚、然后发出数据。 我检查接收微控制器的 Rx 引脚是否存在数据接收。 但是、它不执行断点行。

我查看技术文档、我认为应该是初始化问题还是 CAN 协议问题? 或者、您能给我一些关于如何解决问题的想法吗? 我怀疑驱动程序代码有问题,canTransimit(...) 功能实现错误? 如何通过直接访问 CAN RAM 来发送消息和接收消息? 可以提供一些示例代码吗?

请提供帮助、谢谢。

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

    DCAN 的设计方式无需直接访问 CAN RAM。 这有助于避免 DCAN 逻辑和 CPU 之间的冲突。 为了执行发送和接收功能、我们包含了 IFx 寄存器、以允许 CPU 在 CAN 活动通信期间访问这些寄存器。

    对于此问题的调试、确实有必要尝试几项回到基础知识的内容。 首先、我建议您将 CAN 配置为环回模式、以将外部硬件和第二个器件从图片中取出。 这将使您只能关注您拥有的软件、而不能关注任何外部影响。

    如果您愿意、您可以将代码发布到该线程、我可以查看我是否可以看到任何内容。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您的回答。

    根据您的建议,我尝试了 DCAN1与 DCAN2通信,这是成功的! 我不知道为什么我无法在2个相同的 LaunchPad 和 DCAN1之间进行通信? 这是比特率问题还是其他问题? 我将它们保留为默认值、即500。

    我的代码的主要部分是这里、

    变速器

     canInit();

    canTransmit (canREG1、canMESSAGE_BOX1、TX_DATA);

    while (1);

    接收器:

    canInit();

    while (!canIsRxMessageArrived (canREG1、canMESSAGE_BOX1)); //对于 DCAN 1至 DCAN 2,代码将 canREG1替换为 canREG2

    while (1);     //此处的断点、如果在2个 LaunchPad 之间进行通信、则不执行、但如果在 DCAN1和 DCAN2之间的1个 LaunchPad 上执行!

    非常感谢。

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

    Joe、

    这很可能是硬件问题。 您是否具有用于两个 Launchpad 的收发器以及用于这两个 LaunchPad 的正确终端器? 布线也应采用双绞线。

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

    您好、Chuck。 这真的很有趣。 当我使用连接在 PC 和 Launchpad 之间的 TI 原始 USB 电缆时、我无法接收 CAN 消息。 当我使用朋友的移动充电器电缆连接 PC 和 Launchpad 时,我会收到消息!!! 当我更换回 TI 的原始电缆时、我无法再收到!

    我不知道为什么。 如果我使用两根不同的 USB 电缆、是否可能会因 PC 的不同支持电压而导致?

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

    我对这篇文章非常困惑。 您正在使用 USB 电缆进行 CAN 通信? 除非您正在引用其他节点(PC) CAN 适配器硬件之间的电缆、否则这是相当不正统的。 无论如何、很可能是电缆内存在缺陷、未充分屏蔽或内置有干扰滤波器。 很高兴听到您已将无法沟通的原因隔离开来。