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.
自己参考开发板设计的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的外围电路配置有问题??
谢谢!
试一下SGMII Sedes环回测试就可以确定问题是在PHY上还是DSP上:
你可以用下面链接中提到的测试程序测试来做测试:
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx?pi2132219853=1
JInlong wang4,您好!
请问您的问题3解决了吗?我现在也是遇到这个问题,6678无法与88E1111,link up。
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/p/65274/150112.aspx#150112
这是我发的帖子,麻烦您帮忙看看,谢谢
我现在用的c6657的开发板,有类似的问题。SGMII无法和phy连接(status的状态是0x30),phy芯片是88E1112。而且用过emac的环回例子是通过的。
以下是sgmii配置:
CSL_BootCfgSetSGMIITxConfig (0, 0x000108A1);
CSL_BootCfgSetSGMIIRxConfig (0, 0x00700621);
CSL_BootCfgSetSGMIIConfigPLL (0x00000051);
可能跟PHY的配置有关,下面是一个例程,具体问题请咨询PHY厂商:
void marvell_88e151x_init_phy(int phy_addr) { Uint16 uiRegValue; /* As per Marvell Release Notes - Alaska 88E1510/88E1518/88E1512/88E1514 Rev A0, Errata Section 3.1 */ KeyStone_MDIO_PHY_Set_Reg(phy_addr, 22, 0x00ff); /* reg page 0xff */ KeyStone_MDIO_PHY_Set_Reg(phy_addr, 17, 0x214B); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 16, 0x2144); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 17, 0x0C28); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 16, 0x2146); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 17, 0xB233); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 16, 0x214D); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 17, 0xCC0C); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 16, 0x2159); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 22, 0x0000); /* reg page 0 */ KeyStone_MDIO_PHY_Set_Reg(phy_addr, 22, 18); /* reg page 18 */ /* Write HWCFG_MODE = SGMII to Copper */ uiRegValue = KeyStone_MDIO_PHY_Get_Reg(phy_addr, 20); uiRegValue &= (~0x7); uiRegValue |= 1; KeyStone_MDIO_PHY_Set_Reg(phy_addr, 20, uiRegValue); /* Phy reset */ uiRegValue = KeyStone_MDIO_PHY_Get_Reg(phy_addr, 20); uiRegValue |= (1<<15); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 20, uiRegValue); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 22, 0); /* reg page 0 */ /*KeyStone EMAC does not support 1000M half-duplex. Configure the PHY register 9_0.8 to 0, which means 1000Mbps half duplex will not be advertised to the remote side which connects to the copper media of this PHY. This step will make sure that the copper side of PHY will not negotiate 1000Mbps half duplex capability with remote media.*/ uiRegValue = KeyStone_MDIO_PHY_Get_Reg(phy_addr, 9); uiRegValue &= ~(1<<8); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 9, uiRegValue); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 22, 2); /* reg page 2 */ /*Configure the PHY register 21_2 "default MAC interface speed" to 01, which means 100Mbps. This step will make sure when the Fiber/SGMII side of PHY status switch between link up and link down, it will not issue 1000M half duplex request to CPSGMII module of the DSP. (Note, this configuration will NEVER force the link rate to 100Mbps, the link rate depends on the final negotiation result) */ uiRegValue = KeyStone_MDIO_PHY_Get_Reg(phy_addr, 21); uiRegValue |= (1<<13); uiRegValue &= ~(1<<6); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 21, uiRegValue); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 22, 0); /* reg page 0 */ /* software reset to make configuration take effect*/ uiRegValue = KeyStone_MDIO_PHY_Get_Reg(phy_addr, 0); uiRegValue |= (1<<15); KeyStone_MDIO_PHY_Set_Reg(phy_addr, 0, uiRegValue); }