问题反馈集锦–W5200/W5300相关

为大家整理一下 W5200 和 W5300最近客户反馈出现的问题,望对大家有所帮助。

1.  关于W5200

您好,请教一下,我在调试W5200的过程中,出现一种问题,单片机可以成功的读取W5200中寄存器中的数据,但是不能向W5200中写入数据,数据的格式完全符合官方的资料,模拟SPI和硬件SPI我都尝试过,但是效果还是一样!请教一下这是我代码的问题还是其它的问题?

 

答:关于您的问题,我建议您确认一下,是否确实能够读取W5200的寄存器。请按照以下流程确认,并反馈数据予我:

1) 测试W52003.3V1.8V输入管脚电压;

2)  查找用户手册,有一些寄存器是有默认值的,请选取一个带默认值的寄存器读取一下,并用示波器读取一下是否与寄存器的默认值相同,以确认我们确实能够正确读取寄存器;

3)   如果第2步成功,请尝试向01寄存器写入一个数据,并读取。若不同:

→ 请依次尝试写入不同的值,查看输出的值是什么?是否有规律?

烦请确认后,我们再来判断一下是代码,还是硬件的问题。

2.  W5200使用问题

w5200配置为每个接收缓冲区为2K,当接收缓冲区满时就不能接收新的数据,这时该如何处理。另外能解释下Sn_TX_RD;Sn_TX_WR;Sn_RX_RD;Sn_RX_WR的意思吗,手册上讲的很不明白。

答:

1)W5200的缓冲区的大小是可以设置的,如果你用不到8个Socket且期望通信速率有所提高,可以将缓冲区重新设置,关闭几个Socket,将部分Socket的缓冲区扩大;

2)W5200的缓冲区的数据是需要你及时发送Send命令发送出去。其写入数据类似于堆栈,如果满了的话从首地址进行覆盖写入;

3)Sn_TX_RD 传输读指针寄存器,显示传输内存里最后一个传输的地址;

Sn_TX_WR 传输写指针寄存器,指示当前写入要发送的数据的位置;

Socket n的命令寄存器执行SEND命令时,把从当前Sn_TX_RD指针地址到Sn_TX_WR指针地址的数据发送出去,并在发送完成后自动更新Sn_TX_RD的值。因此,在发送完成后,Sn_TX_RD和Sn_TX_WR的值相同。

4)Sn_RX_RD接收读指针寄存器,提供接收数据的位置信息;

Sn_RX_WR接收写指针寄存器,提供内部存储器中写入接收数据的位置信息; 

 

3. W5300包处理速度问题

我用的开发板是arm架构,处理器使用s3c2440,网卡使用的是w5300芯片。
驱动使用的是你们官网提供的驱动,驱动已经移植成功了。普通速度下ping,tcp/udp收发都没问题。

现在进行压力测试,用台式机给开发板发网络包,每个包大小为300字节,问题就出来了。
用socket 0工作在mac_raw模式下,最快只能收大约每毫秒 1.2个包,经换算速度大概为2.3Mbps,再快w5300就不工作了。
用socket 1~7,与端口绑定,不工作在mac_raw模式下,则最快大约收取每毫秒 3个包,经换算速度大约为6.87Mbps,300(字节) x 8(bit) x 3000(包/秒钟) / 1024 / 1024 = 6.87Mbps,再快w5300同样不工作。

不工作时,看各个寄存器的值,结果如下:
MR = 0x8000, Sn_MR(n) = 0x0

IMR = 0x1, Sn_IMR(n) = 0xFF

IR = 0x0, Sn_IR(n) = 0x0

Sn_SSR(n) = 0x00 , Sn_PROTOR = 0x0

这说明socket n口关闭了。

我想问的是,不论是2.3Mbps还是6.87Mbps,都没有达到你们说的使用500字节的数据包,可以达到40Mbps的速度。
这是什么原因呢。

答:感谢您的问题反馈!

我看到您是在用PC给W5300发包。不知您控制W5300的机制是什么样的?有无让W5300及时的传输数据?

如果您PC一直在发包,而W5300不做传输处理的话,容易造成RAM溢出。

另外,您使用了mac_raw模式。上层协议是什么呢?对W5300是如何控制的?

至于W5300的速率也是用户实际使用测试过的。当然,还与主控芯片的接口及处理速率有关。

不过,您的数据显然有些不太正常。

我们可以一起分析一下原因。如仍有问题,请随时联系我们。

 感谢关注!

如有任何问题,及时联系我们.

WIZnet邮箱:[email protected]

WIZnet官方主页:       http://www.iwiznet.cn/

WIZnet企业官方微博:http://e.weibo.com/wiznet2012