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.

TMS320C6678: Wait_PHY_link()

Part Number: TMS320C6678


自制板,调试百兆网,时钟为156.25MHz。参考STK的例程,使用的是SGMII0,在程序中已将SGMII port 0设置为GE_PORT_CABLE_CONNECT。使用的网线是100Mbps,在程序中也已经将速率设置为ETHERNET_100M_FULLDUPLEX。

但测试ETHERNET_MAC_LOOPBACK,ETHERNET_SGMII_LOOPBACK,ETHERNET_SERDES_LOOPBACK以及ETHERNET_LOOPBACK_DISABLE模式,程序一直运行在 while(0==gpMDIO_regs->LINK_REG&(1<<i));也就是wait_phy_link()。

请问这可能是哪里出现了问题?

  • 最新测试结果:

    上电运行第一次仍然是wait_phy_link

    当我暂停程序,点restart,然后再运行程序,就可以link通,出现这种问题可能是什么原因呢?

  • 如果再次能Link通的话,代码配置应该正确的。请看一下是不是硬件上的问题,如DSP这边复位信号是否足够长,PHY那边的时钟信号是否稳定?

  • if(NULL == mdio_cfg)
    return;

    TSC_delay_us(100);

    gpMDIO_regs->CONTROL_REG= CSL_MDIO_CONTROL_REG_ENABLE_MASK
    |CSL_MDIO_CONTROL_REG_FAULT_MASK
    |CSL_MDIO_CONTROL_REG_FAULT_DETECT_ENABLE_MASK
    |(mdio_cfg->clock_div<<CSL_MDIO_CONTROL_REG_CLKDIV_SHIFT);

    发现在第一次初始化时mdioregs的值并不是设置的这个值,而restart再初始化就是这个值。

    随后设置断点进行调试,发现这段代码加入断点逐行运行,一次也可以lnk通,于是就加了延迟,发现确实可以一次性link通,原因是为什么我也解释不上来,但是现在确实是link通了。

  • 感谢分享解决方法!