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.

[参考译文] TCAN4551-Q1:如何配置扩展 ID 滤波器

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1389593/tcan4551-q1-how-to-configure-extended-id-filter

器件型号:TCAN4551-Q1

工具与软件:

https://www.ti.com/lit/ds/symlink/tcan4551-q1.pdf?ts = 1721206363255&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTCAN4551-Q1%253Fbm-verify%253DAAQAAAAJ______ 9hTQmNLAsaK5HH3ShAYCJGGM6zoWT8Op2SILKSSosAIVUT7D0dJAHlGBD6_IVvxJKwK_AhBTAP_s6FlGy1aT9XXaTi9OJRk2-A-AlNlor

Linux 驱动程序上似乎没有 id 过滤器实现、您能否指导如何仅过滤 EFF id 0x18a 并丢弃所有其他消息、因为我在平台上收到 msg 丢失问题。

根据数据表、  

GFC: 0x3c、拒绝、处理与过滤器列表中的任何元素不匹配的29位 ID。

LSE:过滤器 ID 的数量?

FLSEA:过滤器 ID? 但仅限于16位

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

    或者如何避免 RF0L 之后芯片无法正常工作、我禁用了 RF0LE、但没有帮助

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

    尊敬的 Charles:

    您需要创建 XID 过滤器元素并将其存储到 MRAM 中 、MRAM 中包含每次接收到新消息时要检查的特定过滤器信息。  如果您只想存储特定的消息 ID、那么您可能需要使用传统掩码过滤器、它将与带有滤波器 ID 的消息 ID 相匹配、仅将其存储到 RX 缓冲区中。

    您需要为过滤器元素分配 MRAM 空间、方法是将扩展 ID 过滤器配置寄存器0x1088配置为具有的过滤器元素的数量以及过滤器元素的起始地址空间。  

    请注意、如果分配过滤器元素、则实际必须在该 MRAM 空间中包含有效的过滤器元素、否则可能会出现错误。  这是因为在接收到以第一个元素开头的消息时、器件将尝试评估所有过滤器元素。  如果分配了多个过滤器元素、则未通过第一个过滤器元素的消息将由下一个过滤器元素进行评估、直到没有更多过滤器元素或消息已传递其中一个过滤器。  因此、如果分配过滤器元素、但将 MRAM 空间留空、则可能无法正确处理 RX 消息。  因此、不要分配更多您实际上计划使用的元素。

    您可以在以下文档中找到有关如何配置过滤器元素的其他详细信息:

    TCAN45xx 软件用户指南 (链接)

    M_CAN 用户手册 (链接)

    此致、

    Jonathan

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

    你(Jonathan)好   

    您能否提供确切的寄存器和应写入的值?

      描述中描述了不同的寄存器描述

    在 RF0L 之后是否有任何恢复日期可以替代的方法、我可以在由 RF0L 提供支持的 ISR 中实现该方法  

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

    尊敬的 Charles:

    XIDFC 寄存器分配内存 RAM (MRAM)位置来存储 XID 过滤器元素。  在 XIDFC 中、您需要将 LSE 字段设置为要存储在 MRAM 空间中的 XID 过滤器数量。  如果只有一个 XID 滤波器、则需要设置 LSE = 1。  FLESA 字段包含第一个 XID 元素第一个字节的起始地址或 MRAM 地址。  此值需要根据您的总体 MRAM 分配来确定、以避免将用于 XID 滤波器的 MRAM 与其他元素(例如 RX 和 TX 缓冲器等)重叠

    然后、实际的 XID 过滤器写入此 MRAM 空间、其中包括 EFEC、EFT、ESYNC、EFID1和 EFID2字段。  EFEC 字段指示器件在消息与过滤器匹配时应执行的操作、例如将其存储到其中一个 RX FIFO 中。  EFT 字段指示器件使用哪种类型的滤波器、例如这是经典滤波器、还是范围滤波器等  ESYNC 域用于启用或禁用消息时间戳。  EFID1和 EFID2字段的使用方式有所不同、具体取决于您在 EFT 字段中配置的过滤器类型、但通常用于设置要作为范围的一部分进行筛选的消息 ID 或具有传统过滤器的掩码等

    此致、

    Jonathan

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

    你(Jonathan)好   

    您能否帮助查看我只想接收 EFF ID 0x18a 但从'candump CAN0'什么都没有得到的设置?

    // mcan_reg_offset 0x1000
    // M_CAN_SIDFC = 0x84、
    // M_CAN_XIDFC = 0x88、

    // mrram_offset 0x8000
    // M_CAN_XIDW1 0x7f8
    // M_CAN_XIDW2 0x7fc


    //++TCAN4551-Q1汽车控制区域网灵活数据速率
    // 22:16 LSE[6:0]列表大小扩展1
    // 15:0 FLSEA[15:0] Filter List Extended Start Address?????????
    // m_can_write (cdev、M_can_XIDFC、0x107f8);end:2048-1=0x7ff
    // FLESA [15:2](过滤器列表扩展起始地址)
    M_can_write (cdev、M_can_XIDFC、(0x1 << 16)|(0x7f8 << 2));//0x11fe0


    //- TCAN4551-Q1汽车控制区域网灵活数据速率
    //++TCAN45xx 软件用户指南
    // EFEC[2:0] EFID1[28:0]
    //扩展过滤器元素配置
    // 001=如果过滤器匹配、则存储在 Rx FIFO 0中:mcan_users_manual_v331
    // 2000018a
    //
    // EFT[1:0]分辨率 EFID2[28:0]
    // 11= EFID1到 EFID2的范围过滤器(EFID2 ? EFID1)、未应用 XIDAM 掩码
    //
    // b000018a
    //-- TCAN45xx Software User's Guide (TCAN45xx 软件用户指南)
    m_can_fifo_write_no_off (cdev、M_can_XIDW1、0x2000018a);
    m_can_fifo_write_no_off (cdev、m_can_XIDW2、0xb000018a);

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

    尊敬的 Charles:

    我已经尝试创建您的 XID 滤波器配置、我有一些评论和建议。

    验证扩展 ID 过滤器配置寄存器0x1088 = 0x107F8。  函数调用后的注释指示值0x11FE0、如果过滤器起始地址为0x7F8、则该值是错误的。

    对于单个寄存器 ID、我发现传统掩码更容易配置。  您只需设置 EFID1 = 0x18A、然后 EFID2 = 0x1FFFFFFF 用作掩码。  这样、29位消息 ID 中的每个位都与 EFID1进行"与"运算、以确保每个位都匹配。

    请注意、您还需要设置全局滤波器配置寄存器(0x1080)以拒绝不匹配的消息

    以下过滤器适用于我:

    M_CAN_WRITE_(cdev、M_CAN_XIDFC、0x107F8);

    m_can_fifo_write_no_off (codev、M_can_XIDW1、0x2000018A);
    m_can_fifo_write_no_off (codev、M_can_XIDW2、0x9FFFFFFF);

    此致、

    Jonathan

x 出现错误。请重试或与管理员联系。