W5500在单片机中的测试及长字节的发送和接收

W5500的学习和使用

拷贝源程序、测试程序、修改传输字节

正在学习和使用W5500,经测试某宝买到的模块所附带的代码可以用,并且效果还不错。但是在使用过程中就会出现一点点的小问题(在TCP服务器下使用出现的情况):
单次发送或者接收的字节大于30个字节的时候,程序就会出现跑飞的情况,通过找其中的原因,发现程序的作者所设定的最大的发送字节是30个,超过了30个字节就会出现内存溢出,程序就跑飞了。
找到了问题的所在,那就好办了,剩下的就是解决这个问题,看W5500的芯片资料,然后知道了修改的方法,首先看一下W5500的芯片手册对这一块的描述:

上述图片描述的是,W5500模块在不同模式下所能发送的字节的范围,其中处于TCP模式下最简单,因为在TCP模式下,索要传输的数据比MTU大时,会自动的将传输的数据划分为默认的MTU传输号单(详见W5500芯片手册中的关于Sn_MSSR的描述)
就这样,修改了原程序中的最大分片长度(在Socket_Init函数中),将其去掉,或者修改为你想要的 字节长度,看到这里你以为已经完了吗?NO,There is another question.
问题就是所使用的单片机的内部RAM是有限的,不可能得到自己想要的很大的字节,只能说是相当大的字节;对于我现在所用的60S2来说,她的RAM空间是1K那么在定义的时候就不能超过,并且单次发送的字节也不能超过这个字节。如果单次发送的字节超过定义的字节的大小就会出现程序乱跑,具体解释的原因是所定义的数组存放不了所接收的所有字节,内存溢出导致的。可以在源程序中加入一个限定条件,当收到的数据的字节数大于所定义的数组时,只接收数组大小的内容,剩下的内容不再接收,这样就好了。


这里发送的字节已经超过了30个字节,现在已经基本大功告成。

另外再说说在其中所遇到的小问题:

1.使用计算机来ping单片机的时候,发生里偏移(看图来说明):


从图中可以看出MISCOMPARE 位于偏移199,但是在使用32个字节来ping的时候就不会出现这样的问题,然后我就想找这样的零界点,结果还真被我给找到了,在下图可以看到结果:


从图中可以看出来它的偏移零界点为119个字节,超过这个字节就会发生偏移。但是按道理来讲的话,我们已经设置好了W5500的最大传输字节,我们肯定设置的字节是超过119的,但是还会出现这样的情况,所以我猜测可能是其在封装的时候其ping的字节数已经固化在其中了,这就导致了ping出现这样的问题,另外我在网上看到大多数人都碰到过这样的问题,当然这只是一个猜测而已。

2.烧了一个W5500模块,检测发现是由于正负极反接导致的钽电解电容击穿短路,由于我断电较块,对芯片没什么影响,所以在网上搜了个AMS1117-3.3的电路,照着电路又换了个电解电容,就又可以工作了,又省了我几十块,有兴趣的可以了解一下钽电解电容。另外贴上我找到的AMS1117-3.3稳压电源的电路图以供参考;


猜你喜欢

转载自blog.csdn.net/qq_21903491/article/details/72638557