热度 23
2013-4-24 15:44
901 次阅读|
1 个评论
为大家整理一下 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