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.

[参考译文] TMS570LC4357:TMS570LC43 Launchpad (CAN1 至 CAN2) 中的 CAN 通信环回问题

Guru**** 2692745 points

Other Parts Discussed in Thread: SN65HVD230

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1598775/tms570lc4357-can-commincation-loopback-issue-in-tms570lc43-launchpad-can1-to-can2

器件型号: TMS570LC4357
Thread 中讨论的其他器件: HALCOGENSN65HVD230、SN65HVD230M-SN65HVD230 EP

HII TI 社区、

我在 TMS570 中使用 CAN 协议、Im 尝试在同一 Lauchpad 内进行外部环回。 我已经完成了内部环回测试、它可以正常工作。  

对于外部环回、

Im 尝试从 CAN1 发送数据并在同一个 LaunchPad 中从 CAN2 接收数据。

在使用 2 个 CAN 收发器的 b/w 中、连接类似于:
1) 收发器 1 的 can1tx 至 D、can1rx 至 R、Vcc 和 GND 已连接。
2) 通过 120 Ω 电阻器连接 CANH 到 CANH 和 CANL 到 CANL。

3) can2tx 至 Tranceiver2 的 D、can2rx 至 R、VCC n GND 已连接。

我使用中断模式。

不知道什么问题,它不工作,在发送后无法看到中断,无法接收数据

代码:
 canInit();
 sciInit();

enable_IRQ_INTERRUPT_();

  canTransmit (can_TESTPORT1、canMESSAGE_BOX1、TX_data1);

 while (1)
      {
        if (RECEIVE_STATUS==0xFF)
        {
          canGetData (can_TESTPORT2、canMESSAGE_BOX1、rx_data1);/*复制到 RAM */

          sciDisplayData (sciREG1、rx_data1、sizeof (rx_data1));

          RECEIVE_STATUS=0;
        }
      }

void canMessageNotification (canbase_t *节点、Uint32 MessageBox)

  if (((node==CAN_TESTPORT2)||(node==CAN_TESTPORT1))
  {
    //while(!canIsRxMessageArrived (canREG2、canMESSAGE_BOX1));
    RECEIVE_STATUS=0xFF;
  }

Halcogen files.zip 

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

    尊敬的 Sandeep:

    在 b/w im uisng 2 CAN 收发器中,连接类似:
    1) 收发器 1 的 can1tx 至 D、can1rx 至 R、Vcc n GND 已连接。

    LaunchPad 和 CAN 收发器之间是否存在共地?

    如果 CAN 收发器使用不同的电源、请确保将 CAN 收发器的 GND 与 LaunchPad 的 GND 连接。

    --
    此致、
    Jagadish。

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

    尊敬的 Jagadish:

    连接正常、Im 使用它们并具有公共接地。

    关于工作的最新情况:


     canEnableloopback(canREG1, External_Lbk );

    1) 当我使用上述函数调用作为外部 LBK,与 1 IC 连接 CAN1tx 到 D, CAN1rx 到 R,不连接 CANH 和 CANL 引脚(保持开路),我能够发送和接收数据在中断模式. (CAN1 msgbox1 到 CAN1 msgbox2)、类似于内部环回。
    对于外部环回、这是否是合适的功能?

     canEnableloopback(canREG1, External_Lbk );

    canEnableloopback(canREG2, External_Lbk );

    2) 当我使用上述两个函数调用时、与我提到的第一条消息类似的 2 个 IC 连接、然后我能够正确生成中断、但我无法接收 rx_data 中的数据!、也通过逻辑分析仪检查、第一个 IC TX 和 CANH 引脚传输相同的信号、但第二个 IC 的 R 上不会显示任何内容。(CAN1 msgbox1 至 magx1)
    这是外部环回的确切功能吗?  

    此致、

    Sandeep Kalakota。

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

    关于这项工作的更多调查结果

    我们面临这个问题 在 DCAN1 的 CTL 寄存器中的 Init 位,在传输数据  canTransmit(can_TESTPORT1, canMESSAGE_BOX1, TX_data1) 之前;位值为 0,但传输后位值变为 1(进入初始化模式,使总线状态变为关闭,我们在错误通知中看到值=64。 第一次传输后可能导致此位值发生变化的原因是什么?

    共享传输之前和之后 Init 位值更改的图片。

    此致、

    Sandeep Kalakota。

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

    尊敬的 Sandeep:

    这是外部环回的确切功能吗?  [/报价]

    使用启用外部环回模式时canEnableloopback(canREG1, External_Lbk)、DCAN 模块在内部将 TX 信号路由回 RX 输入 产生电流 。 但是、您所遇到的行为本质上类似于内部环回、因为:

    1. 外部环回模式 旨在通过实际引脚路由信号来测试 TX/RX 引脚 I/O 电路。
    2. 在未连接 CAN 收发器(或 CANH/CANL 处于开路状态)的情况下、信号路径为:CAN 内核 TX→CAN_TX 引脚→CAN_RX 引脚→CAN 内核 RX
    3. 这测试引脚电平电路、但 不测试整个 CAN 总线通信路径

    与内部环回的主要区别:

    • 内部环回 :信号从不离开 CAN 核心(纯内部反馈)
    • 外部环回 :信号通过物理 TX 和 RX 引脚、但在内部返回

    您遇到的问题是由于外部环回模式的根本误解造成的:

    外部环回模式不适用于两个单独 CAN 节点之间的通信。 以下是安装失败的原因:

    1. 外部环回模式 将 TX 路由回 RX 节点中
    2. 当两个节点都处于外部环回中时,每个节点都循环回自身 — 它们不会相互通信
    3. CAN 收发器可能正在发送、但接收节点的 RX 在内部连接到自己的 TX、而不是连接到总线

    对于双节点通信、您应该:

    • 删除环回模式 并行接口
    • 应用 正常 CAN 模式 (非环回)
    • 使用 CANH 和 CANL 将两个收发器正确连接到 CAN 总线
    • 确保总线两端使用正确的 120Ω 端接电阻器
    第一次传输后此位值发生了什么变化?

    Init 位是由 DCAN 模块自动设置的、因为它已进入 总线关闭状态 。 具体情况如下:

    1. 确认要求 :根据 CAN 协议,当一个节点传输帧时,它需要网络上至少一个其他节点的 ACK

    2. 无 ACK =错误 :在外部环回模式下、没有正确的 CAN 总线连接:

      • 发送节点会发送消息
      • 没有其他节点提供确认 (因为您处于环回模式或总线未正确配置)
      • CAN 控制器将其检测为错误
      • 发送错误计数器 (TEC) 递增
    3. 总线关闭条件

      • 如果 TEC 超过 255、则节点进入 总线关闭状态
      • DCAN 自动将 Init 位设置为 1
      • 这样可以防止进一步的 CAN 传输

    --
    此致、
    Jagadish。

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

    感谢 Jagadish 的回应,现在已经清楚地了解了环回模式。
    感谢您的讲解。

    现在如何 消除这个 No ACK 错误,就像连接正常,我不使用外部环回模式,这可能是什么问题? 是 CAN 收发器 IC 问题吗? 是连接问题吗? 是电阻问题吗?

    如何重新爱上这个? 为什么没有其他节点发送 ACK?

    此致、
    Sandeep Kalakota。  

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

    尊敬的 Sandeep:

    您的事件序列:

    1. CAN1 发送一条消息
    2. CAN2 不确认该消息 (NO_ACK 错误)
    3. 对于每次失败的传输、CAN1 的发送错误计数器 (TEC) 都会递增 8
    4. 重复失败后、TEC 超过 255
    5. DCAN 自动进入总线关闭状态
    6. DCAN 自动设置 Init 位= 1 直接在 CTL 寄存器中完成
    7. 所有巴士活动均停止

    常见原因:

    1. 无端接电阻器 →消息未确认→传输错误
    2. 消息框中断未启用 生成的波形
    3. 消息框方向配置不正确、一个应为 Tx、另一个应为 Rx 方向。
    4. 消息 ID 不匹配 收发器和接收器之间的通信
    5. 未配置 VIM CAN 中断
    6. 位时序不匹配 CAN1 和 CAN2 之间

    如果这些设置正常、则表明 CAN 收发器存在问题。 再次验证 CAN 收发器连接? 您是否在使用 SN65HVD230 CAN 收发器?

    --
    此致、
    Jagadish。

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

    HII Jagadish,

    1) 对于端接电阻器、im 在 IC 两端使用 100 欧姆+ 20 欧姆串联 CANH 和 CANL
    2) 消息中断已启用。
    3) 消息框方向配置完美。 CAN1 msgbox1 作为 Tx、CAN2 msgbox1 作为 Rx
    4) CAN1 msgbox1 = 1 的消息 ID、对于 CAN2 msgbox1 =1、屏蔽 IIS、两者都是相同的
    5) 在 VIM 中启用 CAN1 High、CAN2 High
    6) 位速率=100kb/s、SP ref= 60、CAN1 和 CAN2 的标称位时序=10

    是的 、我使用 SN65HVD230M-VCC IC、对来自的两个 IC 使用公共接地和 EP。 使用跳线即可进行连接。

    此致、

    Sandeep Kalakota

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

    尊敬的 Sandeep:

    在您的连接中、电路板上的电阻器似乎没有连接。

    您可以看到连接的电路板上的绿线、但在原理图中、连接的电阻器线上没有电源?  

    因此、请再次确保连接。

    --
    此致、
    Jagadish。

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

    HII Jagadish,

    问题已解决。

    这些问题是:

    1) IC 引脚配置/连接错误。

    2) Rs 引脚不应保持断开(连接到 GND)

    谢谢你  

    此致、

    Sandeep Kalakota。