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.

[参考译文] AM2634:接收标准和扩展 ID CAN 消息时出现问题

Guru**** 2455360 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1494308/am2634-issue-receiving-both-standard-and-extended-id-can-messages

器件型号:AM2634

工具与软件:

您好!

我正在使用单个 CAN 总线对 AM36x Sitara 处理器进行测试、目的是接收标准和扩展 ID CAN 消息。 但是、我面临的问题是、接收行为似乎取决于添加滤波器的顺序。  

例如、当我按< standard_id_0、standard_id_1、extended_id_0、 extended_id_1、  standard_id_2 >顺序添加过滤器时、 只 会接收具有 standard_id_1和 standard_id_2的消息。

另一方面、当我按 < extended_id_0、 extended_id_1、standard_id_0 、 standard_id_1 >顺序添加它们时、 只 会 接收到具有 extended_id_0的消息。

您能否解释一下:

  • 滤波器阶数如何影响消息接收?
  • 是否有任何建议的方法来配置过滤器、以确保使用传统过滤器正确接收标准 ID 和扩展 ID?
  • 是否应按特定顺序应用滤波器以避免接收行为不一致?

提前感谢您的支持!

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

    您好、Danae:

    是将消息存储到 RX 缓冲器还是 RX FIFO 中?

    使用 RX 缓冲器时、预计会出现这种行为。

    在 TRM 的流程图中介绍了接受过滤器过程。 我包含标准标识符流程以供参考、但它对扩展标识符等效。

    我想指出 Bosch MCAN 用户指南中的以下注意事项:(如果尚未将此信息添加到 TRM、我将提交票证)。

    注意:将接受的消息写入两个 Rx FIFO 之一或 Rx 缓冲区时、未修改的接收标识符将独立于所使用的过滤器进行存储。 接受过滤器过程的结果在很大程度上取决于配置的过滤器元素的顺序。

    以下文本也从 TRM 的"专用 RX 缓冲区"部分中提取:

    将匹配的接收消息的最后一个字写入消息 RAM 后、寄存器 NDAT1、2中相应的新数据标志会置位。 只要设置了新数据标志、相应的 Rx 缓冲区就会被锁定、以防止通过接收到的匹配帧进行更新。 主机必须通过向相应的位位置写入‘1"来重置新数据标志。

    当设置 Rx 缓冲器的新数据标志时、引用该特定 Rx 缓冲器的消息 ID 过滤器元素将不匹配、从而会继续进行接受过滤。 遵循消息 ID 过滤器元素可能会使接收到的消息存储到另一个 Rx 缓冲器或 Rx FIFO 中、或者该消息可能会被拒绝、具体取决于过滤器配置。

    这是一项应用/系统级实现要求 、旨在确保 接受过滤器过程考虑接收消息的预期顺序、以便接受和存储所有必要的消息。

    此致、

    Zackary Fleenor

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

    您好、Zackary、

    感谢您的详细答复。 我知道 CAN ID 过滤器的配置顺序可能会影响消息接收、尤其是在 MCAN 控制器处理接收到的消息的方式方面。

    鉴于我的系统配置为使用 Rx FIFO、滤波器阶数可能不是导致我遇到消息丢失的原因。 我系统中的接收函数旨在从 Rx FIFO 读取数据。 因此、该问题可能不是由 Rx 缓冲器管理引起的。 相反、问题可能出在滤波器配置本身或 MCAN 设置的某些其他方面。 是否有任何 MCAN 配置示例可用于在同一 CAN 总线上接收标准和扩展消息?

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

    嗨、Danae、

    我快速检查了一下、不知道有任何示例配置为接收这两种类型的消息、但是 mcan.h 文件中为这两种类型定义了必要的数据结构。

    MCAN_StdMsgIDFilterElement
    MCAN_ExtMsgIDFilterElement
     
    如果从当前使用 StdMsgIDFilterElement 的 mcan_external_read_write 示例开始。
    两个结构都需要在 App_mcanConfig ()中正确配置; mcan_external_read_write.c 函数
    然后需要创建一个新的 App_mcanInitExtFilterElemParams()函数、该函数模拟当前 App_mcanInitStdFilterElemParams()布局。
    我将在内部与我们的软件团队核实是否有机会添加一个额外的示例来展示此功能。
    此致、
    Zackary Fleenor