嵌入式技术论坛
直播中

申换换

7年用户 1513经验值
私信 关注
[问答]

求问单片机以太网不能双向ping通的问题

请大家帮我看看这个问题:我现在有两块相同的板子,mcu是GD32F450,工程使用的是官方源码bsp中的gd32450z-eval,lwip版本是2.0.3。
在使用以太网外设的时候:
上电后两块板子都可ping通电脑(IP192.168.1.168),
如果用任意一块板子比如板子1(IP192.168.1.30)ping板子2(IP192.168.1.31)可以ping通,
反过来板子2却ping不通板子1,
此时如果复位重启任意一块板子,板子2就可以ping通板子1,
但是板子1又ping不通板子2了;
就像是谁先ping谁能通,被ping的不能反ping回来。
伴随着一个问题是我用udp从一个板子发送上万字节给另一个板子(在能ping通的情况下),接收的板子只能收到1024字节。
这两块板子我之前因为GD的设备驱动不完善一直跑的是STM32f429的bsp,用的是st的设备驱动和HAL库,板子双向ping和udp收发数据都是正常的。因为存在一些其他的小问题,最近把应用程序移植回GD的bsp上,出现了上边说的问题。
请各位大神帮我看看
2.jpg
3.jpg


回帖(3)

李红

2023-4-20 15:48:52
抓包解君愁
板子里面,可以在驱动中把收发包都dump出来
网络拓扑结构画下
2个板子的MAC地址检查下
举报

申换换

2023-4-20 15:49:02
感谢您的回答!是MAC地址的问题,429的bsp是使用单片机uid生成MAC地址,gd的bsp是填入的固定值做测试用。修改后可以双向ping通了。
举报

王树林

2023-4-20 15:49:11
我之前也遇到了,只能单向ping通,双向只能ping通一次,后面就ping不通了,但用UDP发数据都是通的,应该是ping程序的bug。
后来抓包,发现有很多ARP的包,每次通信前都需要把IP地址翻译成MAC地址,具体原因最后没时间找了,但可以确实的是网络层合成的IP数据包是没有问题的,但向下传给链路层又经过了好几个函数,传递的是指针没有复制数据包。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分