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.

C6678配置SGMII serdes时出错

嗨,大家好!

我在调试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都做了初始化,其他的均没有理会。

  • 大家帮帮忙啊,给点提示嘛!

  • Hi, Meng,

    根据你提供的信息,PLL设置的参数是0x41,对应x8 multiplier,CFGRX配置的0x00700621,对应x10 multiplier。

    建议把PLL设置调整为0x51,参见下面手册截图说明。

  • 您好,为什么说:CFGRX配置的0x00700621,对应x10 multiplier?

    配置MPY不是用的SGMII_SERDES_CFGPLL这个吗。设为0x41则为X8,设为0x51则为X5.

    另:原EVM板的时钟是312.5MHZ,我们的时钟是156.25MHZ,我把这个参数SGMII_SERDES_CFGPLL由X8改为X16的设置。但是MCSDK下的demo  hua跑不通

    ,卡在下处

    do

        {

            rc = NC_NetStart( hCfg, NetworkOpen, NetworkClose, NetworkIPAddr );

        } while( rc > 0 );

    进一步跟入该库函数,发现在

    在Init_MAC 函数里面的CSL_CPGMAC_SL_resetMac (macPortNum);语句有问题。

    期待您的回复。

    谢谢

  • 是通过SGMII_SERDES_CFGPLL寄存器配置MPY字段的,该字段的具体定义如下:

    注意MPY字段是SGMII_SERDES_CFGPLL的bit[7:1],然后bit0是为1的,所以设置x8时,该寄存器低8位的值为0100000_1(对应为0x41),同理,设置x10时,低8位为0101000_1(对应为0x51)

    CFGRX寄存器设置类似,请仔细核对寄存器对应的每个字段值,然后得出该寄存器的值。

  • 谢谢您的回复

    我板子SGMII的时钟是156.25MHZ,原EVM板是312.5MHZ,我对应把MPY设置X16,原为X8

    但是还是有如上面提问的那个问题。跑不通。

    请您指导下

    谢谢