嗨,大家好!
我在调试C6678的网口驱动的时候遇到一个比较奇怪的问题,程序是参考Platform_Init里面初始化PHY部分的,
在configSerdes()里面:
/* Unlock the chip configuration registers to allow SGMII SERDES registers to
* be written */
CSL_BootCfgUnlockKicker();
/* Configure the SERDES */
/* Multiply to be 8 with Quarter Rate in the Rx registers */
CSL_BootCfgSetSGMIIConfigPLL (0x00000041);
platform_delaycycles(100);
//31:25 Reserved 0000000
//23:24 LOOPBACK 00
// 22 ENOC 1
//21:18 EQ 0001
//17:15 CDR 001 -- first order threshold of 17
//14:12 LOS 000 -- tie off
//11:10 ALIGN 01 -- Comma Aligned
//09:07 TERM 100 -- tie off (100)
// 06 INVPAIR 0
//05:04 RATE 01 -- tie off (10) //00 = Full Rate, 01 = Half Rate (*0.5), 10 = Quarter Rate (*0.25)
//03:01 BUSWIDTH 000 -- tie off
// 00 ENRX 1
// 0000 0000 0100 0100 0000 0010 0001 0001 = 0x0044_0211 -- My estimated value
// 0000 0000 0100 0100 0000 0100 0001 0001 = 0x0044_0411 -- New DV value
// 0000 0000 0000 1000 0000 1000 0100 0001 = 0x0008_0841 -- Original DV value
CSL_BootCfgSetSGMIIRxConfig (0, 0x00700621);
在配置了RXConfig之后,在内存中查看RX_CFG(地址为:0x02620344)的值, 没有任何改变,跟我写入的值不一样,现象是我往这个寄存器写值,但是没有写进去,
CSL_BootCfgSetSGMIITxConfig (0, 0x000108A1);
Txconfig也是一样的现象,写不进去,
然后程序会死在下面的循环里面:
do
{
CSL_SGMII_getStatus(0, &sgmii_status);
} while (sgmii_status.bIsLocked != 1);
SERDES PLL一直没有LOCK,LOCK那一位一直是0;
请各位帮忙看看,分析一下可能是什么原因导致的,先谢谢了。
我在初始化这块儿之前,只对Main PLL和PA PLL都做了初始化,其他的均没有理会。