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.

[参考译文] TMS320F28P650DK:MCAN 扩展 ID 过滤器无法正常工作

Guru**** 2952510 points

Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1653198/tms320f28p650dk-mcan-extended-id-filter-is-not-working

器件型号: TMS320F28P650DK
Thread 中讨论的其他器件: SysConfig、 C2000WARE

您好团队:

我需要两个扩展 ID 范围过滤器

但是、如果我一次配置两个过滤器、低于 1 的过滤器只能正常工作、高于过滤器 ID 的过滤器将被拒绝。

例如

image.png

此处仅接受 0x1CECA3C0 -> 0x1CEBA3C0 此 ID、并且 0x18ECC0A3->0x18EAC0A3 将被拒绝

请查看上述问题、我在 SysConfig 中还有一件事只能看到标准 ID 过滤器选项

image.png

此致

Sayali!

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

    尊敬的 Sayali:

    您的问题有两个根本原因: SysConfig 工具限制 和潜在的 过滤器配置问题。


    1. SysConfig 不完全支持扩展 ID 过滤器

    这是一个 已知的限制。 SysConfig 工具尚未完全支持 MCAN 扩展 ID 过滤器配置、因此您只能在 GUI 中看到标准 ID 过滤器选项[1]。 TI 的软件团队已收到这一缺口的通知。

    解决方案: 绕过扩展 ID 过滤器的 SysConfig、并使用 MCAN_addExtMsgIDFilter() C2000Ware 示例中的 API 在代码中手动配置它们[1]。


    2.过滤器评估顺序和配置

    MCAN 模块按顺序处理过滤器元素 — 接受过滤在第一个匹配且已启用的过滤器元素 [2][3]处停止。 这意味着:

    • 过滤器按其索引 (0、1、2、...) 的顺序进行检查
    • 找到匹配项后、将不会再评估筛选条件
    • 结果“在很大程度上取决于配置的过滤器元素的顺序“[3]

    但是、您的症状(第二个过滤器工作正常,但第一个过滤器被拒绝) 表明该问题更可能是 配置问题 、而不是简单的排序。 具体而言、请检查:

    1. MCAN_XIDFC.LSE (扩展列表大小) —此字段必须设置为 2 或更高值 才能启用两个过滤器元素。 如果设置为 1、则仅处理第一个过滤器元素[4]。 如果 SysConfig 仅为一个过滤器生成配置、这很可能是导致问题的原因。

    2. 范围过滤器方向 — 对于范围过滤器 (EFT = 00 或 11)、EFID2 必须≥EFID1 [5]。 验证您的范围是否满足此要求。

    3. XIDAM 掩码 —如果使用 EFT =00、则MCAN_XIDAM在范围比较之前应用扩展 ID 和掩码 ()、这可能改变匹配行为。 使用 EFT = 11 可以绕过该屏蔽[5]。


    建议的修复

    在代码中手动配置两个扩展 ID 过滤器:

    MCAN_ExtMsgIDFilterElement extFilt0, extFilt1;
    
    // Filter 0: Range 0x18EAC0A3 to 0x18ECC0A3
    extFilt0.efec = 0x1U;  // Store in Rx FIFO 0
    extFilt0.eft  = 0x3U;  // Range filter without XIDAM
    extFilt0.efid1 = 0x18EAC0A3;
    extFilt0.efid2 = 0x18ECC0A3;
    
    // Filter 1: Range 0x1CEBA3C0 to 0x1CECA3C0
    extFilt1.efec = 0x1U;  // Store in Rx FIFO 0
    extFilt1.eft  = 0x3U;  // Range filter without XIDAM
    extFilt1.efid1 = 0x1CEBA3C0;
    extFilt1.efid2 = 0x1CECA3C0;
    
    MCAN_addExtMsgIDFilter(MCANA_DRIVER_BASE, 0U, &extFilt0);
    MCAN_addExtMsgIDFilter(MCANA_DRIVER_BASE, 1U, &extFilt1);
    重要的是、确保 MCAN 初始化设置 MCAN_XIDFC 寄存器中的 LSE = 2、以使两个滤波器元素都处于活动状态[4]。

    为了帮助完善这项建议、了解以下信息会有所帮助:

    • 以及您使用的 C2000Ware 版本
    • 是否已通过尝试手动配置过滤器 MCAN_addExtMsgIDFilter()
    • 当前为这两个滤波器配置的确切 EFEC 和 EFT 值
    • MCAN_XIDFC.LSE 配置中的当前值

    资源:

    1. TMS320F28P650DK:针对扩展 ID 滤波器问题的 MCAN SYSCFG 工具设置 (E2E)
    2. TMS320F28P65x 技术参考手册 — 验收过滤(第 35.5.13.1 节)
    3. TMS320F28P65x TRM — 滤波器序列说明
    4. TMS320F28P65x TRM - MCAN_XIDFC 寄存器(LSE 字段)
    5. TMS320F28P65x TRM — 范围滤波器配置

    此致、

    Zackary Fleenor

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

    您好 Zackary、

    感谢您的快速详细响应、  

    我将查看您提供的建议、并对我的配置执行必要的检查。 我将很快向您介绍我的调查结果。
    谢谢!!