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.

[参考译文] TMDSCNCD280039C:280039C LaunchPad 在 CANFD BRS 模式下的 MCAN、帧为 fullerr。

Guru**** 2562120 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1571354/tmdscncd280039c-280039c-launchpad-the-mcan-at-canfd-brs-mode-the-frame-is-stufferr

零件号:TMDSCNCD280039C
主题:C2000WARE 中讨论的其他器件

工具/软件:

我的电路板是 280039C LaunchPad、我使用 MCAN 示例 mcan_ex9_transmit  t o 测试;

我发现 当我 设置 txMsg[loopCnt]. brs = 1U; 发生 canfd sugerr 时, 如果我设置  BRS 为 0,则没有 strufferr,数据成功发送;

版本为 C2000Ware_5_04_00_00;

此外,我用 sysysconfig 1.23 构建一个新项目,并通过 cputimer0 ISR 发送消息,情况是相同的,而我设置 txMsg[loopCnt]. brs = 0U;没有错误;

void myMCAN0_init(){
    MCAN_RevisionId revid_myMCAN0;
    MCAN_InitParams initParams_myMCAN0;
    MCAN_ConfigParams configParams_myMCAN0;
    MCAN_MsgRAMConfigParams    msgRAMConfigParams_myMCAN0;
    MCAN_BitTimingParams       bitTimes_myMCAN0;
    //
    // Initialize MCAN Init parameters.
    //
    initParams_myMCAN0.fdMode            = true;
    initParams_myMCAN0.brsEnable         = true;
    initParams_myMCAN0.txpEnable         = false;
    initParams_myMCAN0.efbi              = true;
    initParams_myMCAN0.pxhddisable       = true;
    initParams_myMCAN0.darEnable         = false;
    initParams_myMCAN0.wkupReqEnable     = false;
    initParams_myMCAN0.autoWkupEnable    = false;
    initParams_myMCAN0.emulationEnable   = false;
    initParams_myMCAN0.tdcEnable         = true;
    initParams_myMCAN0.wdcPreload        = 255;
    //
    // Transmitter Delay Compensation parameters.
    //
    initParams_myMCAN0.tdcConfig.tdcf    = 10;
    initParams_myMCAN0.tdcConfig.tdco    = 6;
    //
    // Initialize MCAN Config parameters.
    //
    configParams_myMCAN0.monEnable         = false;
    configParams_myMCAN0.asmEnable         = false;
    configParams_myMCAN0.tsPrescalar       = 15;
    configParams_myMCAN0.tsSelect          = 0;
    configParams_myMCAN0.timeoutSelect     = MCAN_TIMEOUT_SELECT_CONT;
    configParams_myMCAN0.timeoutPreload    = 65535;
    configParams_myMCAN0.timeoutCntEnable  = false;
    configParams_myMCAN0.filterConfig.rrfs = false;
    configParams_myMCAN0.filterConfig.rrfe = false;
    configParams_myMCAN0.filterConfig.anfe = 0;
    configParams_myMCAN0.filterConfig.anfs = 0;
    //
    // Initialize Message RAM Sections Configuration Parameters.
    //
    msgRAMConfigParams_myMCAN0.flssa                = myMCAN0_MCAN_STD_ID_FILT_START_ADDR;
    //
    // Standard ID Filter List Start Address.
    //
    msgRAMConfigParams_myMCAN0.lss                  = myMCAN0_MCAN_STD_ID_FILTER_NUM;
    //
    // List Size: Standard ID.
    //
    msgRAMConfigParams_myMCAN0.flesa                = myMCAN0_MCAN_EXT_ID_FILT_START_ADDR;
    //
    // Extended ID Filter List Start Address.
    //
    msgRAMConfigParams_myMCAN0.lse                  = myMCAN0_MCAN_EXT_ID_FILTER_NUM;
    //
    // List Size: Extended ID.
    //
    msgRAMConfigParams_myMCAN0.txStartAddr          = myMCAN0_MCAN_TX_BUFF_START_ADDR;
    //
    // Tx Buffers Start Address.
    //
    msgRAMConfigParams_myMCAN0.txBufNum             = myMCAN0_MCAN_TX_BUFF_SIZE;
    //
    // Number of Dedicated Transmit Buffers.
    //
    msgRAMConfigParams_myMCAN0.txFIFOSize           = 0;
    msgRAMConfigParams_myMCAN0.txBufMode            = 0;
    msgRAMConfigParams_myMCAN0.txBufElemSize        = 7;
    //
    // Tx Buffer Element Size.
    //
    msgRAMConfigParams_myMCAN0.txEventFIFOStartAddr = myMCAN0_MCAN_TX_EVENT_START_ADDR;
    //
    // Tx Event FIFO Start Address.
    //
    msgRAMConfigParams_myMCAN0.txEventFIFOSize      = myMCAN0_MCAN_TX_EVENT_SIZE;
    //
    // Event FIFO Size.
    //
    msgRAMConfigParams_myMCAN0.txEventFIFOWaterMark = 0;
    //
    // Level for Tx Event FIFO watermark interrupt.
    //
    msgRAMConfigParams_myMCAN0.rxFIFO0startAddr     = myMCAN0_MCAN_FIFO_0_START_ADDR;
    //
    // Rx FIFO0 Start Address.
    //
    msgRAMConfigParams_myMCAN0.rxFIFO0size          = myMCAN0_MCAN_FIFO_0_NUM;
    //
    // Number of Rx FIFO elements.
    //
    msgRAMConfigParams_myMCAN0.rxFIFO0waterMark     = 0; // Rx FIFO0 Watermark.
    msgRAMConfigParams_myMCAN0.rxFIFO0OpMode        = 0;
    msgRAMConfigParams_myMCAN0.rxFIFO1startAddr     = myMCAN0_MCAN_FIFO_1_START_ADDR;
    //
    // Rx FIFO1 Start Address.
    //
    msgRAMConfigParams_myMCAN0.rxFIFO1size          = myMCAN0_MCAN_FIFO_1_NUM;
    //
    // Number of Rx FIFO elements.
    //
    msgRAMConfigParams_myMCAN0.rxFIFO1waterMark     = 0; // Level for Rx FIFO 1
                                                  // watermark interrupt.
    msgRAMConfigParams_myMCAN0.rxFIFO1OpMode        = 0; // FIFO blocking mode.
    msgRAMConfigParams_myMCAN0.rxBufStartAddr       = myMCAN0_MCAN_RX_BUFF_START_ADDR;
    //
    // Rx Buffer Start Address.
    //
    msgRAMConfigParams_myMCAN0.rxBufElemSize        = 7;
    //
    // Rx Buffer Element Size.
    //
    msgRAMConfigParams_myMCAN0.rxFIFO0ElemSize      = 7;
    //
    // Rx FIFO0 Element Size.
    //
    msgRAMConfigParams_myMCAN0.rxFIFO1ElemSize      = 7;
    //
    // Rx FIFO1 Element Size.
    //
    //
    // Initialize bit timings.
    //
    bitTimes_myMCAN0.nomRatePrescalar   = 3; // Nominal Baud Rate Pre-scaler.
    bitTimes_myMCAN0.nomTimeSeg1        = 9; // Nominal Time segment before sample point.
    bitTimes_myMCAN0.nomTimeSeg2        = 8; // Nominal Time segment after sample point.
    bitTimes_myMCAN0.nomSynchJumpWidth  = 7; // Nominal (Re)Synchronization Jump Width Range.
    bitTimes_myMCAN0.dataRatePrescalar  = 1; // Data Baud Rate Pre-scaler.
    bitTimes_myMCAN0.dataTimeSeg1       = 9; // Data Time segment before sample point.
    bitTimes_myMCAN0.dataTimeSeg2       = 8; // Data Time segment after sample point.
    bitTimes_myMCAN0.dataSynchJumpWidth = 7; // Data (Re)Synchronization Jump Width.
    //
    // Get MCANSS Revision ID.
    //
    MCAN_getRevisionId(myMCAN0_BASE, &revid_myMCAN0);
    //
    // Wait for Memory initialization to be completed.
    //
    while(0 == MCAN_isMemInitDone(myMCAN0_BASE));
    //
    // Put MCAN in SW initialization mode.
    //
    MCAN_setOpMode(myMCAN0_BASE, MCAN_OPERATION_MODE_SW_INIT);
    //
    // Wait till MCAN is not initialized.
    //
    while (MCAN_OPERATION_MODE_SW_INIT != MCAN_getOpMode(myMCAN0_BASE));
    //
    // Initialize MCAN module.
    //
    MCAN_init(myMCAN0_BASE, &initParams_myMCAN0);
    //
    // Configure MCAN module.
    //
    MCAN_config(myMCAN0_BASE, &configParams_myMCAN0);
    //
    // Configure Bit timings.
    //
    MCAN_setBitTime(myMCAN0_BASE, &bitTimes_myMCAN0);
    //
    // Configure Message RAM Sections
    //
    MCAN_msgRAMConfig(myMCAN0_BASE, &msgRAMConfigParams_myMCAN0);
    //
    // Internal loopback mode
    //
    MCAN_lpbkModeEnable(myMCAN0_BASE, MCAN_LPBK_MODE_EXTERNAL, false);
    //
    // Take MCAN out of the SW initialization mode
    //
    MCAN_setOpMode(myMCAN0_BASE, MCAN_OPERATION_MODE_NORMAL);
    while (MCAN_OPERATION_MODE_NORMAL != MCAN_getOpMode(myMCAN0_BASE));
}

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

    您好、张:

    对于用于捕获 MCAN 帧的示波器、是否能够进行配置?  在诸如 PeakCAN 之类的 CAN 分析仪中、还可以选择设置 BRS、波特率(对于标称速率和数据速率)或发送 ACK 位。  您可能还需要在示波器中设置 BRS、以便它能够区分标称和数据阶段之间比特率的切换。

    此致、

    Joseph

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

    你好,我没有找到如何在我的范围内设置 BRS,但我做了另一件事:

    1.我通过我的独木舟 IG 发送 CANFD BRS 信息,独木舟轨迹显示没有错误;

    2.在 CAN 收发器 RX 引脚和 GND 处测试信息,没有错误,在示波器中可以看到 BRS ;  

    3、独木舟和 示波器 采样点为 80%,数据速率采样点也为 80%;

    根据以上所述、我认为 示波器和独木舟是正确的配置。

    我想知道 我的 MCAN 配置是否有问题? 在 SSP 中、在 SJW 中?

    我怀疑我的 MCAN 消息 RAM 配置 可能有误、我将 DLC 设置为 8、但独木舟轨迹显示错误帧 DLC 是 C;

    您能帮助我检查消息 RAM 配置、SSP 设定点或其他配置吗?

    下面是我的 消息 RAM 配置和一些测试图片;

    #define myMCAN0_BASE MCANA_DRIVER_BASE
    //
    // Defines
    //
    #define myMCAN0_MCAN_STD_ID_FILTER_NUM          (0)
    #define myMCAN0_MCAN_EXT_ID_FILTER_NUM          (0)
    #define myMCAN0_MCAN_FIFO_0_NUM                 (0)
    #define myMCAN0_MCAN_FIFO_1_NUM                 (0)
    #define myMCAN0_MCAN_TX_BUFF_SIZE               (1)
    #define myMCAN0_MCAN_TX_EVENT_SIZE              (0)
    
    #define myMCAN0_MCAN_STD_ID_FILT_START_ADDR     (0)
    #define myMCAN0_MCAN_EXT_ID_FILT_START_ADDR     (0)
    #define myMCAN0_MCAN_FIFO_0_START_ADDR          (0)
    #define myMCAN0_MCAN_FIFO_1_START_ADDR          (0)
    #define myMCAN0_MCAN_RX_BUFF_START_ADDR         (0)
    #define myMCAN0_MCAN_TX_BUFF_START_ADDR         (0)
    #define myMCAN0_MCAN_TX_EVENT_START_ADDR        (72)
    

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

    我发现位置不正确、独木舟和示波器采样点均为 80%、仲裁为 500Kbps、数据为 2Mbps、

    但软件配置为:

    bitTimes_myMCAN0.nomRatePrescalar = 3;//标称波特率预分频器。
    bitTimes_myMCAN0.nomTimeSeg1 = 9;//采样点之前的标称时间段。
    bitTimes_myMCAN0.nomTimeSeg2 = 8;//采样点后的标称时间段。
    bitTimes_myMCAN0.nomSynchJumpWidth = 7;//标称 (Re) 同步跳转宽度范围。
    bitTimes_myMCAN0.dataRatePrescale = 1;//数据波特率预分频器。
    bitTimes_myMCAN0.dataTimeSeg1 = 9;//采样点之前的数据时间段。
    bitTimes_myMCAN0.dataTimeSeg2 = 8;//采样点之后的数据时间段。
    bitTimes_myMCAN0.dataSynchJumpWidth = 7;//数据 (Re) 同步跳转宽度。

    当我更改为列表配置时、没有 can err;

    bitTimes_myMCAN0.nomRatePrescalar = 3;//标称波特率预分频器。
    bitTimes_myMCAN0.nomTimeSeg1 = 14;//采样点之前的标称时间段。
    bitTimes_myMCAN0.nomTimeSeg2 = 3;//采样点后的标称时间段。
    bitTimes_myMCAN0.nomSynchJumpWidth = 3;//标称 (Re) 同步跳转宽度范围。
    bitTimes_myMCAN0.dataRatePrescale = 0;//数据波特率预分频器。
    bitTimes_myMCAN0.dataTimeSeg1 = 14;//采样点之前的数据时间段。
    bitTimes_myMCAN0.dataTimeSeg2 = 3;//采样点之后的数据时间段。
    bitTimes_myMCAN0.dataSynchJumpWidth = 3;//数据 (Re) 同步跳转宽度。

    因此、错误是 由错误的 采样点引起的、MCAN 示例工程可能 具有不合适的配置;

    另一个问题是 如何计算采样点?

    1- nomTimeSeg2 /(nomTimeSeg2 + 1 + nomTimeSeg1 + 1 + 1)

    或  

    1- (nomTimeSeg2 +1)/(nomTimeSeg2 + 1 + nomTimeSeg1 + 1 + 1)?

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

    比特率(标称或数据)的计算方法如下:

       BR =(MCAN 时钟/(RatePrescaler + 1))/(TimeSeg1 + TimeSeg2 + 3)

       在 SW 示例中、MCAN Clk = MCL/(120MHz 分频器= 3)= 40MHz

    采样点的计算公式如下:

       SP =(TimeSeg1)/(TimeSeg1 + TimeSeg2)

    第一个配置参数为:

       40MHz BR =(NOM/(3+1))/(9 + 9 + 3)= 500kbps

       数据 BR = (40MHz =(1+1))/(9 + 8 + 3)= 1Mbps

       SP =(9)/(9 + 8)= 53%

    第二个配置参数为:

       40MHz BR =(NOM/(3+1))/(14 + 3 + 3)= 500kbps

       数据 BR = (40MHz =(1+0))/(14 + 3 + 3)= 2Mbps

       SP =(14)/(14 + 3)= 82%

    显然、如果 CANoe 期望标称速率为 500kbps、数据速率为 2Mbps、则第一个 CONFIG 参数将不起作用