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.

[参考译文] MCU-PLUS-SDK-AM263X:使用 lwip 通过 EST 进行数据传输

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1119145/mcu-plus-sdk-am263x-data-transmission-with-est-using-lwip

器件型号:MCU-PLUS-SDK-AM263X

您好!

我将 AM263x-cc EVM 与 SDK 版本"MCU_PLUS_SDK_am263x_08_02_01_08"配合使用。

我想使用 UDP 或 TCP 协议检查 EST 效果。

因此、我集成了示例 est+lwip、并在 lwip 中启用 VLAN 标记和 pcp。

现在、我可以发送具有不同 PCP 的 UDP 封包、但似乎数据包传输时间不符合门控设置。

我的栅极控制设置列表如下:

我还附上了数据包捕获文件供您参考:

e2e.ti.com/.../AM26EVM_5F00_LWIP_5F00_EST_5F00_500us_5F00_Cycle.zip

我同时递归地发送了带有 PCP 0、2、4、6的 UDP 数据包。

您对我的测试有什么建议吗?

 

谢谢、

Josh

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

    Josh、您好!

    我建议您转到最新版本的 MCU+ SDK、即 MCU_PLUS_SDK_am263x_08_03_00_23。
    您也可以在 MCU + SDK-AM263X 软件开发套件(SDK)|德州仪器 TI.com 上下载该软件
    另外,请告诉我们最新版本的 MCU+ SDK 是否再次出现此问题?

    谢谢、此致、

    Aakash

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

    Josh、

    您能否确认 您是否正在设置以下配置参数?

    hostPortCfg->rxVlanRemapEn =真;
    hostPortCfg->rxDscpIPv4RemapEn =真;
    hostPortCfg->rxDscpIPv6RemapEn =真;

    此外、请注意 Wireshark 时间戳不是很准确。  最好使用专用设备(如果有)。

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

    尊敬的 Misael:

    是的,我在 LwipApp_init()中添加了 cpswcfg

    // Josh
    static void EnetApp_portLinkStatusChangeCb(Enet_MacPort macPort,
                                               bool isLinkUp,
                                               void *appArg)
    {
        EnetAppUtils_print("MAC Port %u: link %s\r\n",
                           ENET_MACPORT_ID(macPort), isLinkUp ? "up" : "down");
    }
    
    static void EnetApp_mdioLinkStatusChange(Cpsw_MdioLinkStateChangeInfo *info,
                                             void *appArg)
    {
        static uint32_t linkUpCount = 0U;
    
        if ((info->linkChanged) && (info->isLinked))
        {
            linkUpCount++;
        }
    }
    
    static void EnetApp_initCpswCfg(Cpsw_Cfg *cpswCfg)
    {
        CpswAle_Cfg *aleCfg = &cpswCfg->aleCfg;
        CpswHostPort_Cfg *hostPortCfg = &cpswCfg->hostPortCfg;
        CpswCpts_Cfg *cptsCfg = &cpswCfg->cptsCfg;
    
        /* Peripheral-level config */
        cpswCfg->mdioLinkStateChangeCb     = EnetApp_mdioLinkStatusChange;
        cpswCfg->mdioLinkStateChangeCbArg  = NULL;
        cpswCfg->portLinkStatusChangeCb    = &EnetApp_portLinkStatusChangeCb;
        cpswCfg->portLinkStatusChangeCbArg = NULL;
        cpswCfg->vlanCfg.vlanAware         = true;
    
        /* ALE config */
        aleCfg->modeFlags                          = CPSW_ALE_CFG_MODULE_EN;
        aleCfg->agingCfg.autoAgingEn               = true;
        aleCfg->agingCfg.agingPeriodInMs           = 1000U;
        aleCfg->nwSecCfg.vid0ModeEn                = true;
        aleCfg->vlanCfg.aleVlanAwareMode           = TRUE;
        aleCfg->vlanCfg.cpswVlanAwareMode          = cpswCfg->vlanCfg.vlanAware;
        aleCfg->vlanCfg.unknownUnregMcastFloodMask = CPSW_ALE_ALL_PORTS_MASK;
        aleCfg->vlanCfg.unknownRegMcastFloodMask   = CPSW_ALE_ALL_PORTS_MASK;
        aleCfg->vlanCfg.unknownVlanMemberListMask  = CPSW_ALE_ALL_PORTS_MASK;
        aleCfg->policerGlobalCfg.policingEn        = false;
    
        /* Host port config */
        hostPortCfg->removeCrc         = true;
        hostPortCfg->padShortPacket    = true;
        hostPortCfg->passCrcErrors     = false;
        /* Hardware switch priority is taken from packet's PCP or DSCP */
        hostPortCfg->rxVlanRemapEn     = true;
        hostPortCfg->rxDscpIPv4RemapEn = true;
        hostPortCfg->rxDscpIPv6RemapEn = true;
    
        /* CPTS config (CPTS_RFT_CLK = 200MHz) */
        cptsCfg->cptsRftClkFreq = CPSW_CPTS_RFTCLK_FREQ_200MHZ;
    }
    
    static int32_t LwipApp_init(Enet_Type enetType)
    {
        int32_t status = ENET_SOK;
        EnetMcm_InitConfig enetMcmCfg;
        Cpsw_Cfg cpswCfg;
    #if (ENET_ENABLE_PER_ICSSG == 1)
        Icssg_Cfg icssgCfg;
    #endif
        EnetRm_ResCfg *resCfg = &cpswCfg.resCfg;
        EnetCpdma_Cfg dmaCfg;
    
    
        EnetApp_getEnetInstInfo(&gLwipIfCbObj.enetType,
                                &gLwipIfCbObj.instId,
                                gLwipIfCbObj.macPortList,
                                &gLwipIfCbObj.numMacPorts);
    
        EnetAppUtils_assert(gLwipIfCbObj.enetType == enetType);
    
        /* Set configuration parameters */
        if (Enet_isCpswFamily(gLwipIfCbObj.enetType))
        {
            cpswCfg.dmaCfg = (void *)&dmaCfg;
            Enet_initCfg(gLwipIfCbObj.enetType, gLwipIfCbObj.instId, &cpswCfg, sizeof(cpswCfg));
            EnetApp_initCpswCfg(&cpswCfg);   // Josh
            EnetApp_getCpswInitCfg(gLwipIfCbObj.enetType, gLwipIfCbObj.instId, &cpswCfg);
    
            EnetAppUtils_assert(EnetAppUtils_isDescCached() == false);
            dmaCfg.isCacheable = false;
            dmaCfg.rxInterruptPerMSec = 8;
            dmaCfg.txInterruptPerMSec = 2;
    
            enetMcmCfg.perCfg = &cpswCfg;
            resCfg = &cpswCfg.resCfg;
        }
    #if (ENET_ENABLE_PER_ICSSG == 1)
        else
        {
            Enet_initCfg(gLwipIfCbObj.enetType, gLwipIfCbObj.instId, &icssgCfg, sizeof(icssgCfg));
    
            /* Currently we only support one ICSSG port in NIMU */
            EnetAppUtils_assert(gLwipIfCbObj.numMacPorts == 1U);
    
            resCfg = &icssgCfg.resCfg;
            icssgCfg.dmaCfg = (void *)&dmaCfg;
    
            enetMcmCfg.perCfg = &icssgCfg;
        }
    #else
        else
        {
            enetMcmCfg.perCfg = NULL;
        }
    #endif
    
        EnetAppUtils_assert(NULL != enetMcmCfg.perCfg);
        EnetAppUtils_initResourceConfig(gLwipIfCbObj.enetType, EnetSoc_getCoreId(), resCfg);
    
        enetMcmCfg.enetType           = gLwipIfCbObj.enetType;
        enetMcmCfg.instId             = gLwipIfCbObj.instId;
        enetMcmCfg.setPortLinkCfg     = EnetApp_initLinkArgs;
        enetMcmCfg.numMacPorts        = gLwipIfCbObj.numMacPorts;
        enetMcmCfg.periodicTaskPeriod = ENETPHY_FSM_TICK_PERIOD_MS; /* msecs */
        enetMcmCfg.print              = EnetAppUtils_print;
    
        memcpy(&enetMcmCfg.macPortList[0U], &gLwipIfCbObj.macPortList[0U], sizeof(enetMcmCfg.macPortList));
        status = EnetMcm_init(&enetMcmCfg);
    
        return status;
    }

    我们使用矢量 VN5640捕获数据包。

     

    此致、

    Josh

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

    Aakash、您好!

    需要一些时间来修改新的 SDK、我稍后会向您提供反馈。

     

    此致、

    Josh