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.

[参考译文] TMS320F28P659DK-Q1:F28P65x 上的 MCAN 接收问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1586943/tms320f28p659dk-q1-mcan-receive-issue-on-f28p65x

器件型号: TMS320F28P659DK-Q1

尊敬的团队:

我目前正在  F28P65x 器件上测试 MCAN 接收示例 (mcan_ex4_receive)。 该设置涉及 F28P65x 和 Xilinx Zynq-7000 板之间的 CAN 通信。

发送路径已成功验证 — 从 F28P65x 发送的消息已在 Zynq-7000 上正确接收、并使用 candump 进行确认、 以便已知硬件连接良好。

但是,当我运行接收示例 (mcan_ex4_receive) 并使用以下命令从 Zynq 发送 CAN 消息时:
CAN 发送 CAN0 444#1122

不会触发接收中断。 我在 ISR 中放置了一个计数器来监控接收到的消息数量、但计数器值不会递增(通过 CCS 中的表达式窗口进行验证)。

您能否就可能的原因或需要执行的其他检查提供您的见解或建议?

感谢您的支持。

此致、
Nigesh

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

    您好、Nigesh、

    感谢您描述了此处的情况。 您能否提供使用的 example.syscfg 和 main.c 文件?

    您能否提供有关函数“CANsend CAN0 444#1222“的更多详细信息?

    您需要标准 ID 还是扩展 ID? 您的 RX 过滤器是否已正确配置为接受适当的 MSG ID 对象?

    您是否使用 MCAN RX 缓冲区或 FIFO 结构来存储接受的消息(进而触发相关的接收中断)?

    两个控制器是否都配置了匹配的位时序参数?

    如果这些配置中的任何一种不正确、F28P65x MCAN 控制器将不接受 CAN 总线上的消息(由 Zynq-7000 发送)、不会触发中断、并且计数器值不会递增。

    此致、

    Zackary Fleenor

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

    您好、Nigesh、

    感谢您提供这些信息、这对您有所帮助。

    我想您尝试一下、不是依赖使用“bitrate -x“属性时完成的自动配置、而是手动定义所有时序参数、以与 F28P65x 的时序参数完全匹配。

    https://www.kernel.org/doc/html/latest/networking/can.html#setting-the-can-bit-timing

    您还可以使用再次检查自动计算的参数

    ip -details link show can0

    MCAN_FIFO 元素大小似乎设置为 8GB、但在 main () 中、dataBytes 设置为 64。 总线上预期的元素大小和数据字节数是多少?

    下面的文档很好地说明了如何使用 MCAN 外设以及过滤器 ID 和 MSG RAM 配置的说明。

    https://www.ti.com/lit/an/spracu9/spracu9.pdf

    此致、

    Zackary Fleenor

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

    尊敬的 Fleenor:

    我相信两侧的比特率配置都没有问题。 这是通过使用 mcan_ex7_classive_transmit.c 示例从 F28P65x 传输数据并通过在 Zynq-7000 上成功接收数据来验证的candump can0 (can utility)mcan_ex7_classive_transmit 中使用的相同比特率设置 也用于当前测试的代码、我在上一个回复中附加了这些代码。

    关于元素大小、由于我使用的是传统 CAN、因此我期望有效载荷大小为 8 字节、并相应地配置 RX 缓冲器元素大小。

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

    尊敬的 Bala:

    在这两种情况下、您能否为“IP 详情链接 show CAN0“提供 Zynq-7000 的输出?

    您如何计算初始位时序参数? 您是否使用示例中的默认值?

    此致、

    Zackary Fleenor

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

    尊敬的 Fleenor:


    1.

    f28p65x 的 TX:


    //
    //初始化位时序。
    //
    bitTimes.nomRatePrescalar = 0x3U;//标称波特率预分频器
    bitTimes.nomTimeSeg1 = 0x9U;// SP 之前的标称时间段
    bitTimes.nomTimeSeg2 = 0x8U;// SP 之后的标称时间段
    bitTimes.nomSynchJumpWidth = 0x8U;//标称 SJW


    f28p65x 中的 RX:  

    //
    //初始化位时序。
    //
    bitTimes.nomRatePrescalar = 0x3U;//标称波特率预分频器
    bitTimes.nomTimeSeg1 = 0x9U;// SP 之前的标称时间段
    bitTimes.nomTimeSeg2 = 0x8U;// SP 之后的标称时间段
    bitTimes.nomSynchJumpWidth = 0x8U;//标称 SJW

    2.

    您如何计算初始位时序参数? 您是否使用示例中的默认值?

    是的、我使用示例中的默认位时序参数  

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

    您好、Bala、

    感谢您提供此附加信息、并对 假期期间的延迟回复深表歉意。

    您是否能够探测 CAN_H/L 和 MCAN_RX/TX 引脚、以在 F28P65x 上进行发送和接收测试、并提供活动通信的示波器快照。 我想了解数据是否从 Zync 正确传输到总线上。 如果除 F28P65x 之外还有另一个接收器(例如第二个 Zync 器件或第三方 USB2CAN 集线器)、则传输时是否正确接收数据?

    此致、

    Zackary Fleenor

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

    尊敬的 Fleenor:

    请在下面找到 CAN_H/L 和 MCAN_ RX/TX 信号的示波器屏幕截图  

    CAN_H 和 CAN_L:  



    MACN_RX 和 MCAN_TX:  




    关于您关于验证 Zynq 变速箱的问题:
    是、从发送 CAN 帧 Zynq 电路板 A 已成功接收 Zynq 电路板 B 在同一总线上进行验证(使用 candump CAN0 进行验证)。



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

    您好、Bala、

    感谢您提供此信息。 从显示的内容来看、信号看起来正常。

    您是否能够在不使用 Zynq 电路板的情况下将和 F28P65x 连接到另一个 F28P65x 并测试这两者之间的通信?

    Zynq 和 F28P65x 之间的时序参数似乎与您分享的参数并不一致。

    比特率:49999 = 50Mbps

    采样点= 0.875

    tq = 250

    螺旋段= 3

    phaseseg1 = 3 (VS nomTimeSeg1 = 9)

    phaseseg2 = 1 (VS nomTimeSeg2 = 8)

    SJW = 1 (VS nomSynchJumpWidth = 8)

    Brp = 26

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    bitTimes.nomRatePrescalar = 0x3U;//标称波特率预分频器
    bitTimes.nomTimeSeg1 = 0x9U;// SP 之前的标称时间段
    bitTimes.nomTimeSeg2 = 0x8U;// SP 之后的标称时间段
    bitTimes.nomSynchJumpWidth = 0x8U;//标称 SJW

    您能否对 Zynq CAN 时序参数进行硬编码以匹配 F28P65x 的时序参数?

    此致、

    Zackary Fleenor