自己参考开发板设计的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的外围电路配置有问题??
谢谢!
Brighton Feng:
试一下SGMII Sedes环回测试就可以确定问题是在PHY上还是DSP上:
你可以用下面链接中提到的测试程序测试来做测试:
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx?pi2132219853=1
,
heqiang yang:
JInlong wang4,您好!
请问您的问题3解决了吗?我现在也是遇到这个问题,6678无法与88E1111,link up。
https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_DSP_bq24113-bq24103-cmode-ttc
这是我发的帖子,麻烦您帮忙看看,谢谢
,
yue sun1:
我现在用的c6657的开发板,有类似的问题。SGMII无法和phy连接(status的状态是0x30),phy芯片是88E1112。而且用过emac的环回例子是通过的。
以下是sgmii配置:
CSL_BootCfgSetSGMIITxConfig (0, 0x000108A1);
CSL_BootCfgSetSGMIIRxConfig (0, 0x00700621);
CSL_BootCfgSetSGMIIConfigPLL (0x00000051);
,
Brighton Feng:
可能跟PHY的配置有关,下面是一个例程,具体问题请咨询PHY厂商:
void marvell_88e151x_init_phy(int phy_addr) {Uint16 uiRegValue;/* As per Marvell Release Notes - Alaska 88E1510/88E1518/88E1512/88E1514Rev 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 willnot be advertised to the remote side which connects to the copper media ofthis PHY. This step will make sure that the copper side of PHY will notnegotiate 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, whichmeans 100Mbps. This step will make sure when the Fiber/SGMII side of PHY statusswitch between link up and link down, it will not issue 1000M half duplex requestto CPSGMII module of the DSP. (Note, this configuration will NEVER force thelink 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);}
,
fendou yang:
您好:
我们的板子也是,自协商失败。不知道您是否已经解决了,问题出在哪个地方,怎么解决的。万分感谢!
,
wayne1:
你好,请问你的问题解决了吗?我遇到和你同样的问题。请不吝赐教,谢谢!
,
renyi su:
KeyStone_MDIO_PHY_Set_Reg 实现文件在哪里?置顶的 K1_STK_v1.1.zip 包中没有 MDIO 的接口。
,
David Tan:
在".\common\KeyStone_GE_Init_drv.c"里有KeyStone_MDIO_PHY_Set_Reg,但例程里没看到用过
,
L G2:
phy_addr这个地址改如何确定呢
,
Li Feng1:
请问这一块应该插入到helloWorld的哪个位置?
谢谢!
,
user5801771:
您好,被这个问题困扰一年了,请问最后您是怎么解决的?请不吝赐教,感谢!
TI中文支持网



