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-F280039C:CANFd 总线关闭

Guru**** 2465700 points
Other Parts Discussed in Thread: LAUNCHXL-F280039C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1494876/launchxl-f280039c-canfd-bus-off

器件型号:LAUNCHXL-F280039C

工具与软件:

嗨、团队:

调试 canfd 发送时出现问题

  1. 调试:

演示板:LAUNCHXL-F280039c

使用例程 mCAN Ex9 transmit.c.不要 在例程中更改 mCAN 的配置。 使用500kbps 的标称比特率和1Mbps 的数据比特率。

修改发送程序、以以以1s 的间隔发送一帧数据。

发送数十个数据后、canfd 进入总线关闭状态、因为 MCAN_ECR.TEC > 255。

当 I SET brs = 0时、 将使用1Mbps 标称比特率和1Mbps 数据比特率。 即使以1ms 的间隔发送一帧数据、CANFD 也可以正常运行  

起初、我怀疑 canfd_rx 自检由于接收延迟而出现异常。  

但我计算得出、canfd_rx 自检不应该是问题

理论采样点可以根据采样点设置进行计算

标称 SP =(bitTimes.nomTimeSeg1 + 1)/(bitTimes.nomTimeSeg2 + 1 + bitTimes.nomTimeSeg1 + 1)=(9 + 1)/(9 + 1 + 8 + 1)= 10/19≈52.6%

数据 SP ≈52.6%

示波器捕获大约100ns 的总线延迟时间、黄色-> canfd_tx、绿色-> canfd_rx

当设置 brs = 1时、  

500kbps 的标称比特率、1位时间= 2000ns、因此标称 SP 应为2000ns * 0.526 - 100ns =952ns

1Mbps 的数据比特率、1位时间= 1000ns、因此 数据 SP 应处于1000ns * 0.526 - 100ns = 426ns

根据数据、不应有发送数据错误计数

我不太明白、为什么在启用 brs 后出现总线关闭状态

2.问题

我不确定我的计算是否正确、如果不正确、您能解释一下吗。

为什么启用 brs 后出现总线关闭状态? 有什么方法可以解决这个问题、您能帮助对其进行调试吗?

谢谢!

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

    您好!

    您能否检查 MCAN_ECR 寄存器的内容、以了解在 CAN 总线进入总线关闭状态之前哪些错误正在累积?  使用 mcan_ex9_transmit 示例(brs PCAN=1;500Kbps NOM;1Mbps 数据-原始测试设置)时、我没有遇到任何总线关闭情况。

    此致、

    Joseph

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

    您好、Joseph、á lez

    这是 ECR 寄存器中的信息、TEC 寄存器几乎被填满

        //
        // Configure the MCAN Module.
        //
        MCANConfig();
    
        while(1)
        {
            //
            // Write message to Message RAM.
            //
            MCAN_writeMsgRam(MCANA_DRIVER_BASE, MCAN_MEM_TYPE_BUF, loopCnt,
                             &txMsg[loopCnt]);
    
            //
            // Add transmission request for Tx buffer 0
            //
            HWREG(MCANA_DRIVER_BASE + MCAN_TXBAR) = 0x00000001;
    
            //
            // Wait till the frame is successfully transmitted (and ACKnowledged)
            // "Tx Buffer Transmission Occurred" register is polled.
    
            while(HWREG(MCANA_DRIVER_BASE + MCAN_TXBTO) == 0x00000000)
            {
            }
    
            DEVICE_DELAY_US(1000000);
    //        //
    //        // Stop Application.
    //        //
    //        asm("   ESTOP0");
        }

    在示例中将单次发送更改为每1发送一次

    PC 工具接收到数十个数据后、CAN 进入总线关闭状态

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

    您好!

    递增误差是在传输期间的 TEC。  如果出现传输错误、该计数器会递增;如果任何接收节点没有发送 ACK、则会发生传输错误。  当 BRS=0时、接收节点(GCAN)能够正确接收所有数据、这意味着 GCAN 能够针对所有以1Mbps NOM 和数据速率发送的帧发回 ACK。  您能否检查 GCAN 设置以确保在 BRS=1时、NOM 位设置为500Kbps、数据速率也为1Mbps?  这应该与 LaunchPad 上的 MCAN 设置一致、否则 GCAN 可能无法为标称速率为500Kbps、数据速率为1Mbps 的发送帧发送 ACK 信号。

    此致、

    Joseph  

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

    您好、Joseph、á lez

    您是否是说由于 GCan 工具无法回复每帧的 ACK 位、TEC 计数可能已增加?

    由于 GCan 工具的功能不理想、因此它无法在 Canfd 模式下显示错误帧信息、因此我抓取了一些错误帧数据波形

    数据长度= 1;

    DATA[0]= 0x01;

    txMsg[loopCnt].mm    = 0x81U;

    黄色:CAN-RX;

    绿色:CAN-TX;

    蓝色:CANL-H;

    在这张图片中、第四个发送成功了

    波形扩展如下:

    第一帧:

    第二、发展的 框架

    第四 

    第一个帧 似乎是数据帧错误或 CRC?

    第二个、从前的 帧 似乎 是 最后几位错误、是 ACK 还是其他?

    第四个 帧 是完整的正确帧

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

    您好!

    在示波器屏幕上识别框架的部件有点困难。  不确定您使用的示波器是否能够解码 CAN 帧。  大多数示波器都具有此功能、这在识别错误时非常有用。  请参见应用手册 SPRACE5中使用的示波器截图示例 。  还有一个示例显示了 ACK 的工作方式。  应用手册中的框架图示适用于 DCAN、但也适用于 CAN-FD。  控制字段存在细微差异、其余部分相同。  最好能使用示波器的功能来解码 CAN 帧。

    此致、

    Joseph