改章节朋友在青岛喝咖啡的时候突然想到的...今天就有想写几篇关于寄存器数据的文章,所以回家到之后就奋笔疾书的写出来发布了
为大家整顿一下 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邮箱:[email protected]
WIZnet官方主页: http://www.iwiznet.cn/
WIZnet官方博客: http://blog.iwiznet.cn/
WIZnet业企官方微博:http://e.weibo.com/wiznet2012
文章结束给大家分享下程序员的一些笑话语录: 一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”