主题中讨论的其他器件:DP83826I、 SysConfig
您好、TI 专家、
当我们在软件中集成 DP83826i 以将其用于我们自己的硬件问题方面取得了良好进展时、我们在 MII 模式下使用具有 ICSS-EMAC 的 PROFINET 堆栈(SDK 版本08.03.00.18)时遇到了问题:
我们使用 enet_icssg_layer2示例测试了硬件、一切似乎都正常。 我们还使用自己的固件 Enet(ICSS)和 lwip 检查了 PHY<->MII 通信的正确行为。
下一步是使用 PROFINET 堆栈对其进行测试:
我们使用的 PHY 地址和 MII 引脚配置与 Enet (ICSS)+ LWIP 固件中的相同、但没有有效以太网通信的迹象(我们尝试了 DCP 服务+其中没有由器件发送的 LLDP 帧)。
我更深入地进行了调试、并调试了 ICSS_EMAC.c:
- rxInterruptHandler()被调用-> RX 正在工作
- ICSS_EMAC_txPacket()被调用-> RX 和数据包处理似乎正常,但在 Wireshark 上看不到来自器件的传输
我再次尝试检查 EVM 上的行为、因为我确信 EVM 上的一切正常-它按预期工作。
当我检查基于 EVM 的固件的 SysConfig 时、我发现在该硬件目标上还配置了"MII"、即使该硬件上应该有 RGMII 接口。
这让我感到困惑、因此我检查了 ICSS-EMAC 代码中 define ICSS_EMAC_MII_MODE 的用法以及 ICSS_EMAC_LOCAL_c 文件第818ff 行和881ff 行中的以下代码段的用法、我对此表示注意:
/* Need this change for tx pin swap in mii mode for AM64x, AM243x and AM263x only*/ if( (((ICSS_EMAC_Attrs *)icssEmacHandle->attrs)->phyToMacInterfaceMode == ICSS_EMAC_MII_MODE) && (((((ICSS_EMAC_Object *)icssEmacHandle->object)->icssRevision) == 0x103) || ((((ICSS_EMAC_Object *)icssEmacHandle->object)->icssRevision) == 0x203)) ) { if(ICSS_EMAC_MODE_SWITCH == (((ICSS_EMAC_Attrs *)icssEmacHandle->attrs))->portMask) { /*Switch mode*/ HW_WR_FIELD32((pruicssHwAttrs->miiRtCfgRegBase) + CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0, CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0_TX_MUX_SEL0, 0x0); } else { HW_WR_FIELD32((pruicssHwAttrs->miiRtCfgRegBase) + CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0, CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0_TX_MUX_SEL0, 0x1); } } else { if(ICSS_EMAC_MODE_SWITCH == (((ICSS_EMAC_Attrs *)icssEmacHandle->attrs))->portMask) { /*Switch mode*/ HW_WR_FIELD32((pruicssHwAttrs->miiRtCfgRegBase) + CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0, CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0_TX_MUX_SEL0, 0x1); } else { HW_WR_FIELD32((pruicssHwAttrs->miiRtCfgRegBase) + CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0, CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0_TX_MUX_SEL0, 0x0); } }
执行了一些针对 MII 模式的特殊 TX 引脚交换、这可能是问题的原因。 为了检查这一点、我调换了 if 子句的第一部分以检查 phyToMacInterfaceMode 是否为 ICSS_EMAC_RGMII_MODE、并重新编译了 ICSS_EMAC 库。
在进行更改后、以太网帧按预期发送。
我们这边是否会有任何配置错误、或者 SDK 中的 if 子句是否错误?
此致
Alex