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 消息时雷达传感器停止工作、如何忽略未注册 CAN 消息?

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1199411/awr1843boost-radar-sensor-stops-working-when-received-non-registered-can-message-how-to-ignore-the-non-registered-can-messages

器件型号:AWR1843BOOST

在我们的用例中、我们通过 CAN 总线连接多个雷达传感器。 每个雷达传感器通过具有不同 CAN ID 的 CAN 消息广播检测到的物体。  

我们修改了基于汽车 Mrr 实验室演示的固件基础、并在测试期间发现了2个问题:

问题1. 当接收到的消息的 ID 超出范围时、雷达传感器停止工作  

示例  

设置接收的消息对象:

rxMsgObjectParams.Direction = CANFD_DIRECT_RX;
rxMsgObjectParams.msgIdType = CANFD_MCANXidType_29_bit;
rxMsgObjectParams.msgIdentifier = 0xA1
rxMsgObjHandle = CANFD_createMsgObject (canHandle、&rxMsgObjectParams、&errCode);

并设置接收到的消息范围:

rxMsgObjectRangeParams.msgIdType = CANFD_MCANXidType_29_bit;
rxMsgObjectRangeParams.startMsgIdentifier = 0xA1
rxMsgObjectRangeParams.endMsgIdentifier = 0xA5
rxMsgObjRangeHandle = CANFD_createRxRangeMsgObject (canHandle、&rxMsgObjectRangeParams、&errCode);

然后、当我广播 CAN ID 为0x10的 CAN FD 消息时、固件将立即停止工作。

问题2. 雷达传感器的运行中断

为了解决问题1、我增加了接收到的消息范围。 例如、我将范围设置为允许所有 CAN ID:

rxMsgObjectRangeParams.msgIdType = CANFD_MCANXidType_29_bit;
rxMsgObjectRangeParams.startMsgIdentifier = 0x00000000
rxMsgObjectRangeParams.endMsgIdentifier = 0xFFFFFFFF
rxMsgObjRangeHandle = CANFD_createRxRangeMsgObject (canHandle、&rxMsgObjectRangeParams、&errCode);

然后、问题1似乎已经解决、但我发现在同一 CAN 网络上运行传感器一段时间后、某些传感器再次停止工作。 日志显示 DSS 因无法及时接收帧响应而停止。 我检查函数 CANFD_createRxRangeMsgObject 的描述、并认为这是 由通过网络批量发送的 CAN 消息引起的。 这些 CAN 消息会中断雷达传感器的运行并造成处理延迟。  

我的问题是:  

我想知道、是否有一种解决方案允许雷达传感器接收任何 CAN 消息、而不会干扰不感兴趣的 CAN ID、

或解决方案只需解决问题1。   

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

    您好!

    是否可以使用滤波器?

    谢谢你

    Cesar

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

    谢谢你。  

    我想在 CAN 设置中使用滤波器。 但无法找到在滤波器配置中设置 CAN ID 的位置。  

    {
        /*Intialize MCAN Config Params*/
        memset (mcanCfgParams, sizeof (CANFD_MCANInitParams), 0);
    
        mcanCfgParams->fdMode          = 0x1U;
        mcanCfgParams->brsEnable       = 0x1U;
        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        = 0x1U;
        mcanCfgParams->filterConfig.anfs        = 0x1U;
        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   = 0U;
        mcanCfgParams->dataInterruptEnable  = 1U;
        mcanCfgParams->appErrCallBack       = MCANAppErrStatusCallback;
        mcanCfgParams->appDataCallBack      = MCANAppCallback;
    }
    
    /**
     * @brief   Data structure defines the MCAN Global Filter Configuration parameters.
     */
    typedef struct CANFD_MCANGlobalFiltConfig_t
    {
        /*! Reject Remote Frames Extended
         *   0 = Filter remote frames with 29-bit extended IDs
         *   1 = Reject all remote frames with 29-bit extended IDs
         */
        uint32_t        rrfe;
    
        /*! Reject Remote Frames Standard
         *   0 = Filter remote frames with 11-bit standard IDs
         *   1 = Reject all remote frames with 11-bit standard IDs
         */
        uint32_t        rrfs;
    
        /*! Accept Non-matching Frames Extended
         *   0 = Accept in Rx FIFO 0
         *   1 = Accept in Rx FIFO 1
         *   others = Reject
         */
        uint32_t        anfe;
    
        /*! Accept Non-matching Frames Standard
         *   0 = Accept in Rx FIFO 0
         *   1 = Accept in Rx FIFO 1
         *   others = Reject
         */
        uint32_t        anfs;
    }CANFD_MCANGlobalFiltConfig;

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

    您好!

    我们将在下周早些时候再次与您进行讨论

    谢谢你
    Cesar