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.

[FAQ] [参考译文] 【常见问题解答】AM263P4:AM263Px:以太网 MAC 端口 IOCTL API 面临的问题。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1584591/faq-am263p4-am263px-facing-issues-with-ethernet-mac-port-ioctl-api

器件型号: AM263P4

您好的团队、

我使用的是 MCU_PLUS_SDK AM263Px 版本 11.0、在运行以太网示例时遇到问题。 从日志中、我怀疑 MAC 端口 IOCTL 调用存在问题。 这会导致示例故障、读取 PHY 寄存器失败以及对 MAC 端口的 IOCTL 调用失败并显示错误代码。  

您能帮助我解决这些错误吗?

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

    您好、

    请按照以下步骤解决 MACPORT IOCTL 相关问题:

    1.打开 mcu_plus_sdk 并导航至  C:\ti\mcu_plus_sdk_am263px_11_00_00_19\source\networking\enet\core\core\core\mod\cpsw_macport.c src

    2.将“CpswMacPort_ioctl"API 替换“ 替换为以下更新的 API:

    int32_t CpswMacPort_ioctl(CpswMacPort_Handle hPort,
                              uint32_t cmd,
                              Enet_IoctlPrms *prms)
    {
        int32_t status = ENET_SOK;
    
        ENETTRACE_VERBOSE("%s: Do IOCTL 0x%08x prms %p\n", hPort->name, cmd, prms);
    
        CSL_Xge_cpswRegs *regs = (CSL_Xge_cpswRegs *)hPort->virtAddr;
    #if ENET_CFG_IS_ON(CPSW_MACPORT_SGMII)
        CSL_CpsgmiiRegs *sgmiiRegs = (CSL_CpsgmiiRegs *)hPort->virtAddr2;
    #endif
        Enet_MacPort macPort = hPort->macPort;
        uint32_t portId = ENET_MACPORT_ID(macPort);
    
        ENETTRACE_VAR(portId);
    #if ENET_CFG_IS_ON(DEV_ERROR)
        /* Validate CPSW MAC port IOCTL parameters */
        if (ENET_IOCTL_GET_PER(cmd) == ENET_IOCTL_PER_CPSW)
        {
            if (ENET_IOCTL_GET_TYPE(cmd) == ENET_IOCTL_TYPE_PUBLIC)
            {
                status = Enet_validateIoctl(cmd, prms,
                                            gCpswMacPort_ioctlValidate,
                                            ENET_ARRAYSIZE(gCpswMacPort_ioctlValidate));
            }
            else
            {
                status = Enet_validateIoctl(cmd, prms,
                                            gCpswMacPort_privIoctlValidate,
                                            ENET_ARRAYSIZE(gCpswMacPort_privIoctlValidate));
            }
    
            ENETTRACE_ERR_IF(status != ENET_SOK, "MAC %u: IOCTL 0x%08x params are not valid\n", portId, cmd);
        }
    #endif
    
        if (status == ENET_SOK)
        {
            CpswMacPortIoctlHandler * ioctlHandlerFxn;
    
            ioctlHandlerFxn = CpswMacPort_getIoctlHandlerFxn(cmd, CpswMacPortIoctlHandlerRegistry, ENET_ARRAYSIZE(CpswMacPortIoctlHandlerRegistry));
            Enet_devAssert(ioctlHandlerFxn != NULL);
            status = ioctlHandlerFxn(hPort, regs,prms);
        }
        else
        {
            ENETTRACE_ERR("%s: IOCTL validation failed for cmd 0x%08x: %d\n", hPort->name, cmd, status);
        }
    
        if (status != ENET_SOK)
        {
            ENETTRACE_ERR("%s: Failed to do IOCTL cmd 0x%08x: %d\n", hPort->name, cmd, status);
        }
    
        return status;
    }

    3.使用 mcu_plus_sdk 目录中的以下命令构建 enet-cpsw 库 Re:

    # FOR RELEASE BUILD
    gmake -sj -f makefile.am263px enet-cpsw_r5f.ti-arm-clang.freertos
    
    # FOR DEBUG BUILD
    gmake -sj -f makefile.am263px enet-cpsw_r5f.ti-arm-clang.freertos PROFILE=debug

    请注意、该库不能从 CCS 构建、该示例仅在构建期间链接这些库。 因此、有必要重新构建库、以便在应用中获得更新的驱动程序文件。

    新构建的库可在以下位置找到: c:\ti\mcu_plus_sdk_am263px_11_00_00_19\source\networking\enet\lib

    4. Re — 构建您的应用程序并重新测试。

    此致、
    Shaunak

    查看有关 AM263x/AM263Px 的其他常见问题解答

    查看 AM261x 的其他常见问题解答