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.

[参考译文] TCAN4550EVM:单个消息和消息范围的 SID 过滤不起作用

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/796320/tcan4550evm-sid-filtering-not-working-for-single-message-and-range-of-messages

器件型号:TCAN4550EVM
主题中讨论的其他器件:TCAN4550

您好!

我已经尝试了以下滤波机制选项:

               

  1. 按照以下步骤设置高优先级消息:

这正常工作

     TCAN4x5x_MCAN_SID_Filter SID_ID ={0};

      SID_ID.SFT = TCAN4x5x_SID_SFT_Classic;                                   // SFT:标准滤波器类型。 配置为经典滤波器

      SID_ID.SFEC = TCAN4x5x_SID_SFEC_PRIORITYSTORERX0;                //标准滤波器元件配置,将其作为优先级消息存储在 RX FIFO 0中

      SID_ID.SFID1 = 0x055;                                                                 // SFID1 (经典模式滤波器)

      SID_ID.SFID2 = 0x7FF;

      //此处,应写入0x0800的字将成为0xA85507FF 设置0x55的高优先级消息

      TCAN4x5x_MCAN_WriteSIDFilter (0、&SID_ID);                               //写入 MRAM

      上述语句变为 TCAN4x5x_MCAN_WriteSIDFilter (0、0xA85507FF);

在上面的代码中、我观察到0x55报文被视为高优先级报文、并且被存储在 RXFIF O 和中断寄存器(0x1050)中、我可以看到 HPM 位被设置为1。

  

2.通过设置以下提及的选项来拒绝特定的消息 ID

这正常工作

     TCAN4x5x_MCAN_SID_Filter SID_ID ={0};

      SID_ID.SFT = TCAN4x5x_SID_SFT_Classic;                                   // SFT:标准滤波器类型。 配置为经典滤波器

      SID_ID.SFEC = TCAN4x5x_SID_SFEC_REJECTMATCH;               //标准滤波器元件配置,将其作为优先级消息存储在 RX FIFO 0中

      SID_ID.SFID1 = 0x055;                                                                 // SFID1 (经典模式滤波器)

      SID_ID.SFID2 = 0x7FF;

      //此处应写入0x0800的字将变为0x985507FF 设置以拒绝0x55消息

      TCAN4x5x_MCAN_WriteSIDFilter (0、&SID_ID);                               //写入 MRAM

              上述语句变为 TCAN4x5x_MCAN_WriteSIDFilter (0、0x985507FF);

3.必须通过设置以下选项匹配消息 ID

这正常工作

     TCAN4x5x_MCAN_SID_Filter SID_ID ={0};

      SID_ID.SFT = TCAN4x5x_SID_SFT_DUALID;                                    // SFT:标准滤波器类型。 配置为经典滤波器

      SID_ID.SFEC = TCAN4x5x_SID_SFEC_STORERX0;                  //标准滤波器元件配置,将其作为优先级消息存储在 RX FIFO 0中

      SID_ID.SFID1 = 0x055;                                                                 // SFID1 (经典模式滤波器)

      SID_ID.SFID2 = 0x055;

      //此处应写入0x0800的字将变为 ID 0x55消息匹配的0x48550055设置

      TCAN4x5x_MCAN_WriteSIDFilter (0、&SID_ID);                               //写入 MRAM

               上述语句将变为 TCAN4x5x_MCAN_WriteSIDFilter (0、0x48550055);

以下设置对我不起作用:

 

4. 通过设置以下提及的选项接受 ID 消息的范围

这不能正常工作

     TCAN4x5x_MCAN_SID_Filter SID_ID ={0};

      SID_ID.SFT = TCAN4x5x_SID_SFT_RANGE;                                     // SFT:标准滤波器类型。 配置为经典滤波器

      SID_ID.SFEC = TCAN4x5x_SID_SFEC_STORERX0;                  //标准滤波器元件配置,将其作为优先级消息存储在 RX FIFO 0中

      SID_ID.SFID1 = 0x055;                                                                 // SFID1 (经典模式滤波器)

      SID_ID.SFID2 = 0x055;

      //此处,应写入0x0800的字将变为0x08550202设置,以接受0x055到0x202的消息

      TCAN4x5x_MCAN_WriteSIDFilter (0、&SID_ID);

      上述语句变为 TCAN4x5x_MCAN_WriteSIDFilter (0、0x08550202);

5.仅接受范围0x055 ID 消息,并通过设置以下选项将其存储在 RX FIF 0中

这不能正常工作

     TCAN4x5x_MCAN_SID_Filter SID_ID ={0};

      SID_ID.SFT = TCAN4x5x_SID_SFT_Classic;                                   // SFT:标准滤波器类型。 配置为经典滤波器

      SID_ID.SFEC = TCAN4x5x_SID_SFEC_STORERX0;                  //标准滤波器元件配置,将其作为优先级消息存储在 RX FIFO 0中

      SID_ID.SFID1 = 0x055;                                                                 // SFID1 (经典模式滤波器)

      SID_ID.SFID2 = 0x7FF;

      //此处应写入0x0800的字将变为0x885507FF 设置,以仅接受 ID 为0x055的消息

      TCAN4x5x_MCAN_WriteSIDFilter (0、&SID_ID);

    上述语句变为 TCAN4x5x_MCAN_WriteSIDFilter (0、0x885507FF);

 

有人能不能告诉我4个和5个测试用例中哪里出错了。

谢谢

Siva

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

    Vemula、

     

    我对拖延表示歉意。

     

    我查看了您的测试用例以及测试用例4和5。

     

    对我来说、4和5按预期工作。 您是否希望设备仅接受满足这些要求的数据包? 对于测试用例4、您可以让它接受 ID 为0x055的任何内容。

     

    您还必须记住、TCAN4550具有可配置的默认行为。 默认情况下、TCAN4550将接受与 RXFIFO0中的滤波器不匹配的任何消息。

     

    当您查看已读消息的 MsgHeader 结构时、可以验证匹配了哪个筛选器。 查看 FIDX 字段。 这是此消息匹配的筛选器的索引。 127 (0x7F)表示没有匹配的滤波器、并且执行了默认行为。 如果您看到0,则表示索引0过滤器与此消息匹配,并且操作是根据该过滤器执行的。

     

    如果您尝试仅接受与过滤器匹配的邮件,则需要将默认行为更改为拒绝数据包。 您可以通过编辑 GFC 寄存器(全局过滤器配置)来执行此操作。 这是寄存器0x1080。 请注意,这是一个受保护的寄存器,这意味着必须在 CCCR 中设置 CCR 位才能对其进行编辑,因此在配置 CAN 比特率时也要这样做。

     

    在我的标准库中、我不包含执行此操作的函数、因此您必须使用 AHB_WRITE_32函数调用直接写入寄存器。 下面是一个写入位置和内容的示例、用于设置默认行为以拒绝与 SID 或 XID 过滤器不匹配的所有 CAN 消息。

    TCAN4x5x_MCAN_EnableProtectedRegisters (); //首先使受保护的寄存器可访问
    TCAN4x5x_MCAN_ConfigureCCCRRegister (&cccrConfig); //启用 FD 模式和比特率切换
    AHB_WRITE_32 (REG_MCAN_GFC、0x0000003F); //这会更改默认数据包行为,以拒绝所有与 SID 或 XID 过滤器不匹配的数据包。
    TCAN4x5x_MCAN_ConfigureNominalTiming_Simple (&TCANNomTiming);//设置标称值/仲裁位时序
    TCAN4x5x_MCAN_ConfigureDataTiming_Simple (&TCANDataTiming); //设置 CAN FD 时序
    TCAN4x5x_MRAM_CLEAR (); //清除所有 MRAM (向所有 MRAM 写入0)
    TCAN4x5x_MRAM_Configure (&MRAMConfiguration); //设置与 MRAM 配置相关的适用寄存器
    TCAN4x5x_MCAN_DisableProtectedRegisters (); //禁用受保护的写入并使器件退出初始化模式
    
    

     

    这有道理吗?