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.

[参考译文] PROCESSOR-SDK-AM62X:CAN 滤波器配置

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1506599/processor-sdk-am62x-can-filter-configuration

器件型号:PROCESSOR-SDK-AM62X

工具/软件:

尊敬的 TI 技术支持团队:

我们为 CAN1 Std 滤波器配置以下设置。
但配置后、我们无法接收任何数据包。 根据寄存器设置匹配、应在 RX FIFO 1中接收 ID 个数据包、但不接收数据包。

我们设置 MASK = 0d0h、因此它应该会接收0d0h CAN ID 数据包、但无法接收。

请帮助调试此问题。  我们缺少任何寄存器设置吗?  请共享测试或演示代码以验证 CAN 过滤器是否正常工作?

标准消息 ID 过滤器元素设置
========================================

SFT[1-0]= 2h

SFEC[2-0]= 2h

SFID1[10-0]= 72fh

SFID2[10-0]= 0D0h

CFG_GFC 寄存器(偏移= 80h)[复位= 0h ]
=========================================

5:4 ANFS = 11
3:2 ANFE = 11
RRFS = 1h

RRFE = 1h

此致、

Tejas Patel

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

    您好、

    您使用的是哪个器件、Processor SDK 和版本? 我们支持 Free RTOS 或 Linux。 使用的操作系统将设置 CAN 接口的寄存器。 在我们继续之前、您使用的是哪种操作系统?  

    此致、

    Schuyler

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

    您好、  

    我们使用裸机 SDK 和 Linux。  

    此致、

    Tejas Patel

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

    您好、
    请求您帮助解决此问题。  
    请告诉我们标准 CAN 和扩展 CAN 滤波器的特定配置  

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

    您好、

    我将继续查看、但据我所知、TI 没有 用于设置 MCAN 接口的特定裸机代码示例。

    有一个称为 Processor MCU+ SDK、您正在使用此 SDK 还是 Processor SDK Linux? 如果您使用 MCU+ SDK、则有支持 MCAN 的 FreeRTOS 代码。 您是否考虑过这种可能性? 我假设您将 M4用于 MCAN?

    此致、

    Schuyler  

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

    你(们)好
    我们使用 MCU_PLUS_SDK_am62x_09_02_00_38中提供的 MCAN 实现

     对于 NoRTOS、AM62x 具有 MCAN 驱动程序  

    我们正在查找过滤器配置的详细信息、SDK 中提供的驱动程序配置为缓冲器模式  

    我们需要将其配置为用于传统过滤器设置(即接受和掩码)的 FIFO  

    共享配置  

    为0x3F 配置了1GFS
    (MCAN_initGlobalFilterConfigParams)
    即拒绝标准和 XTD 的远程执行  
    此外、将不匹配的帧存储在 FIFO 0中  


    2-64 Rx FIFO 在阻塞模式下配置为 FIFO0和 FIF01

    3滤波器配置为传统滤波器、即 AR 和 MR  

    4-0x90D0072F 配置为过滤起始地址由 MCAN_SIDFC 给出的元素存储器位置

    MCAN_SIDFC_FLSSA 位  

    上述配置在 SDK 中完成  
    因此、理想情况下、它应将匹配的帧存储在 FIFO 1中、而不匹配的帧存储在 FIFO0中  
    但两者都存储在 FIFO1中或被拒绝  

    查找您的见解以获得正确的配置  

    等待您的快速响应
    谢谢

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

    尊敬的 Anand:

    [引述 userid="645340" url="~/support/processors-group/processors/f/processors-forum/1506599/processor-sdk-am62x-can-filter-configuration

    SFID1[10-0]= 72fh

    SFID2[10-0]= 0D0h

    [/报价]

    如果要接收 ID 为0xD0的 CAN 消息、则 SFID1和 SFID2的设置不正确。 在传统过滤器中、用作过滤器 ID 的 SFID1 us 和 SFID2用于屏蔽过滤器 ID (SFID1)中的相应位位置、那些值为0的位位置将不被考虑用于过滤。 有关此信息、请参阅第12.5.1.4.7.1.3节"传统位掩码过滤器"。 根据您的当前设置、将仅接受 ID 为0x0的消息。

    如果您只想接收 FIFO1中 ID 为0xD0的 CAN 消息、则以下应该是 SFID1和 SFID2的设置:

    SFID1 = 0xD0

    SFID2 = 0x7FF

    此致、

    会面。

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

    尊敬的会议:  

    #要求:  匹配的 ID 应存储在 FIFO-1中,不匹配的 ID 应被拒绝,  

      11位掩码和 Acc 过滤器值可以是0x0-0x7FF 之间的任何值。  例如: MASK =   0x72F 且 ACC 滤波器=  0x0D0

    #我们为满足 上述要求所做的寄存器配置。  

    >注册:标准消息 ID 过滤器元素1 (TRM 第1606页): 0x90D0072F

     SFID2 (掩码): 0x72F

     SFID1 (ACC 过滤器): 0x0D0

     SFEC: 02h   (存储在 FIO 1中)

     SFT:  02h   ( 传统过滤器)

    >寄存器: CFG_GFC 寄存器(偏移= 80h)  

    5:4 ANFS = 11
    3:2 ANFE = 11
    RRFS = 1h
    RRFE = 1h

    问题: 配置上述设置后、过滤无法正常工作(无法接收任何 CAN ID 数据包)。 我请求您查看寄存器设置。   我们缺少任何寄存器设置吗?    

    #裸机代码:   

    void MCAN_initGlobalFilterConfigParams (MCAN_ConfigParams *configParams)

    IF (configParams!= NULL)

    /*初始化 MCAN 配置参数*/
    configParams->monEnable = false;
    configParams->asmEnable = false;
    configParams->tsPrescale = 0xFU;
    configParams->tsSelect = false;
    configParams->timeoutSelect = MCAN_TIMEOUT_SELECT_CONT;
    configParams->timeoutPreload = 0xFFFFU;
    configParams->timeoutCntEnable = false;
    /*接受不匹配的帧并拒绝远程帧*/
    configParams->filterConfig.rfs = true;
    configParams->filterConfig.rfe = true;
    configParams->filterConfig.anfe = 0x3;
    configParams->filterConfig.anfs = 0x3;
    }

    返回;
    }

    void App_mcanInitStdFilterElemParams (MCAN_StdMsgIDFilterElement * stdFiltElem、
    uint32_t bufNum)

    /* sfid1定义要存储的标准消息的 ID。*/
    stdFiltElem->sfid1 =0x18DAD0D0;
    /*选择缓冲器模式后、sfid2应为 bufNum[0 - 63]*/
    stdFiltElem->sfid2 = 0x2F2F;
    /*将消息存储在缓冲区中*/
    stdFiltElem->sfec = 0x2
    /*如果消息存储在缓冲区中、则忽略以下配置*/
    stdFiltElem->SFT = 0x2;
    }


    LSS=4 LSE =4 FIFO-0和 FIFO-1 64 (采用阻塞模式)

    请参阅 API MCAN_addStdMsgIDFilter 来获取要配置的最终值

    配置为过滤器元素地址的值将为0x90D0072F

    此致、

    Tejas Patel

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

    尊敬的 Tejas:

     11位掩码和 Acc 过滤器值可以是0x0-0x7FF 之间的任何值。  例如: MASK =   0x72F 且 ACC 滤波器= 0x0D0
     

    我不完全了解这一要求、接受滤波器值的含义可能是0x0-0x7FF 之间的任何值? 您是说您要接受 ID 介于0x0-0x7FF 之间的任何消息吗?

    Unknown 说:
    我们的设置 mask = 0d0h、因此它应该接收0d0h CAN ID 数据包但无法接收。

    根据原始描述、我印象中只想接受 ID 为0xD0到 FIFO 的消息、在本例中、必须按如下方式设置 SFID1和 SFID2:

    SFID1 = 0xD0

    SFID2 = 0x7FF

    此致、

    会面。