Part Number:TMS320C6678
测试环境:phy芯片是88E1111,dsp的SGMII 0和1都 与phy链接,时钟250MHz。
软件上,serdes的时钟配置为0x00000051;这个也没问题。
结果:网口 0 初始化会卡在CSL_SGMII_setAdvAbility (macPortNum, &sgmiiCfg);函数中的最后一步,一直不往下运行。 网口 1 能顺利初始化通过。
if (macPortNum == 1) {
/* Hold the port in soft reset and set up
* the SGMII control register:
* (1) Disable Master Mode
* (2) Enable Auto-negotiation
*/
CSL_SGMII_startRxTxSoftReset (macPortNum);
CSL_SGMII_disableMasterMode (macPortNum);
CSL_SGMII_enableAutoNegotiation (macPortNum);
CSL_SGMII_endRxTxSoftReset (macPortNum);
/* Setup the Advertised Ability register for this port:
* (1) Enable Full duplex mode
* (2) Enable Auto Negotiation
* (3) Enable the Link
*/
sgmiiCfg.linkSpeed = CSL_SGMII_1000_MBPS;
sgmiiCfg.duplexMode = CSL_SGMII_FULL_DUPLEX;
CSL_SGMII_setAdvAbility (macPortNum, &sgmiiCfg);
do
{
CSL_SGMII_getStatus(macPortNum, &sgmiiStatus);
} while (sgmiiStatus.bIsLinkUp != 1);
/* Wait for SGMII Autonegotiation to complete without error */
do
{
CSL_SGMII_getStatus(macPortNum, &sgmiiStatus);
if (sgmiiStatus.bIsAutoNegError != 0)
return; /* This is an error condition */
} while (sgmiiStatus.bIsAutoNegComplete != 1);
}
网口0和网口1的区别就是,网口1是集成在板卡内的,网口0是测试小板上的。
代码上也改动了,就只需要这里 1 改为 0 。
奇怪的是两个网口用的是同一个时钟,为啥网口1 可以初始化过去,网口 0 却卡在这里。
Shine:
用的是NDK吧?用EMAC0的话,需要做些修改。请参考下面的FAQ。Q Where and how to enable the EMAC0 on C6678 EVM's AMC connector?https://e2e.ti.com/support/processors-group/processors/f/processors-forum/418234/faq-on-keystone-ndk-network-development-kit-and-pa-packet-accelerator
,
wapdasta:
我看了一下,软件改动也没错。网口0依然不通。而且现在网口 0 初始化不过。是卡在底层SGMII 读状态寄存器那里,一直检测不到link。 还没到NDK上层应用。
网口 1 是正常的。
现在有两个问题
1,网口 0 是没有接MDIO接口的,这样会影响网口初始化不通过吗?
2,网口 0 还有个不同点是,SGMII RX TX查分线是经过调试接口出去 再到测试小板 的phy芯片 上的,这样长的距离会不会影响 DSP获取 PHY 芯片的连接状态。
,
Shine:
请问能做交叉实验吗?测试小板是否能网口1通信?
,
wapdasta:
不行的,硬件设计已经定型了,测试小板就是网口0,板卡内的是网口1.
,
Shine:
请看一下下面网口的布线要求。6 SGMII Interfacehttps://www.ti.com/lit/an/sprabc1/sprabc1.pdf