器件型号: AM263P4
您好的团队、
我使用的是 MCU_PLUS_SDK AM263Px 版本 11.0、在运行以太网示例时遇到问题。 从日志中、我怀疑 MAC 端口 IOCTL 调用存在问题。 这会导致示例故障、读取 PHY 寄存器失败以及对 MAC 端口的 IOCTL 调用失败并显示错误代码。
您能帮助我解决这些错误吗?
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.
器件型号: 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