搜索
bottom↓
回复: 7

用STM32F427驱动LAN8720,网线重新插拔后不能识别请教

[复制链接]

出0入0汤圆

发表于 2019-4-28 14:22:51 | 显示全部楼层 |阅读模式
本帖最后由 dwj0 于 2019-4-28 15:02 编辑

我用STM32F427驱动LAN8720,当使用自动协商功能时,一切正常。
但自动协商时,如果网线没有连接,那么等待的时间有点长。
因此我使用不自动协商,强制指定百兆全双工。网线插上开机能正常工作,但是当我重新插拔网线之后,网线灯就不亮了。
我查看了自动协商状态完成时,也是百兆全双工啊,而且以前DM9161这么用也没有问题,怎么8720不行呢?

另外,能过调试发现,使用不自动协商,当我网线拔掉,重新插上时,检查状态寄存器BSR中的Link Status位为0,就是没有检测到网线插入

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2019-4-28 14:28:03 | 显示全部楼层
另外,不使用自动协商时,强制指定百兆半双工,也能正常工作, 难道还有哪个寄存器需要设置?

出0入0汤圆

发表于 2019-4-28 15:29:12 | 显示全部楼层
既然上电能检测到网线,当检测网线拔掉后,复位一下8720, 应当就可以了

出0入0汤圆

 楼主| 发表于 2019-4-28 17:07:15 | 显示全部楼层
xiaomu 发表于 2019-4-28 15:29
既然上电能检测到网线,当检测网线拔掉后,复位一下8720, 应当就可以了

不行啊, 我可以检测到网线拔掉,并重新复位一下,但复位完后,网线还是没有插入,等插入的时候又不通了。

出0入0汤圆

发表于 2019-5-6 21:27:17 | 显示全部楼层
可以利用状态机,当检测到网线拔掉后,不进行关键以太网程序处理;网线再次插入后,重新复位PHY或者重新初始化。

出0入0汤圆

 楼主| 发表于 2019-5-7 13:24:31 来自手机 | 显示全部楼层
bigharpoon 发表于 2019-5-6 21:27
可以利用状态机,当检测到网线拔掉后,不进行关键以太网程序处理;网线再次插入后,重新复位PHY或者重新初 ...

就是检测不到网线插入啊,读状态寄存器还是没插入状态。
后来还是改成自动协商了,更改了会卡住的函数

出0入0汤圆

发表于 2019-5-7 13:39:31 | 显示全部楼层
当时在官方的Demo上面改的,跑的RTOS网线插拔木问题啊,多半自己问题

出0入0汤圆

发表于 2019-5-7 13:48:10 | 显示全部楼层
  1. void Eth_Link_IT_task( void * pvParameters )
  2. {
  3.   uint32_t pcPHYAddress;
  4.   pcPHYAddress = ( uint32_t  ) pvParameters;

  5.   for(;;)
  6.   {
  7.                   PhyRegistData = ETH_ReadPHYRegister((uint16_t) pcPHYAddress, PHY_BSR) & PHY_Linked_Status;
  8.                   if(PhyRegistData == 0 ){
  9.                                 printf("Link Down!\r\n");
  10.                                 netif_set_link_down(&xnetif);
  11.                                
  12.                                 PhyLinked = 0;
  13.                                 #ifdef USE_DHCP
  14.                                 if(SysCfg.DHCP_Enable){
  15.                                         DHCP_state = DHCP_LINK_DOWN;
  16.                                 }
  17.                                 #endif
  18.                                
  19.                         }
  20.                         else{
  21.                                 if(PhyLinked == 0){
  22.                                         printf("Link up!\r\n");
  23.                                         netif_set_link_up(&xnetif);
  24.                                         PhyLinked = 1;
  25.                                         #ifdef USE_DHCP
  26.                                         if(SysCfg.DHCP_Enable){
  27.                                          DHCP_state = DHCP_START;
  28.                                         }
  29.                                   #endif
  30.                                 }
  31.                         }
  32.                  vTaskDelay(1000);
  33.   }
  34. }
复制代码
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-19 10:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表