工程是用的ST的网口移植例程,RMII模式,无操作系统,硬件是STM32F107+DP83848C。在移植LwIP的过程中,发现网络可以连接(硬件板接电脑),但是就是ping不通,但连接也要很久,不知道是什么问题。后来软件单步跟踪调试,发现他在这个函数
/* Configure Ethernet */
ETH_Init(Ð_InitStructure, PHY_ADDRESS);
也就是配置DP83848的地方没有得到正确的返回值ETH_SUCCESS。在跟踪进入这个函数,结果发现它在
/* We wait for linked satus... */
do
{
timeout++;
} while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_Linked_Status) && (timeout < PHY_READ_TO));
这里做循环,直到超时,即timeout达到PHY_READ_TO,就返回不成功的ETH_ERROR。在仔细看,其实它是因为没有读到PHY_Linked_Status这个状态造成的。当然我在跟踪到ETH_ReadPHYRegister的内部,在
do
{
timeout++;
tmpreg = ETH->MACMIIAR;
} while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_READ_TO));
这里出现了问题,这个ETH_ReadPHYRegister函数,实在费劲,一句一句的啃,还是不甚明了,求解释
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1、硬件有问题,但仔细查看硬件中STM32和DP83848相应管脚的连接,并用万用表测试,都是通的,并且DP83848一些关键的电阻和引脚的接法参考数据手册也没问题,实在不知为何。所以寻求各位知道的给个解释,还有不有其他需要特别注意的地方???
2、软件会不会是其他地方的问题,但调试的时候因为是单步,没有跟踪到真正的问题所在处???如果说这儿初始化都不成功,为何后面还能和电脑建立连接,不懂???
3、可不可能是因为在初始化时,也就是在读这个建立连接成功与否的状态之前的配置本身就不正确呢???
4、当然还有其他的问题,我知道的也不多,因此求解???
人微言轻,只要能给出意见或解答,无论可否,将不胜感激……
一周热门 更多>