一、W5500介绍
W5500是一个集成的以太网模块,这个模块上携带TCP/IP协议,控制器只需要通过SPI协议读写其寄存器便可以以网络的方式进行数据交互。
W5500模块自带10个引脚,但由于使用其官方库,只需使用六个引脚便可以进行数据交互,这六个引脚分别为:VCC、GND、MISO、MOSI、SCS、SCLK。其中:
MISO:SPI主机输入从机输出引脚;
MOSI:SPI主机输出从机输入引脚;
SCS:SPI SLAVE选择引脚(低电平有效);
SCLK:时钟信号引脚。
和单片机的连线为:MISOPA6,MOSIPA7,SCSPA4,SCLKPA5。
在程序中操作的几个重要寄存器:
Sn_SR(Socket n 状态寄存器):指示了Socket n的状态,并根据 Sn_CR 或者一些 TCP 模式下的特殊控制包,如 SYN,FIN 包而改变;
Sn_MR(Socket n 模式寄存器):该寄存器用于配置所有 Socket 的选项或协议类型;
Sn_IR (Socket n 中断寄存器):该寄存器用于提供给 Socket n 中断类型信息;
Sn_RXBUF_SIZE (Socket n 接收缓存大小寄存器):该寄存器配置了 Socket n 的接收缓存大小。Socket n 接收缓存区大小可以配置为 1,2,4,8 和 16Kbytes。
二、UDP、TCP介绍
UDP是基于IP的简单协议,是不可靠的协议,其优点是简单、轻量化和速度快,缺点是没有流控制,没有应答确认机制,不能解决丢包、重发和错序问题。UDP不是面向连接的,是不可靠的传输。
TCP是面向连接的协议,也就是说,在收发数据前,必须和对方建立一个可靠的连接。 一个TCP连接必须要经过三次握手才能建立起来,简单的描述下这三次握手的过程:
首先,我让信使运输一份信件给对方,对方收到了那么他就知道了我的发件能力和他的收件能力是可以的,这是第一次握手。
然后,他就给我回信,我若收到了,我便知道了我的发件能力和他的收件能力是可以的,并且他的发件能力和我的收件能力也是可以的,这是第二次握手。
然而此时他还不知道他的发件能力和我的收件能力到底可不可以,于是我最后反馈一次,他若收到了,他便清楚了他的发件能力和我的收件能力是可以的,这便是第三次握手。
三次握手结束便建立起了连接。以上是一种通俗化的理解,其实在三次握手过程中会发送数据包,并根据数据包进行判断二者的收发能力。
三、程序实现TCPS、TCPC、UDP的过程
1、TCPS,单片机作为TCP的服务器,在该程序的实现部分通过函数获取Sn_SR寄存器的值来判断Socket的状态,若Socket处于关闭状态则调用函数打开Socket;若Socket已处于初始化状态则建立监听;若Socket处于连接建立状态,则清除接收的中断标志位并进行回环测试,接收来自Client的数据,并将此数据再次发送给Client;若Socket处于等待关闭的状态则调用函数关闭Socket。
2、TCPC,单片机作为TCP的客户端,同样在程序的实现部分通过函数获取Sn_SR寄存器的值来判断Socket的状态,若Socket处于关闭状态则调用函数打开Socket;若Socket已处于初始化状态则建立连接;若Socket处于连接建立状态,则清除接收的中断标志位并进行回环测试,接收来自Server的数据,并将此数据再次发送给Server;若Socket处于等待关闭的状态则调用函数关闭Socket。
3、UDP,在程序的实现部分通过函数获取Sn_SR寄存器的值来判断Socket的状态,若Socket处于关闭状态则调用函数打开Socket;若Socket处于UDP模式,则清除接收的中断标志位并进行回环测试,接收来自上位机的数据,并将此数据先发送至单片机再次发送给上位机,在此模式中不再需要建立连接,只需将IP地址和端口设置好即可。文章来源:https://www.toymoban.com/news/detail-400472.html
四、遇到的问题及解决
在实现UDP的时候出现了上位机发送数据但是返回值是-1的情况,刚开始我去网上查找原因,说是recvfrom函数的问题,但这是一个官方库且我不太相信UDP实现函数没有问题,所以我就对UDP相关标志位进行了修改,修改过后就可以实现UDP的功能。
在其功能都实现了之后就开始将其移植到UCOS中去,想都没想直接将相关文件进行移动,并替换掉原来UCOS项目的文件,刚开始觉得不是太难,但是移植过后尝试运行失败,然后就进行一步一步的调试,发现跳过UART函数初始化之后网络可以进行连接,这时候恍然大悟,UART的相关设置发生变化导致整个系统启动出错,最后将UART初始化换了回去,便可以进行网络连接和串口输出。
五、回环测试截图文章来源地址https://www.toymoban.com/news/detail-400472.html
到了这里,关于【使用W5500实现UDP、TCP通信】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!