kevin_me 发表于 2014-8-15 21:57:45

W5500模块,TCP握手为什么响应Reset,移植的官方demo

用的官方的W5500模块,移植的官方的程序。

模块如下:


写IP,mac,和mask都正常,ping和ARP响应也正常。

本来想调试modbus,结果发现tcp握手时,芯片响应不正常,导致客户端重发TCP握手请求,响应仍不正常。

正常的握手流程是:

客户端SYN——>服务器

客户端<——服务器SYN&ACK

客户端ACK——>服务器

完成之后,客户端才发modbus请求,我这里用的是modscan。

抓包如图:(W5500的IP是192.168.1.130;PC客户端的IP是192.168.1.213)



因为TCP握手是硬件完成的,我软件没有干预,初始化配置也是一直demo程序。所以不知道这个问题的原因?求指导!

附件是抓包文件。

tohell 发表于 2014-8-15 22:06:33

端口                  

kevin_me 发表于 2014-8-17 09:47:49

端口没问题啊,开始用502做modbus,后来直接用TCP调试工具做数据收发,都是握手过不去。真不知道问题出在哪?

kevin_me 发表于 2014-8-17 09:48:35

今天在研究研究。

kinsno 发表于 2014-8-17 11:25:33

kevin_me 发表于 2014-8-17 09:48
今天在研究研究。

你这个小模块从哪买到的啊?

kevin_me 发表于 2014-8-17 19:33:27

kinsno 发表于 2014-8-17 11:25
你这个小模块从哪买到的啊?

淘宝就有啊亲

kinsno 发表于 2014-8-17 20:16:44

kevin_me 发表于 2014-8-17 19:33
淘宝就有啊亲

好吧,你这标准的淘宝体了,如果在这里不方便,是否能站内给个链接呢,不过我还是觉得在这里给好,因为没准还有和我一样有需求的人呢!

kevin_me 发表于 2014-8-17 20:38:10

kinsno 发表于 2014-8-17 20:16
好吧,你这标准的淘宝体了,如果在这里不方便,是否能站内给个链接呢,不过我还是觉得在这里给好,因为没 ...

淘宝搜索W5500第一页就有,就那一家卖

wxws_wxws 发表于 2014-8-18 04:39:52

买最便宜那个就可以了

albert_w 发表于 2014-8-18 08:16:43

80端口开监听了没

d__xin 发表于 2014-8-18 08:41:20

官方程序里面好多坑的,要自己整理下才好用。
5500有没有坑不知道反正我以前用5100的时候填了至少有5-6个坑了。

meirenai 发表于 2014-8-19 19:03:18

TCP处理程序会在自己认为的异常时刻发送RST包。例如,A向B发起连接,但B之上并未监听相应的端口,这时B操作系统上的TCP处理程序会发RST包。
又比如,AB正常建立连接了,正在通讯时,A向B发送了FIN包要求关连接,B发送ACK后,网断了,A通过若干原因放弃了这个连接(例如进程重启)。网通了后,B又开始发数据包,A收到后表示压力很大,不知道这野连接哪来的,就发了个RST包强制把连接关了,B收到后会出现connect reset by peer错误。

kevin_me 发表于 2014-8-23 22:42:59

过来回个帖。
TCP数据收发已经调试好了。
下一步准备把Freemodbus TCP移植进去。
之前出错的原因竟然是,这个芯片初始化一次,有时竟然会出现初始化不成功,有时一次成功,有时要初始化两次。

wxws 发表于 2014-8-24 10:30:06

w5500,有个PHYCFG 寄存器,LZ可以仔细看一下。
我上电之后,是重新启动一下PHY的。

kevin_me 发表于 2014-8-24 20:26:54

wxws 发表于 2014-8-24 10:30
w5500,有个PHYCFG 寄存器,LZ可以仔细看一下。
我上电之后,是重新启动一下PHY的。 ...

重启之后,初始化一次成功吗?我没有重启PHY。

我的顺序是:上电之后先软件控制IO,做一次硬件RST复位,然后软件SPI使MR寄存器做一次RST。

然后开始初始化。

重启PHY的意义在哪?请指点。

wxws_wxws 发表于 2014-8-25 03:49:31

我没做硬件RsT.   phy能捡则到当前联机状态. 重启百分百成功.

wxws_wxws 发表于 2014-8-25 03:54:18

你外接一个开关电源来供电,开时控制插座。看初始化成功率.是否变差

YIXINDZ 发表于 2014-9-12 17:21:04

新出W5500模块,有需要的坛友购买前说是在论坛上看到信息的,一律50元包邮,有兴趣请点击一下链接,谢谢支持。

http://item.taobao.com/item.htm?spm=a1z10.1.w4004-7343112040.2.3px53r&id=40933615687

so_so_so_so 发表于 2014-10-7 19:40:17

学习,W5500稳定性如何?

lovelywwei 发表于 2016-10-31 23:11:14

好吧,碰到同样的问题。
第一、上电后配置W5500,写进去的IP等又读出来,确认写成功了。程序中开个tcp server,始终连接不上,结果一调试发现IP地址在进入主循环前变成了全为0.
第二、W5500作为服务器,开了两个socket,有一个端口可以连接,另一个始终处于established状态,但client来连接时,抓包发现W5500返回RST&ACK包。

kevin_me 发表于 2016-11-1 09:10:18

lovelywwei 发表于 2016-10-31 23:11
好吧,碰到同样的问题。
第一、上电后配置W5500,写进去的IP等又读出来,确认写成功了。程序中开个tcp serv ...

你解决没有?我这个项目已经做完了,还没发现什么大bug

lovelywwei 发表于 2016-11-1 12:53:55

kevin_me 发表于 2016-11-1 09:10
你解决没有?我这个项目已经做完了,还没发现什么大bug


我目前这样处理:
第一个问题:W5500 配置两次,在上电自检前和自检后分别配置一次。
第二个问题:这个现象出现在客户端已经成功连接W5500后,设备断电再上电或者程序重新运行。
在这种情况下,客户端认为连接还有效(处于established状态),但实际上设备重新上电后,作为Server,还处于listen状态。
通过wireshark抓包可以看到,客户端在这种情况下发送数据给server,server 会返回 RST/ACK包,提示客户端关闭此连接。使用调试工具,带自动重连功能的,只要发送一下数据,然后就可以再连上了。

如果连接没有经过正常的四次握手断开,就会出现这个情况。
发现这个问题后,参考google的结果,配置了keepalive参数。
还在测试。请问兄台你最后的解决方案?

kevin_me 发表于 2016-11-1 16:09:13

lovelywwei 发表于 2016-11-1 12:53
我目前这样处理:
第一个问题:W5500 配置两次,在上电自检前和自检后分别配置一次。
第二个问题:这个 ...

下面是我初始化代码,目前没发现什么问题,你参考一下,14年做的工程,细节忘了

void W5500_Configuration(unsigned char ethx)
{
        if(ethx==eth1)
        {
                GPIO_SetBits(GPIO_W5500_1st_RST_PORT, GPIO_W5500_1st_RST_Pin);
                Delay_ms(100);
                /* Reset PHY */
                Write_1_Byte(PHYCFGR, 0, eth1);       
                Delay_ms(50);
                Write_1_Byte(PHYCFGR, 0xb8, eth1);       
                Delay_ms(50);
                /* Reset all registers */
                Write_1_Byte(MR, RST, eth1);
                Delay_ms(20);        /*delay 20ms */
                /* Set Gateway IP */               
                Write_Bytes(GAR, eth1_gateway, 4, eth1);
                /* Set Subnet Mask */
                Write_Bytes(SUBR, eth1_netmask, 4, eth1);
                /* Set MAC Address */
                Write_Bytes(SHAR, eth1_MACaddr, 6, eth1);
                /* Set W5500 IP */
                Write_Bytes(SIPR, eth1_IPaddr, 4, eth1);
                /* Enable auto send keep alive packet */
                setkeepalive(0, eth1);               
        }

ersha4877 发表于 2019-8-4 19:54:46

lovelywwei 发表于 2016-11-1 12:53
我目前这样处理:
第一个问题:W5500 配置两次,在上电自检前和自检后分别配置一次。
第二个问题:这个 ...

兄弟最后解决了吗,我是PING 正常,但是后来读出的IP等都是0 ,但是又可以PING的通,不知道什么原因,谢谢
页: [1]
查看完整版本: W5500模块,TCP握手为什么响应Reset,移植的官方demo