搜索
bottom↓
回复: 23

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

[复制链接]

出5入42汤圆

发表于 2014-8-15 21:57:45 | 显示全部楼层 |阅读模式
用的官方的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程序。所以不知道这个问题的原因?求指导!

附件是抓包文件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

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

出0入0汤圆

发表于 2014-8-15 22:06:33 | 显示全部楼层
端口                  

出5入42汤圆

 楼主| 发表于 2014-8-17 09:47:49 来自手机 | 显示全部楼层
端口没问题啊,开始用502做modbus,后来直接用TCP调试工具做数据收发,都是握手过不去。真不知道问题出在哪?

出5入42汤圆

 楼主| 发表于 2014-8-17 09:48:35 来自手机 | 显示全部楼层
今天在研究研究。

出0入0汤圆

发表于 2014-8-17 11:25:33 | 显示全部楼层
kevin_me 发表于 2014-8-17 09:48
今天在研究研究。

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

出5入42汤圆

 楼主| 发表于 2014-8-17 19:33:27 | 显示全部楼层
kinsno 发表于 2014-8-17 11:25
你这个小模块从哪买到的啊?

淘宝就有啊亲

出0入0汤圆

发表于 2014-8-17 20:16:44 | 显示全部楼层

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

出5入42汤圆

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

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

出0入0汤圆

发表于 2014-8-18 04:39:52 来自手机 | 显示全部楼层
买最便宜那个就可以了

出0入42汤圆

发表于 2014-8-18 08:16:43 来自手机 | 显示全部楼层
80端口开监听了没

出0入169汤圆

发表于 2014-8-18 08:41:20 | 显示全部楼层
官方程序里面好多坑的,要自己整理下才好用。
5500有没有坑不知道反正我以前用5100的时候填了至少有5-6个坑了。

出0入0汤圆

发表于 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错误。

出5入42汤圆

 楼主| 发表于 2014-8-23 22:42:59 | 显示全部楼层
过来回个帖。
TCP数据收发已经调试好了。
下一步准备把Freemodbus TCP移植进去。
之前出错的原因竟然是,这个芯片初始化一次,有时竟然会出现初始化不成功,有时一次成功,有时要初始化两次。

出0入228汤圆

发表于 2014-8-24 10:30:06 | 显示全部楼层
w5500,有个PHYCFG 寄存器,LZ可以仔细看一下。
我上电之后,是重新启动一下PHY的。

出5入42汤圆

 楼主| 发表于 2014-8-24 20:26:54 | 显示全部楼层
wxws 发表于 2014-8-24 10:30
w5500,有个PHYCFG 寄存器,LZ可以仔细看一下。
我上电之后,是重新启动一下PHY的。 ...

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

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

然后开始初始化。

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

出0入0汤圆

发表于 2014-8-25 03:49:31 来自手机 | 显示全部楼层
我没做硬件RsT.   phy能捡则到当前联机状态. 重启百分百成功.

出0入0汤圆

发表于 2014-8-25 03:54:18 来自手机 | 显示全部楼层
你外接一个开关电源来供电,开时控制插座。看初始化成功率.是否变差

出0入0汤圆

发表于 2014-9-12 17:21:04 | 显示全部楼层
新出W5500模块,有需要的坛友购买前说是在论坛上看到信息的,一律50元包邮,有兴趣请点击一下链接,谢谢支持。

http://item.taobao.com/item.htm? ... &id=40933615687

出0入0汤圆

发表于 2014-10-7 19:40:17 | 显示全部楼层
学习,W5500稳定性如何?

出0入30汤圆

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

出5入42汤圆

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

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

出0入30汤圆

发表于 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参数。
还在测试。请问兄台你最后的解决方案?

出5入42汤圆

 楼主| 发表于 2016-11-1 16:09:13 | 显示全部楼层
lovelywwei 发表于 2016-11-1 12:53
我目前这样处理:
第一个问题:W5500 配置两次,在上电自检前和自检后分别配置一次。
第二个问题:这个 ...

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

  1. void W5500_Configuration(unsigned char ethx)
  2. {
  3.         if(ethx==eth1)
  4.         {
  5.                 GPIO_SetBits(GPIO_W5500_1st_RST_PORT, GPIO_W5500_1st_RST_Pin);
  6.                 Delay_ms(100);
  7.                 /* Reset PHY */
  8.                 Write_1_Byte(PHYCFGR, 0, eth1);       
  9.                 Delay_ms(50);
  10.                 Write_1_Byte(PHYCFGR, 0xb8, eth1);       
  11.                 Delay_ms(50);
  12.                 /* Reset all registers */
  13.                 Write_1_Byte(MR, RST, eth1);
  14.                 Delay_ms(20);        /*delay 20ms */
  15.                 /* Set Gateway IP */               
  16.                 Write_Bytes(GAR, eth1_gateway, 4, eth1);
  17.                 /* Set Subnet Mask */
  18.                 Write_Bytes(SUBR, eth1_netmask, 4, eth1);
  19.                 /* Set MAC Address */
  20.                 Write_Bytes(SHAR, eth1_MACaddr, 6, eth1);
  21.                 /* Set W5500 IP */
  22.                 Write_Bytes(SIPR, eth1_IPaddr, 4, eth1);
  23.                 /* Enable auto send keep alive packet */
  24.                 setkeepalive(0, eth1);               
  25.         }
复制代码

出0入0汤圆

发表于 2019-8-4 19:54:46 | 显示全部楼层
lovelywwei 发表于 2016-11-1 12:53
我目前这样处理:
第一个问题:W5500 配置两次,在上电自检前和自检后分别配置一次。
第二个问题:这个 ...

兄弟最后解决了吗,我是PING 正常,但是后来读出的IP等都是0 ,但是又可以PING的通,不知道什么原因,谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 15:27

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

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