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.

[参考译文] TMS320F28P650DK:MCAN 通信 — 接收经典 CAN 时出现问题

Guru**** 2694555 points

Other Parts Discussed in Thread: TMS320F28P650DK

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1600190/tms320f28p650dk-mcan-communication---issue-receiving-classic-can

器件型号: TMS320F28P650DK

您好 e2e 社区:  

我正在与 TMS320F28P650DK 一起使用 MCAN 发送和接收经典 CAN 的工程配合使用。  使用演示程序、器件可不会出现问题地发送到 CAN 分析仪。  该问题与接收操作有关。  所有接收 (mcan_ex4_receive.c、mcan_ex8_range_filter_receive.c 和 mcan_ex10_receive_multiplex_buffers.c) 只编译、运行和接收 1 条消息(在存储器中已验证)、但随后的数据不会触发后续 ISR。  使用 MSO、第一个 CAN 帧从分析仪传输、而 ACK 通过 THR P650 传输。  下一帧会被发送、但被处理器忽略、因此分析仪会继续重新发送。   该代码在 Launchpad 上运行、并根据 TI 文档进行配置。  

这似乎是 e2e 论坛上的一个常见讨论点、希望提供一些建议、因为演示代码无法执行。   

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

    您好、Scott:

    请注意,由于节假日,专家可能会在接下来的两周内离职。 感谢您的耐心。

    此致、

    Aj Favela.  

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

    嘿、Scott、

    我们可以发现、当前的 MCAN SDK 示例使用不合理的默认位时序配置(615MPBS 标称/数据比特率)。 您能否确认测试中使用的位时序配置? 将 CAN 总线节点连接在一起使用哪种类型的布线?

    有关所需的时序计算、请参阅前面的文章。
    (+)【常见问题解答】TDA4VM:CAN:如何计算 CAN 的比特率 — 处理器论坛-处理器 — TI E2E 支持论坛

    TI 还提供了以下参考资料、用于根据系统 CAN 总线要求/实现计算所需的位时序参数。

    用于 CAN 位时序参数的计算器 —  https://www.ti.com/lit/sprac35

    MCAN 位时序计算器- /cfs-file/__key/communityserver-discussions-components-files/171/MCAN_5F00_BitTimingCalculator-for-classic-example.xls

    此致、

    Zackary Fleenor

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

    您好、Zackary、


    感谢您提供这些资源。  我会看看它们。  对于时序、参数如示例应用中所定义:

       bitTimes.nomRatePrescalar  = 0x3U;//标称波特率预分频器。
       bitTimes.nomTimeSeg1       = 0x9U;// SP 之前的标称时间段
       bitTimes.nomTimeSeg2       = 0x8U;// SP 之后的标称时间段。
       bitTimes.nomSynchJumpWidth = 0x8U;//标称 SJW
       bitTimes.dataRatePrescale = 0x1U;//数据波特率预分频器。
       bitTimes.dataTimeSeg1      = 0x9U;// SP 之前的数据时间段
       bitTimes.dataTimeSeg2      = 0x8U;// SP 之后的数据时间段
       bitTimes.dataSynchJumpWidth = 0x8U;// Data SJW

    我以 200MHz 的频率运行、使用 SYSCTL_MCANCLK_DIV_5。

    p650 和 28388 使用这些参数均能正常传输。  接收到一条消息时(使用提供的不同代码)、正确接收一条消息、但不会在出现新数据时重新触发。   总线长度小于 10cm、为直线并正确端接。   

    对于 28388、从 RAM 读取数据后清除 MCAN_clearNewDataStatus 似乎会使其取得进展、但仍然随机地停止确认。  对于 p650、这没有任何区别。

    任何方向都将不胜感激。

    谢谢!

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

    嘿、Scott、

    感谢您确认此信息。 我建议根据计算器提供的值、针对特定的预期标称和数据比特率重新定义时序参数。 不依赖示例中提供的默认值。

    您是否还能确认 MSO 的时序参数或用于发送/监控 CAN 总线的任何工具?

    此致、

    Zackary Fleenor