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.

[参考译文] TMS320F28386D:将 MCAN 配置为接收所有帧(如何禁用 MCAN 中的滤波器)

Guru**** 2455560 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1050369/tms320f28386d-configuring-mcan-to-receive-all-the-frames-how-to-disable-filters-in-mcan

器件型号:TMS320F28386D

大家好、

 我可以使用 TI 提供的示例代码在两个电路板之间发送和接收 MCAN 数据。 通过使用以下配置、我将一个板作为主板、将一个板作为从板。

//从设备//节点 ID 4.
stdFiltelem.sfid2 = 0x0;//标准滤波器 ID 2.
stdFiltelem.sfid1 = 0x4;//标准滤波器 ID 1。
stdFiltelem.sfec = 0x7;//存储到 Rx 缓冲器或 As 中
//调试消息,SFT[1:0]的配置被忽略。
stdFiltelem.SFT = 0;//范围滤波器从 SFID1到 SFID2。
#endif


//主设备//节点 ID 3.
stdFiltelem.sfid2 = 0x0U;//标准滤波器 ID 2.
stdFiltelem.sfid1 = 0x3U;//标准滤波器 ID 1。
stdFiltelem.sfec = 0x7U;//存储到 Rx 缓冲器或 As 中
//调试消息,SFT[1:0]的配置被忽略。
stdFiltelem.SFT = 0x0U;//范围滤波器从 SFID1到 SFID2。

从主设备发送数据到从设备节点、方法是使用从设备 ID 4、但我希望在主设备节点中接收 CAN 数据、而不管 ID 是什么、我是说我要 禁用筛选器来接收来自所有节点的数据。因此、有人可以告诉我如何操作 禁用 MCAN 中的滤波器??

谢谢、此致

Maheshwar P  

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

    您好!  

    这一问题的专家已不在办公室,请在下星期二之前答复。  

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

    您好、Maheshwar、

    如前所述、我们的 MCAN 专家是 OOO、但他最近发布 了《MCAN (CAN FD)模块入门 》应用手册、 该手册可帮助您在等待过程中取得进展。

    此致、Joe

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

    Maheshwar、

                 您是否看过我的 App.report www.ti.com/lit/spracu9?中的示例 mCAN_Ex5_MASK_FILTER_Receive.c请参阅以下注意事项:  

    该示例演示了接收(具有掩码滤波器)到 RX-FIFO1的过程。 标识符的位0、1和3被屏蔽。 因此、这些位可以有任何值。 这是通过使用 stdFiltelem.sfid1 = 00000001111b 和 stdFiltelem.sfid2 = 111110100b (0表示“无关”)实现的,这意味着接收所有 ID 为0000000x1xxb 的帧并将其存储到 FIFO 中。 也就是说、接收到具有以下标准 ID 的帧:0x004、0x005、0x006、0x007、0x00C、 0x00D、0x00E、0x00F。 未接收到所有其他 ID。 采用了经典的位掩码滤波器。  

    对于您的情况、由于您希望接收所有 ID、请将 sfid2中的所有适用位设为0 (即"无关")

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

    尊敬的先生

    TI 环回给出的 MCAN 示例对于8字节数据来说是可以的、但如果我尝试发送大于8字节的数据、我在环回模式下无法接收任何数据。我甚至尝试更改 MCAN 中的 DLC 值。 请任何人帮助我解决此问题。

    谢谢、此致

    Maheshwar P

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

    您好、Maheshwar、

    请相应地更新"MCANConfig"函数、以将"MCAN_RXESC"寄存器设置为适当的大小。

    此致、

    Vince

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

    您能否在我可以配置的帮助下提供一段代码???

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

    Maheswar、

                   在协议级别、CAN 中没有像"节点 ID"这样的东西。 我们拥有的是消息 ID、即与帧一起传输的标识符。 此标识符可配置为应用所需的任何值。 如果您希望接收所有帧、而不考虑标识符、您可以通过两种不同的方式实现该目的:

     

    1. 使用"Classic bit mask filter"-将 sfid2中的所有位设为0
    2. 范围滤波器-使 SFID1 = 000且 SFID2 = 7FF。 请注意、SFID2≥SFID1 (在代码段中、它是另一种方法、这是错误的)。 请参阅  SPRACU9中的 mCAN_EX8_RANGE_FILTER.c。

    DLC 值仅为发送对象配置。 它是接收对象的"无关"。  

    这是否有帮助?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1. 使用"Classic bit mask filter"-将 sfid2中的所有位设为0
    2. 范围滤波器-使 SFID1 = 000且 SFID2 = 7FF。 请注意、SFID2≥SFID1 (在代码段中、它是另一种方法、这是错误的)。 请参阅   SPRACU9中的 mCAN_EX8_RANGE_FILTER.c。

    我可以在环回模式中检查这个吗?

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

    在 CAN 模块的早期版本中、与非自检模式相比、模块在自检模式下的行为(尤其是验收滤波)是不同的。 我没有在 STM 中尝试过这种方法。 我建议在两个节点之间测试这种情况、以模拟真实的用例。