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.

[参考译文] CAN-AM261X:MCU-PLUS-SDK 滤波器配置

Guru**** 2540720 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1552156/mcu-plus-sdk-am261x-can-filter-configuration

器件型号:MCU-PLUS-SDKAM261X-AM261X
主题:SysConfig 中讨论的其他器件

工具/软件:

TI 团队大家好:

  我的工程。 只 能接收等于 0x757、0x2F6 的标准 ID。  我想使用 3 个接受过滤器来 过滤这些标准 ID  此外、将标准 ID 为 0x757 的 CAN 消息存储在 RX FIFO0 中、将标准 ID 为 0x2F6 的 CAN 消息存储在 RX FIFO1 或专用的 RX 缓冲区中。 以下是我的配置 1:  

stCanRxDiagMsgObj.direction = CANFD_Direction_RX;
stCanRxDiagMsgObj.msgIdType = CANFD_MCANXidType_11_BIT;
stCanRxDiagMsgObj.args = (uint8_t*) Can_au8RxDiagData;
stCanRxDiagMsgObj.startMsgId = 0x757;
stCanRxDiagMsgObj.endMsgId = 0;
stCanRxDiagMsgObj.rxElement = 0;
stCanRxDiagMsgObj.dataLength = 64;
stCanRxDiagMsgObj.rxMemType = MCAN_MEM_TYPE_FIFO;
status = CANFD_createMsgObject (gCanfdHandle[CONFIG_MCAN0], &stCanRxDiagMsgObj);
u32FilterNum++;

stCanRxTimeSyncMsgObj.direction = CANFD_Direction_RX;
stCanRxTimeSyncMsgObj.msgIdType = CANFD_MCANXidType_11_BIT;
stCanRxTimeSyncMsgObj.args = (uint8_t*) Can_au8RxTimeSyncData;
stCanRxTimeSyncMsgObj.startMsgId = 0x2F6;
stCanRxTimeSyncMsgObj.endMsgId = 0;
stCanRxTimeSyncMsgObj.rxElement = 0; /** buffer num */
stCanRxTimeSyncMsgObj.dataLength = 64;
stCanRxTimeSyncMsgObj.filterConfig;
stCanRxTimeSyncMsgObj.rxMemType = MCAN_MEM_TYPE_BUF;

滤波器工作正常。 但具有标准 ID 0x2F6 的 CAN 消息存储在 FIFO0 中、而不是专用的 Rx 缓冲区中。  所有消息均使用 stCanRxDiagMsgObj 接收。  对象 stCanRxTimeSyncMsgObj 无意义。

根据上述内容、 添加另一个配置:  

    uint32_t u32BaseAddr = 0U;
    uint32_t u32FilterNum = 1;
    MCAN_StdMsgIDFilterElement  stStdMsgIdFilter;
    u32BaseAddr = stCanRxDiagMsgObj.canfdHandle->object->regBaseAddress;
    /**ID */
    stStdMsgIdFilter.sfid1 = 0x2F6;
    stStdMsgIdFilter.sfid2 = 0;
    /* store in rx buffer */
    stStdMsgIdFilter.sfec = MCAN_STD_FILT_ELEM_BUFFER;
    /**< Dual ID filter for SFID1 or SFID2, will be ignore in buffer mode. */
    stStdMsgIdFilter.sft = MCAN_STD_FILT_TYPE_DUAL;
    MCAN_addStdMsgIDFilter(u32BaseAddr, u32FilterNum, &stStdMsgIdFilter);

在此配置中、 标准 ID 为 0x2F6 的 CAN 消息可以触发接收中断。  但无法获取正确的 CAN ID 和消息数据。

那么、您能帮助 修改滤波器配置以满足我的要求吗? 谢谢!

另一个问题:

SFID2 已 在蓝色框中进行了说明、  那么如何理解红色框中的描述呢?

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


    那么、您能帮助 修改过滤器配置以满足我的要求吗? 谢谢!

    如果您的要求是仅接收 0x2F6 和 0x757、则您已经在 SysConfig 屏幕截图中正确地设置了双过滤器、但过滤器 ID 分别为 0x0 和 0x1。  我想您应该将它们设置为 0x2F6 和 0x757(FIFO 模式下)。


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

    您好,感谢您的答复。  

    以下是我的要求:

     “CAN 消息(标准 ID 为 0x757) 存储在 RX FIFO0 中、而 CAN 消息(标准 ID 为 0x2F6 存储在 RX FIFO1 中)或专用的 RX 缓冲区中。  “

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

    抱歉、我没想到您想要为每个过滤后的 ID 提供不同的 FIFO。 我不确定这是可能的。

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

    尊敬的 Jevin:

    这当然是可能的、因为最多可以为 MCAN IP 定义 128 个过滤器元素。

    FILTER1 配置为接受 RX FIFO0 中的 ID 0x757

    FILTER2 配置为在 RX 缓冲器中检测 ID 0x2F6

    AM261x MCU+ SDK:MCAN_StdMsgIDFilterElement 结构参考

    为了使过滤器只捕获签名 ID、应使用“Classical Filter“(传统过滤器)选项。 其中 SFID1 =要接受的 ID、SFID =全 1(全屏蔽,以确保仅接受 SFID1 的完全匹配)。

    有关更多详细信息、请参阅器件 TRM 的 MCAN - RX 处理一节。

    关于屏幕截图中显示的 SFID2 位字段说明、您能否确认此屏幕截图的来源?

    我将提供这些位的次要说明、该说明直接取自 Bosch MCAN 用户指南文档。

    红色框中的详细信息仅描述了 SFEC = 111 时寄存器位字段的功能。  

    当 SFEC != 111 或 000 时、SFID2 根据过滤器类型充当实际的第二个 ID 值(例如:过滤器范围结束 ID 值、第二个过滤器、ID 值或过滤器掩码值)

    此致、

    Zackary Fleenor