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.

[参考译文] AWR1843BOOST:当流量中有大量 CAN 消息时、DSS 中的 MRR 软件崩溃

Guru**** 2553260 points
Other Parts Discussed in Thread: AWR1843

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1430677/awr1843boost-crashing-of-mrr-software-in-dss-when-a-lot-of-can-messages-are-in-the-traffic

器件型号:AWR1843BOOST
主题中讨论的其他器件:AWR1843

工具与软件:

您好!

问题描述:将雷达(AWR1843)与我们的 ECU 相连时、MRR 代码崩溃、从而在 CAN 总线上转储多条消息。 雷达的 CAN 配置为以500kbps 比特率接收传统 CAN 消息。 虽然当雷达作为独立系统进行监控时代码运行良好、但在与 ECU 集成期间它会崩溃。 ECU 和雷达只通过 CAN 进行通信。

我在其他 线程中发现了类似问题

当前配置:


    memset (mcanCfgParams, sizeof (CANFD_MCANInitParams), 0);

    mcanCfgParams->fdMode          = 0x0U;      //disabled fd mode 
    mcanCfgParams->brsEnable       = 0x0U;      //disabled bitrateswitching
    mcanCfgParams->txpEnable       = 0x0U;
    mcanCfgParams->efbi            = 0x0U;
    mcanCfgParams->pxhddisable     = 0x0U;
    mcanCfgParams->darEnable       = 0x1U;
    mcanCfgParams->wkupReqEnable   = 0x1U;
    mcanCfgParams->autoWkupEnable  = 0x1U;
    mcanCfgParams->emulationEnable = 0x0U;
    mcanCfgParams->emulationFAck   = 0x0U;
    mcanCfgParams->clkStopFAck     = 0x0U;
    mcanCfgParams->wdcPreload      = 0x0U;
    mcanCfgParams->tdcEnable       = 0x1U;
    mcanCfgParams->tdcConfig.tdcf  = 0U;
    mcanCfgParams->tdcConfig.tdco  = 8U;
    mcanCfgParams->monEnable       = 0x0U;
    mcanCfgParams->asmEnable       = 0x0U;
    mcanCfgParams->tsPrescalar     = 0x0U;
    mcanCfgParams->tsSelect        = 0x0U;
    mcanCfgParams->timeoutSelect   = CANFD_MCANTimeOutSelect_CONT;
    mcanCfgParams->timeoutPreload  = 0x0U;
    mcanCfgParams->timeoutCntEnable= 0x0U;
    mcanCfgParams->filterConfig.rrfe        = 0x1U;
    mcanCfgParams->filterConfig.rrfs        = 0x1U;
    mcanCfgParams->filterConfig.anfe        = 0x2U;             // Reject all non matching extended can-ids   //chnaged from 0x1U to 0x2U
    mcanCfgParams->filterConfig.anfs        = 0x2U;             // Reject all non matching standard can-ids   //chnaged from 0x1U to 0x2U
    mcanCfgParams->msgRAMConfig.lss         = 127U;
    mcanCfgParams->msgRAMConfig.lse         = 64U;
    mcanCfgParams->msgRAMConfig.txBufNum    = 32U;
    mcanCfgParams->msgRAMConfig.txFIFOSize  = 0U;
    mcanCfgParams->msgRAMConfig.txBufMode   = 0U;
    mcanCfgParams->msgRAMConfig.txEventFIFOSize         = 0U;
    mcanCfgParams->msgRAMConfig.txEventFIFOWaterMark    = 0U;
    mcanCfgParams->msgRAMConfig.rxFIFO0size             = 0U;
    mcanCfgParams->msgRAMConfig.rxFIFO0OpMode           = 0U;
    mcanCfgParams->msgRAMConfig.rxFIFO0waterMark        = 0U;
    mcanCfgParams->msgRAMConfig.rxFIFO1size             = 64U;
    mcanCfgParams->msgRAMConfig.rxFIFO1waterMark        = 64U;
    mcanCfgParams->msgRAMConfig.rxFIFO1OpMode           = 64U;


    mcanCfgParams->eccConfig.enable         = 1;
    mcanCfgParams->eccConfig.enableChk      = 1;
    mcanCfgParams->eccConfig.enableRdModWr  = 1;

    mcanCfgParams->errInterruptEnable   = 1U;
    mcanCfgParams->dataInterruptEnable  = 1U;
    mcanCfgParams->appErrCallBack       = MCANAppErrStatusCallback;
    mcanCfgParams->appDataCallBack      = MCANAppCallback;



此实验创建了两个 ID 为0x3F5和0x3F7的 RX 消息对象:

    /* Setup the receive message object */
    rxMsgObjectParams.direction     = CANFD_Direction_RX;
    rxMsgObjectParams.msgIdType     = CANFD_MCANXidType_11_BIT;
    rxMsgObjectParams.msgIdentifier = CAN_RX_ID_3F5;

    rxMsgObjHandle3F5 = CANFD_createMsgObject(canHandle, &rxMsgObjectParams, &errCode);
    if (rxMsgObjHandle3F5 == NULL)
    {
        System_printf("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
        return;
    }
    rxMsgObjectParams.direction     = CANFD_Direction_RX;
    rxMsgObjectParams.msgIdType     = CANFD_MCANXidType_11_BIT;
    rxMsgObjectParams.msgIdentifier = CAN_RX_ID_3F7;

    rxMsgObjHandle3F7 = CANFD_createMsgObject(canHandle, &rxMsgObjectParams, &errCode);
    if (rxMsgObjHandle3F7 == NULL)
    {
        System_printf("Error: CANFD create Rx message object failed [Error code %d]\n", errCode);
        return;
    }

尝试的解决方案:

修改后的过滤器配置:

mcanCfgParams->filterConfig.anfe = 0x2U;//拒绝所有不匹配的扩展 CAN-ID //从0x1U 更改为0x2U
mcanCfgParams->filterConfig.anfs = 0x2U;//拒绝所有不匹配的标准 CAN-ID //从0x1U 更改为0x2U

2.Commented out the system_printf 错误检查:

if (rxFrameType!=框架类型)

// System_printf ("错误:可能收到错误的帧类型发送%d 时收到%d 的帧类型不正确、迭代%d 失败\n"、帧类型、rxFrameType、iterationCount);
返回;
}

按照类似 线程中的建议、尝试使用 CANFD_createRxRangeMsgObject API。还没有成功

是否有正确的方法可以将 CAN 滤波器和屏蔽设置为仅接收这两个特定的 CAN ID (0x3F5和0x3F7)、从而防止其他 CAN ID 触发 CANRX 中断?

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

    您好!

    该问题似乎与 MRR 演示无关、而与 CAN 接口有关。  

    我认为我们需要将此问题提交给具有更多 CAN 系统集成经验的论坛社区

    谢谢你

    Cesar

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

    谢谢 Cesar!  

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

    尊敬的 Cesar:

    任何更新。

    此致  

    Tanoop

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

    尊敬的 Cesar 和社区:

    只需跟进将 CAN 滤波器配置为仅在 AWR1843雷达上接收特定 CAN ID (0x3F5和0x3F7)的问题。 尽管修改了滤波器配置并尝试了 CANFD_createRxRangeMsgObject API、但系统在与我们的 ECU 集成时会崩溃。

    如果任何人对类似的 CAN 集成挑战有见解或经验、我们将非常感谢您的指导。 谢谢!

    此致!
    Tanoop

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

    你(们)好  

    让我们看看是否有任何论坛成员的反馈

    谢谢你
    Cesar