为大家整理一下 W5200 和 W5300最近客户反馈出现的问题,望对大家有所帮助。
1. 关于W5200
您好,请教一下,我在调试W5200的过程中,出现一种问题,单片机可以成功的读取W5200中寄存器中的数据,但是不能向W5200中写入数据,数据的格式完全符合官方的资料,模拟SPI和硬件SPI我都尝试过,但是效果还是一样!请教一下这是我代码的问题还是其它的问题?
答:关于您的问题,我建议您确认一下,是否确实能够读取W5200的寄存器。请按照以下流程确认,并反馈数据予我:
1) 测试W5200的3.3V及1.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邮箱:wiznetbj@wiznettechnology.com
WIZnet官方主页: http://www.iwiznet.cn/
WIZnet官方博客: http://www.iwiznet.cn/
WIZnet企业官方微博:http://e.weibo.com/wiznet2012
用户1647523 2013-4-24 15:45