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程序。所以不知道这个问题的原因?求指导!
附件是抓包文件。
端口 端口没问题啊,开始用502做modbus,后来直接用TCP调试工具做数据收发,都是握手过不去。真不知道问题出在哪? 今天在研究研究。 kevin_me 发表于 2014-8-17 09:48
今天在研究研究。
你这个小模块从哪买到的啊? kinsno 发表于 2014-8-17 11:25
你这个小模块从哪买到的啊?
淘宝就有啊亲 kevin_me 发表于 2014-8-17 19:33
淘宝就有啊亲
好吧,你这标准的淘宝体了,如果在这里不方便,是否能站内给个链接呢,不过我还是觉得在这里给好,因为没准还有和我一样有需求的人呢! kinsno 发表于 2014-8-17 20:16
好吧,你这标准的淘宝体了,如果在这里不方便,是否能站内给个链接呢,不过我还是觉得在这里给好,因为没 ...
淘宝搜索W5500第一页就有,就那一家卖 买最便宜那个就可以了 80端口开监听了没 官方程序里面好多坑的,要自己整理下才好用。
5500有没有坑不知道反正我以前用5100的时候填了至少有5-6个坑了。 TCP处理程序会在自己认为的异常时刻发送RST包。例如,A向B发起连接,但B之上并未监听相应的端口,这时B操作系统上的TCP处理程序会发RST包。
又比如,AB正常建立连接了,正在通讯时,A向B发送了FIN包要求关连接,B发送ACK后,网断了,A通过若干原因放弃了这个连接(例如进程重启)。网通了后,B又开始发数据包,A收到后表示压力很大,不知道这野连接哪来的,就发了个RST包强制把连接关了,B收到后会出现connect reset by peer错误。 过来回个帖。
TCP数据收发已经调试好了。
下一步准备把Freemodbus TCP移植进去。
之前出错的原因竟然是,这个芯片初始化一次,有时竟然会出现初始化不成功,有时一次成功,有时要初始化两次。
w5500,有个PHYCFG 寄存器,LZ可以仔细看一下。
我上电之后,是重新启动一下PHY的。 wxws 发表于 2014-8-24 10:30
w5500,有个PHYCFG 寄存器,LZ可以仔细看一下。
我上电之后,是重新启动一下PHY的。 ...
重启之后,初始化一次成功吗?我没有重启PHY。
我的顺序是:上电之后先软件控制IO,做一次硬件RST复位,然后软件SPI使MR寄存器做一次RST。
然后开始初始化。
重启PHY的意义在哪?请指点。 我没做硬件RsT. phy能捡则到当前联机状态. 重启百分百成功. 你外接一个开关电源来供电,开时控制插座。看初始化成功率.是否变差 新出W5500模块,有需要的坛友购买前说是在论坛上看到信息的,一律50元包邮,有兴趣请点击一下链接,谢谢支持。
http://item.taobao.com/item.htm?spm=a1z10.1.w4004-7343112040.2.3px53r&id=40933615687 学习,W5500稳定性如何? 好吧,碰到同样的问题。
第一、上电后配置W5500,写进去的IP等又读出来,确认写成功了。程序中开个tcp server,始终连接不上,结果一调试发现IP地址在进入主循环前变成了全为0.
第二、W5500作为服务器,开了两个socket,有一个端口可以连接,另一个始终处于established状态,但client来连接时,抓包发现W5500返回RST&ACK包。 lovelywwei 发表于 2016-10-31 23:11
好吧,碰到同样的问题。
第一、上电后配置W5500,写进去的IP等又读出来,确认写成功了。程序中开个tcp serv ...
你解决没有?我这个项目已经做完了,还没发现什么大bug kevin_me 发表于 2016-11-1 09:10
你解决没有?我这个项目已经做完了,还没发现什么大bug
我目前这样处理:
第一个问题:W5500 配置两次,在上电自检前和自检后分别配置一次。
第二个问题:这个现象出现在客户端已经成功连接W5500后,设备断电再上电或者程序重新运行。
在这种情况下,客户端认为连接还有效(处于established状态),但实际上设备重新上电后,作为Server,还处于listen状态。
通过wireshark抓包可以看到,客户端在这种情况下发送数据给server,server 会返回 RST/ACK包,提示客户端关闭此连接。使用调试工具,带自动重连功能的,只要发送一下数据,然后就可以再连上了。
如果连接没有经过正常的四次握手断开,就会出现这个情况。
发现这个问题后,参考google的结果,配置了keepalive参数。
还在测试。请问兄台你最后的解决方案? 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);
} lovelywwei 发表于 2016-11-1 12:53
我目前这样处理:
第一个问题:W5500 配置两次,在上电自检前和自检后分别配置一次。
第二个问题:这个 ...
兄弟最后解决了吗,我是PING 正常,但是后来读出的IP等都是0 ,但是又可以PING的通,不知道什么原因,谢谢
页:
[1]