Lan8720上电不插网线,一直重启,求助

2019-07-20 21:51发布

重启的表面原因是开启了看门狗,由于上电初始化网口的时候没插网线,程序卡在 文件:stm324x7_eth.c中的ETH_ReadPHYRegister()函数中的
  do
  {
    timeout++;
    tmpreg = ETH->MACMIIAR;
  } while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_READ_TO));
  
  应该可以通过修改超时时间,使看门狗不重启,但是感觉,不插网线就读不到寄存器不应该啊

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
xsx127
1楼-- · 2019-07-20 22:23
来结贴了,已发现原因:
1,确实是网线不插,初始化的时候stm32f4x7_eth文件里面会读取从lan8720读取一些状态,而都是有超时时间限制,所以,如果开了看门狗,几个超时加一起,看门狗就把程序重启了。(这个原因只是碰巧看门狗与到库文件里面的超时,把超时时间改短,或者直接去掉都是可以的,毕竟延时一下网线也不会自己插上)
2,下面程序中的Link_Up,我最开始是Link_Down,也就是原本的逻辑是网线没连接的时候初始化lwip,加载网卡,错误逻辑,现在改成插上网线再添加网卡,
当然这里只是初始化了lwip,如果网线没插的话。如果要热拔插,还需任务监测网线状态,随时的netif_set_up和netif_set_down lwip的网卡(主要原因)
[mw_shl_code=c,true]netif_set_default(&xnetif);
       
        if(Link_Up == GetGB_LinkState())
        {
                netif_set_up(&xnetif);
               
                #ifdef LWIP_DHCP
                        SetGB_DHCPState(DHCP_START);
                #endif
        }
        else
        {
                /*  When the netif link is down this function must be called.*/
                netif_set_down(&xnetif);
               
                #ifdef LWIP_DHCP
                        SetGB_DHCPState(DHCP_LINK_DOWN);
                #endif
        }
   
        /* Set the link callback function, this function is called on change of link status*/
        netif_set_link_callback(&xnetif, ETH_link_callback);[/mw_shl_code]
weilong1370
2楼-- · 2019-07-21 00:22
 精彩回答 2  元偷偷看……
xsx127
3楼-- · 2019-07-21 02:22
weilong1370 发表于 2016-5-30 16:54
原子的例程里面不插网线是无法初始化的

那他估计也是卡在读取寄存器那里了吧,难道这个网络芯片就是这样的?
lrser
4楼-- · 2019-07-21 07:37
是因为添加网卡失败无法初始化
xsx127
5楼-- · 2019-07-21 12:01
顶一下,有人知道怎么解决么
正点原子
6楼-- · 2019-07-21 17:21
 精彩回答 2  元偷偷看……

一周热门 更多>