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:TMS320F28P650DK9和 ZC702之间的 CAN 通信问题(Xilinx APSOC)

Guru**** 2463330 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1494342/launchxl-f28p65x-can-communication-issue-between-tms320f28p650dk9-and-zc702-xilinx-apsoc

器件型号:LAUNCHXL-F28P65X

工具/软件:

我遇到了 CAN 通信问题 TI F28P65x LaunchPad Xilinx Zynq-7000 SoC ZC702评估套件 。 以 can_ex5_transmit_receive 为例并在 F28P65x 中运行它。ZC702上未收到来自 F28P65x 的 CAN 消息、如所示。 candump下面是我的设置的详细信息

硬件设置:

MCU: TI F28P65x LaunchPad

APSoC: Xilinx ZC702

连接:

   CAN_H (F28P65x)→CAN_H (zc702)
   CAN_L (F28P65x)→CAN_L (zc702)
   GND (F28P65x)→GND (zc702)

比特率:  两种器件上均为100000bps  


问题:


1.是否存在任何连接错误?
2.我需要检查此 CAN 通信的任何其他事项? 以及如何进一步调试该问题?

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

    尊敬的 Bala:

    您能否确认 JP9已短路/连接、以确保该接收器节点的 CAN 总线上插入了端接电阻?

    尝试在两个器件之间进行通信时、能否提供 CAN_H/CAN_L 信号的示波器快照? 这将有助于 更深入地了解故障并帮助我们采取后续步骤。

    此致、

    Zackary Fleenor

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

    尊敬的 Fleenor:

    是、JP9短接。

    关于 F28P65x 和 ZC702之间的通信、ZC702成功接收到从 F28P65x 发送的 CAN 消息。 但是、反向操作无法正常工作、F28P65x 未接收到从 ZC702发送的消息。

    我在下面附上了示波器屏幕截图。 请回顾并提供您的见解。


    在从 f28p65x 发送数据到 zc702时、检测 f28p65x 上的信号
     




    在将数据从 zc702发送到 f28p65x 时、探测 f28p65x 上的信号




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

    感谢您提供这些详细信息。

    我现在注意到的一点是、CAN_H/CAN_L 上的电压阈值:

    f28p65x 至 zc702:0.8V 至2.4V

    zc702至 p28P65x:2.5V 至3.8V ***这将导致错误

    该2.5V 信号不会被识别为 CAN 总线上的隐性位。

    有关调试的后续步骤、请参阅以下有关调试 CAN 物理层的文档。

    调试控制器局域网(CAN)物理层的基础知识-https://www.ti.com/lit/slyt529

    此致、

    Zackary Fleenor

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

    尊敬的 Fleenor:

    现在、当我要在两个 f28p65x LaunchPad 之间进行通信时。我采用 can_ex5_transmit_receive 示例、然后在 调试模式下以调试模式刷写一个板中的 Rx 和另一个板中的 TX 当我尝试发送数据时、它将进入中断函数的无限循环。(使用打印进行检查)

    __中断无效
    canaISR (void)

    uint32_t 状态;

    //
    //读取 CAN-B 中断状态以查找中断原因
    //
    status = can_getInterruptCause (cana_base);

    printf ("can_getInterruptCause =%lu\n"、status);

    //
    //如果原因是控制器状态中断、则获取状态
    //
    IF (STATUS == CAN_INT_INT0ID_STATUS)

    //
    //读取控制器状态。 这将返回状态字段
    //可以指示各种错误的错误位。 错误处理
    //为简单起见、此示例中未执行。 请参阅
    // API 文档、了解有关错误状态位的详细信息。
    //读取此状态的行为将清除中断。
    //
    status = CAN_getStatus (Cana_base);

    //
    //检查是否发生错误。
    //
    ifdef 传输
    if (((status &~(CAN_STATUS_TXOK))!= CAN_STATUS_LEC_MSK)&&
    ((status &~(CAN_STATUS_TXOK)!= CAN_STATUS_LEC_NONE)))
    #else
    if (((status &~(CAN_STATUS_RXOK))!= CAN_STATUS_LEC_MSK)&&
    ((status &~(CAN_STATUS_RXOK)!= CAN_STATUS_LEC_NONE)))
    #endif

    //
    //设置一个标志以指示可能发生了一些错误。
    //
    errorFlag = 1;   
    }
    }

    硬件连接:  

    JP9短接、CAN_H 短接至 CAN_H、CAN_L 短接至 CAN_L、GND 短接至 GND  


    注意:当我尝试打印状态变量时、我得到 32768 (can_getInterruptCause = 32768、这张打印稿 是连续打印的)


    请让我知道我在这里犯了什么错误

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

    大家好、我没有注意到共享代码中有任何明显的错误。

    与之前类似、您是否可以在执行期间提供 CAN_H/CAN_L 和 CAN_TX/CAN_RX 信号的示波器截图?

    您能解释一下它如何在中断函数中进入无限循环吗? 是代码停止运行或开始在 ISR 内部循环运行、还是连续触发 ISR 并连续完成并重复整个 ISR?

    此致、

    Zackary Fleenor

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

    尊敬的 Fleenor:
            发现这个问题是由硬连接错误引起的,一旦它被修复了中断  ,正确点击,问题得到解决。现在我有一个疑问,我试图接收一个 CAN 消息没有指定 msgid 通过给它0和掩码值0 ,但无法接收消息.(注意使用相同的 can_ex5_transmit_receive 示例)

    TX 消息对象:

    can_setupMessageObject (Cana_base、TX_MSG_OBJ_ID、0x15555555
    CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_TX、0、
    CAN_MSG_OBJ_TX_INT_ENABLE、MSG_DATA_LENGTH);

    Rx 消息对象:

    can_setupMessageObject (cana_base、RX_MSG_OBJ_ID、0、
    CAN_MSG_FRAME_EXT、CAN_MSG_OBJ_TYPE_RX、0、
    CAN_MSG_OBJ_RX_INT_ENABLE、MSG_DATA_LENGTH);

    如上所示、这是我设置 TX、Rx 消息对象的方式。请让我知道我在这里犯了什么错误  

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

    嗨、Bala、

    很高兴您能够解决原始问题。 您能否提供有关硬件连接错误和实现的修复的更多详细信息?

    此外、为了保持内容井然有序且易于访问、您是否想为您遇到的这个 msgid=0问题创建一个新的 E2E 主题?

    我们希望帮助解决新问题、但不希望在用于解决其他问题的线程中丢失信息。

    谢谢。此致、

    Zackary Fleenor

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

    尊敬的 Fleenor:

            实际上,这不是一个连接问题,该问题是由在启动板之间的连接中使用的跳线故障引起的。我也为 msgid 问题创建了一个新的 E2E 主题。


    谢谢。此致、
    Bala Nigesh