硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1424|回复: 8
收起左侧

[以太网] STM32H7手动移植LAN8720底层驱动及LWIP协议栈

[复制链接]

1

主题

7

回帖

10

积分

新手上路

积分
10
发表于 2023-2-16 20:45:11 | 显示全部楼层 |阅读模式
大家好,第一次写贴,请多包涵!
       我是使用STM32CubeMX创建的基础工程,包含FreeRTOS操作系统及一个调试串口,后通过网络中一系列的教程将PHY芯片、MAC的驱动移植完毕,加入LWIP协议栈,上层应用任务中是仿照硬汉发表的《Lwip网络教程》中的逻辑编写的,初步目的是进行UDP通信。
       然而我在一切做完后,发现问题为电脑Ping单片机的ip,ping不通,显示超时,也就是基本通信是断的,然后我跟踪排查发现我的底层驱动是没有问题的,读取PHY芯片(LAN8720)的信息是可以读取成功的,并且上层应用是有实时获取网线是否连接的程序也是可以成功检测的。
      接下来我也进行过好多资料查找,大部分都说是需要重启PHY芯片,然后我实测我单片机上面的重启引脚有问题,然后按照硬汉的指导加入软件重启指令(我不确定加的是否正确),依旧还是无法通信,所以想发此贴请教大家,我接下来该如何排查此问题,我会将源码工程及部分程序逻辑截图附贴,希望大家能不吝赐教!感谢大家!



上层逻辑 任务一

上层逻辑 任务一

上层逻辑 任务二

上层逻辑 任务二

上层逻辑 任务三

上层逻辑 任务三

软件重启逻辑-low_level_init函数内

软件重启逻辑-low_level_init函数内

STH7_MANUAL_MIGRATION_LWIP_HAL - 副本.7z

17.96 MB, 下载次数: 28

源码文件

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2023-2-17 09:25:33 | 显示全部楼层
H7的网络例子,一般ping不通是MPU的Cache配置问题。

1、主RAM空间,也就是MDK的Option选项里面设置跟我的那个一样,使用一个主RAM空间
2、 MPU的Cache配置跟我的那个也设置成一样的,你试试是否可行。
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2023-2-17 21:31:38 | 显示全部楼层
eric2013 发表于 2023-2-17 09:25
H7的网络例子,一般ping不通是MPU的Cache配置问题。

1、主RAM空间,也就是MDK的Option选项里面设置跟我 ...

硬汉大哥,您好,我的MPU配置与您出的《V7-2001_LwIP V2.X实验_工程移植模板(FreeRTOS)V1.1》这个工程配置是一致的,我的SRAM2是勾选的,我试了不勾也不行,还是ping不通,请求超时。

这种情况我是否可以从某种方向进行调试排查?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2023-2-18 01:40:28 | 显示全部楼层
娟娟吊打升升 发表于 2023-2-17 21:31
硬汉大哥,您好,我的MPU配置与您出的《V7-2001_LwIP V2.X实验_工程移植模板(FreeRTOS)V1.1》这个工程 ...

分享你的工程到百度网盘,我看下。
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2023-2-18 23:44:32 | 显示全部楼层
eric2013 发表于 2023-2-18 01:40
分享你的工程到百度网盘,我看下。

好的,硬汉哥,链接如下,昨天我调试,ping单片机是可以触发中断的,但是内部接收的数据就是一些IP等信息,不太懂ping包内部正常逻辑应该如何处理,所以就还是没排查到是哪里有问题导致没ping通。

链接:https://pan.baidu.com/s/1gISNPIuoHdb7Fi6pFIk67A?pwd=5z7s
提取码:5z7s

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2023-2-20 02:35:16 | 显示全部楼层
娟娟吊打升升 发表于 2023-2-18 23:44
好的,硬汉哥,链接如下,昨天我调试,ping单片机是可以触发中断的,但是内部接收的数据就是一些IP等信息 ...

这个地方不勾选,这个。

另外你可以直接参考我们的那个使用MDK RTE全部生成就行。
image.png


回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2023-2-20 21:24:47 | 显示全部楼层
eric2013 发表于 2023-2-20 02:35
这个地方不勾选,这个。

另外你可以直接参考我们的那个使用MDK RTE全部生成就行。

嗯嗯,硬汉哥,我其实是先使用CubeMX生成过一份Lwip的工程,已将三种接口的UDP、TCP做过测试了,现在就是想手动移植这个再加深学习一下,但是没想到卡在这里~

那个IRAM1不勾选测试了,还是不可以。。。
回复

使用道具 举报

1

主题

7

回帖

10

积分

新手上路

积分
10
 楼主| 发表于 2023-2-23 00:18:34 | 显示全部楼层
感谢硬汉大哥的一直以来的热心帮助,此问题已解决。
我会将排查思路及方法附在下面,希望对看到此贴的人获得灵感~

1. 我的问题是可以读取PHY的信息及检查网线是否连接,通过电脑Ping单片机IP也可以进入中断;
2. 所以我使用wireshark抓包查看Ping走的是icmp协议,因此逐步排查接收数据后为啥进入不到icmp协议中解包,跟踪发现if ((netif_is_up(netif)) && (!ip4_addr_isany_val(*netif_ip4_addr(netif))))此判断过不去;
3. 之后查看后面的与内幕才能中的数值是吻合的,也就是(netif_is_up(netif))这个函数不过,追查发现能够置位此标志的只有一个netif_set_up()函数;
4. 然后我直接全局搜索,我只有在初始化调用了它,但是这个函数是在一个if判断内,再看硬汉大哥的工程是直接调用的,所以我提出来后测试发现已可以正常ping通及udp通信;

此处结贴,最近事多,总结有些仓促,如有疑问可附贴回复!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2023-2-23 09:48:35 | 显示全部楼层
娟娟吊打升升 发表于 2023-2-23 00:18
感谢硬汉大哥的一直以来的热心帮助,此问题已解决。
我会将排查思路及方法附在下面,希望对看到此贴的人获 ...

谢谢告知最终原因。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-11 15:13 , Processed in 0.190751 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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