TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320C6678: 网口link状态不对

Part Number:TMS320C6678

【环境】TMS320C6678 + 88E111

【问题描述】

TMS320C6678 + 88E111环境下进行网口功能开发,初始化SGMII的时候程序一直卡在通过CSL_SGMII_getStatus获取sgmii状态的流程里。

【当前排查点】

1、在调用获取sgmii状态函数前使用CSL_SGMII_enableLoopback函数设置sgmii自回环模式,获取sgmii状态是正确的。

2、查看phy的指示灯,连接网线后LED_LINK1000,LED_DUPLEX正常点亮,LED_RX处于闪烁状态,初步判定phy工作正常。

3、在另一块开发板上进行代码测试,通信正常,说明代码没有问题。

4、查看phy和mac部分的原理图,phy时钟部分 正常的板卡原理图上XTAL1和XTAL2连接的是25M差分时钟,异常的原理图上XTAL1连接的是25M单端时钟,XTAL1悬空,查看88E1111手册,该时钟配置应该是支持的。

5、phy配置引脚设置,配置中只有phy地址感觉会影响phy和mac之间的通信,其他配置应该对连接状态没有影响,由于硬件不太好更改,phy地址设置为0测试不通

附出问题的原理图及初始化部分代码:

初始化部分代码:

void init_sgmii (uint32_t macPortNum)
{
int32_t wait_time;
CSL_SGMII_ADVABILITY sgmiiCfg;
CSL_SGMII_STATUS sgmiiStatus;

/* Configure the SERDES, set MPY as 10x mode */
CSL_BootCfgSetSGMIIConfigPLL(0x00000051);

/* delay 100 cycles */
cpu_delaycycles(100);

/*
* ENRX: 0x1 – Enable Receive Channel
* RATE: 0x10 – PLL output clock rate by a factor of 2x
* ALIGN: 0x01 – Enable Comma alignment
* EQ : 0xC – Set to 1100b when RATE = 0x10
* ENOC: 0x1 – Enable offset compensation
*/
CSL_BootCfgSetSGMIIRxConfig (macPortNum, 0x00700621);
/*
* ENRX: 0x1 – Enable Transmit channel
* RATE: 0x10 – PLL output clock rate by a factor of 2x
* INVPAIR: 0x0 – Normal polarity
*/
CSL_BootCfgSetSGMIITxConfig (macPortNum, 0x000108A1);

/* Wait sgmii serdes configure complete time set as 1ms */
wait_time = 1000;
while(wait_time) {
CSL_SGMII_getStatus(macPortNum, &sgmiiStatus);
if (sgmiiStatus.bIsLocked == 1) {
break;
} else {
/* delay 1000 cycles */
cpu_delaycycles(1000);
wait_time –;
}
}

if(wait_time == 0) {
printf("configure sgmii0 serdes time out!\n");
return;
}

/* Reset the port before configuring it */
CSL_SGMII_doSoftReset(macPortNum);
while(CSL_SGMII_getSoftResetStatus(macPortNum) != 0);

/*
* 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);
//CSL_SGMII_enableLoopback(macPortNum);//loopback

/*
* 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;
sgmiiCfg.bLinkUp = 1;
CSL_SGMII_setAdvAbility(macPortNum, &sgmiiCfg);

do {
CSL_SGMII_getStatus(macPortNum, &sgmiiStatus);
} while(sgmiiStatus.bIsLinkUp != 1);

/* All done with configuration. Return Now. */
return;
}

原理图:

【疑问】

1、当前代码中使用的地址是mac的地址,6678中固定两个值0和1,phy地址是否需要在程序中指定?

2、当前通过灯的状态是否可以确认phy的自协商及接收状态是正常的,mac自闭环可以link是否证明mac配置是正常的,那还有其他会影响link状态的因素吗?如何进行后续的排查?

望能够得到各位专家的指点!

Nancy Wang:

请参考Keystone I 以太网子系统调试手册看一下:

www.ti.com/…/zhca536.pdf

,

?? ?:

请问这里的测试例程在哪里能找到?

,

?? ?:

问题已解决通过CSL_BootCfgSetSGMIIConfigPLL修改SERDES时钟为156.25M

,

Nancy Wang:

好的,感谢分享!

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6678: 网口link状态不对
分享到: 更多 (0)