主题中讨论的其他器件: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 中断?