宋秋波 发表于 2021-11-7 16:17:32

STM32+RTX+LWIP+LAN8720A,网络灯闪烁,PING不通

使用STM32F107+LAN8720A芯片,使用RTX5操作系统,应用LWIP,代码移植完成后,网口灯在闪烁,但是PING不通,不知道是什么原因?
移植资料主要来源于《安富莱_STM32-V5开发板_LwIP V2.X网络教程(V0.1)》,但是由于文档中使用的PHY芯片为DM9162,而目前我使用的PHY芯片为LAN8720A。
根据移植资料:
首先通过STM32cubeMX创建一个基础工程,然后在生成的工程中通过配置RTX5操作系统与LWIP,由于LAN8720A在配置中提供相关驱动接口代码,因此代码移植完成后直接添加如下代码:

HAL_GPIO_WritePin(ETH_NRST_GPIO_Port, ETH_NRST_Pin, GPIO_PIN_RESET);
osDelay(1000);
HAL_GPIO_WritePin(ETH_NRST_GPIO_Port, ETH_NRST_Pin, GPIO_PIN_SET);
osDelay(1000);   
tcpip_init( NULL, NULL);
IP4_ADDR(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3);
IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1 , NETMASK_ADDR2, NETMASK_ADDR3);
IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3);

/* 将网络接口添加到netif_list列表 */
        netif_add(&netif, &ipaddr, &netmask, &gw, NULL, &ethernetif_init, &ethernet_input);

        /*注册默认网络接口 */
        netif_set_default(&netif);
netif_is_link_up(&netif);
        netif_set_up(&netif);

for (;;) {ethernetif_poll(&netif);}
下载程序后,发现网口灯闪烁,但是ping不通,想请问一下:KEIL配置中提供LAN8720A,在配置PHY芯片地址后,应该不会在配置修改low_level_init、low_level_output、low_level_input、ethernetif_input等函数了吧?还是需要配置其它的地方呀,谢谢!

宋秋波 发表于 2021-11-7 16:25:11

在配置上面选择LAN8742A也不行,KEIL都提供这颗芯片的驱动,不是拿来就能使用吗?不明白为什么会出现这种情况 ,本人对于LWIP不是很熟悉。请高手指点基于STM32+RTX+LWIP使用LAN8720A作为PHY芯片需要的配置,谢谢

eric2013 发表于 2021-11-8 00:34:36

试试我这个

分享个修正版RL-TCPnet V7.X和LwIP的LAN8720驱动,符合CMSIS-Driver驱动规范,适用于所有STM32系列(V1.0)
http://www.armbbs.cn/forum.php?mod=viewthread&tid=97297&fromuid=58
(出处: 硬汉嵌入式论坛)

eric2013 发表于 2021-11-8 00:34:45

试试我这个

分享个修正版RL-TCPnet V7.X和LwIP的LAN8720驱动,符合CMSIS-Driver驱动规范,适用于所有STM32系列(V1.0)
http://www.armbbs.cn/forum.php?mod=viewthread&tid=97297&fromuid=58
(出处: 硬汉嵌入式论坛)

yklstudent 发表于 2021-11-8 14:38:36

都用rtx了,直接全家桶整上啊

宋秋波 发表于 2021-11-8 16:45:42

eric2013 发表于 2021-11-8 00:34
试试我这个

分享个修正版RL-TCPnet V7.X和LwIP的LAN8720驱动,符合CMSIS-Driver驱动规范,适用于所有STM ...

大哥,,看了你的回复后,也看了链接文档,把LAN8720A的相关驱动换成你提供的调试也是一样的情况,绿灯常亮,黄灯一直闪烁,但是PING不通。使用PHY_LAN8720.c,KEIL配置时自动生成的PHY_LAN8742A.c,另外在PHY_LAN8720.c文件的PowerControl()函数中,存在PHY.bmcr = 0U;

      if (PHY.reg_wr(ETH_PHY_ADDR, REG_BMCR, PHY.bmcr) != ARM_DRIVER_OK) {
      return ARM_DRIVER_ERROR;
      }。这只把PHY配置为10M,半双工。在实际中这个可以屏蔽些代码吧?谢谢。来自一个小白的请教!

宋秋波 发表于 2021-11-8 16:48:26

yklstudent 发表于 2021-11-8 14:38
都用rtx了,直接全家桶整上啊

RTX的硬件要求资源要小些。就是国内用的人少

eric2013 发表于 2021-11-9 00:50:05

宋秋波 发表于 2021-11-8 16:45
大哥,,看了你的回复后,也看了链接文档,把LAN8720A的相关驱动换成你提供的调试也是一样的情况,绿灯常 ...

百兆全双工在这个里面呢

static int32_t SetMode (uint32_t mode)

宋秋波 发表于 2021-11-9 08:39:34

eric2013 发表于 2021-11-9 00:50
百兆全双工在这个里面呢

static int32_t SetMode (uint32_t mode)

哦,明白了,谢谢大哥,昨天后来又继续弄了RTX+LWIP,终于在大哥资料中找到光明之路,能够PING通了,想看看一直PING的效果,结果发现PING了几分钟后,反应时间就变长了,达到了2秒左右,而设备重新上电初期PING时间很快(<1ms),再请问一下,这种情况要从哪方面查找原因,谢谢!

娟娟吊打升升 发表于 2022-11-22 23:31:47

宋秋波 发表于 2021-11-9 08:39
哦,明白了,谢谢大哥,昨天后来又继续弄了RTX+LWIP,终于在大哥资料中找到光明之路,能够PING通了,想看 ...

您好,我最近在使用硬汉哥提供的《V7-2001_LwIP V2.X实验_工程移植模板(FreeRTOS)V1.1》这个固件,替换了PHY部分,也是使用的LAN8720,初始化中可以成功读取PHY的ID等,异常现象基本与你的一致,您是最终修改哪里可以Ping通的,非常期待您的指教~

eric2013 发表于 2022-11-23 16:50:38

宋秋波 发表于 2021-11-9 08:39
哦,明白了,谢谢大哥,昨天后来又继续弄了RTX+LWIP,终于在大哥资料中找到光明之路,能够PING通了,想看 ...

这个应该时任务优先级的设置问题。

eric2013 发表于 2022-11-23 16:51:58

娟娟吊打升升 发表于 2022-11-22 23:31
您好,我最近在使用硬汉哥提供的《V7-2001_LwIP V2.X实验_工程移植模板(FreeRTOS)V1.1》这个固件,替换 ...

上电后,先复位下载你的PHY芯片,如果时硬件GPIO控制复位,就GPIO复位这个芯片,如果是和MCU一个复位系统,就软件命令复位下载。一般就可以解决了。

娟娟吊打升升 发表于 2022-12-23 10:14:14

eric2013 发表于 2022-11-23 16:51
上电后,先复位下载你的PHY芯片,如果时硬件GPIO控制复位,就GPIO复位这个芯片,如果是和MCU一个复位系统 ...

我是硬件复位的,但是我示波器测了一下,发现连接LAN8720的nRST引脚电平拉不高,我测试其他引脚拉高拉低都没问题,是LAN8720的nRST引脚就是拉不到3.3还是其他问题,请硬汉大哥帮忙评估一下

eric2013 发表于 2022-12-24 16:16:14

娟娟吊打升升 发表于 2022-12-23 10:14
我是硬件复位的,但是我示波器测了一下,发现连接LAN8720的nRST引脚电平拉不高,我测试其他引脚拉高拉低 ...

这不排除硬件有点问题了,焊接确定没问题吧。

可以发送软件复位命令,复位下,也可以的。
页: [1]
查看完整版本: STM32+RTX+LWIP+LAN8720A,网络灯闪烁,PING不通