自己参考开发板设计的6678通过SGMII1接口与88E1111相连进行以太网通信的板卡(SGMII0没有连接),连接与配置都与开发板一样。
问题描述如下:
(1):板子刚做好调试的时候,利用MCSDK下的helloworld例程,在电脑上可以ping通;
(2):由于项目一直没有交,板子搁置了很久一段时间,现在再连接通信的时候,千兆以太网的指示LED灯并不是每次上电的时候都能点亮,需要重复上电好几次才会亮,一开始以为是网线与板卡连接的网口有问题,后来将网线直接飞线到板卡上,还是同样的情况;
(3):当千兆以太网灯亮的时候,再用helloworld例程,则程序在初始化SGMII的时候总是初始化不过,发现程序卡在platform_lib_evmc6678l中的Init_SGMII函数中如下标红的部分:
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);
}
这应该是SGMII1的link up没有link通,初步估计是硬件问题,但检查电源时钟都没有问题,且同样的代码在开发板上完全可以跑通并ping通!
求指导,如果是硬件问题,应该从哪里开始检查,还是88E11111的外围电路配置有问题??
谢谢!