在我们的用例中、我们通过 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。