zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

51单片机驱动W5500设置为TCP Client进行通信测试示例

驱动测试单片机TCP通信 设置 进行 示例
2023-09-11 14:19:59 时间

51单片机驱动W5500设置为TCP Client进行通信测试示例

原文链接:https://www.yourcee.com/newsinfo/2929224.html

W5500简介

本次写一篇相关驱动W5500模组的文章,W5500 芯片是一种采用全硬件 TCP/IP 协议栈的嵌入式以太网控制器,它能使嵌入式系统通过 SPI(串行外设接口)接口轻松地连接到网络。此次准备写一下51驱动W5500作为客户端的相关说明。下面我们将看到更多关于W5500模块的说明以及如果使用它,我们也准备了相关的代码以供测试使用。
在这里插入图片描述

点击图片购买

芯片特点

①支持硬件 TCP/IP 协议:TCP、UDP、ICMP、IGMP、IPv4、ARP、IGMP、PPPoE 和以太网
②支持 8 个独立的端口(sockets)
③极小巧的 LQFP48 无铅封装
④提供休眠模式
⑤提供网络唤醒
⑥支持高速 SPI 总线(SPI 模式 0,3)
⑦内部 32K 字节存储器作 TX/RX 缓存
⑧内嵌 10/100Mbps 以太网物理层
⑨支持自动协商(10/100-Based 全双工/半双工)
⑩不支持 IP 分段
注意3.3V 工作电压,I/O 口可承受 5V 电压使用时一定要注意供电和I/O口的电压不小心的话容易烧坏模块。

引脚说明

引脚说明功能说明
3.3V3.3V 电源输入引脚
MISOSPI 主机输入从机输出引脚
MOSISPI 主机输出从机输入引脚
SCSSPI SLAVE 选择引脚(低电平有效)
SCLKSPI 主机输出从机输入引脚
5V5V 电源输入引脚
GND电源地引脚
RSTW5500 硬件初始化引脚(低电平有效
INTW5500 中断引脚(低电平有效)
NC悬空
原理图可看:电路中加了LDO从而可以允许5V供电,注意供电3.3V不要接入5V会损坏模组
在这里插入图片描述

相关寄存器

W5500具有一个公共寄存器和8个端口寄存器,TX和RX的缓冲区分配给8个端口寄存器,51单片机也可以通过查询寄存器去读取对应端口的状态来检测发送和接受数据。
在这里插入图片描述

还有一些需要用到的公共配置的寄存器去配置IP或者MAC地址还有子网掩码等参数,8个端口寄存器可用于通信,使用端口号的值可以有SPI的BSB帧【4:0】进行选择。
下图为几个重要配置参数寄存器可以分别配置网关,子网掩码,MAC物理地址等信息。
在这里插入图片描述
这些配置信息在程序中完成相关配置放入数组中存储用于取用。

相关程序

驱动芯片:STC89C52
部分相关初始化函数可看下图配置相关寄存器:
复位W5500并检测以太网连接:
在这里插入图片描述

/*******************
*复位W5500并检测W5500的连接状态
连接成功时候PHYCFGR寄存器LINK位硬件置1*
*******************/
void W5500_Hardware_Reset(void)
{
	W5500_RST=0;//复位引脚拉低
	Delay(200);
	W5500_RST=1;//复位引脚拉高
	Delay(200);
	while((Read_W5500_1Byte(PHYCFGR)&LINK)==0);//等待以太网连接完成 
	
}

初始化相关代码:
注意端口寄存器可配置TXBUFF,RXBUFF缓存空间大小
可参考手册中的示例配置:
在这里插入图片描述

void W5500_Init(void)
{
	unsigned char i=0;

	Write_W5500_1Byte(MR, RST);//软件复位W5500,置1有效,复位后自动清0
	Delay(10);//延时10ms,自己定义该函数

	//设置网关(Gateway)的IP地址,Gateway_IP为4字节unsigned char数组,自己定义 
	//使用网关可以使通信突破子网的局限,通过网关可以访问到其它子网或进入Internet
	Write_W5500_nByte(GAR, Gateway_IP, 4);
			
	//设置子网掩码(MASK)值,SUB_MASK为4字节unsigned char数组,自己定义
	//子网掩码用于子网运算
	Write_W5500_nByte(SUBR,Sub_Mask,4);		
	
	//设置物理地址,PHY_ADDR为6字节unsigned char数组,自己定义,用于唯一标识网络设备的物理地址值
	//该地址值需要到IEEE申请,按照OUI的规定,前3个字节为厂商代码,后三个字节为产品序号
	//如果自己定义物理地址,注意第一个字节必须为偶数
	Write_W5500_nByte(SHAR,Phy_Addr,6);		

	//设置本机的IP地址,IP_ADDR为4字节unsigned char数组,自己定义
	//注意,网关IP必须与本机IP属于同一个子网,否则本机将无法找到网关
	Write_W5500_nByte(SIPR,IP_Addr,4);		
	
	//设置发送缓冲区和接收缓冲区的大小,参考W5500数据手册
	for(i=0;i<8;i++)
	{
		Write_W5500_SOCK_1Byte(i,Sn_RXBUF_SIZE, 0x02);//Socket Rx memory size=2k
		Write_W5500_SOCK_1Byte(i,Sn_TXBUF_SIZE, 0x02);//Socket Tx mempry size=2k
	}

	//设置重试时间,默认为2000(200ms) 
	//每一单位数值为100微秒,初始化时值设为2000(0x07D0),等于200毫秒
	Write_W5500_2Byte(RTR, 0x07d0);

	//设置重试次数,默认为8次 
	//如果重发的次数超过设定值,则产生超时中断(相关的端口中断寄存器中的Sn_IR 超时位(TIMEOUT)置“1”)
	Write_W5500_1Byte(RCR,8);
}

测试结果图

烧入51单片机后使用电脑打开TCP服务端口即可收到单片机作为客户端发送到电脑服务端的相关数据。
==注意:==电脑服务端配置需要先配置好和单片机中程序中设置的目的IP和端口号不然没法通信传输数据。
在这里插入图片描述

总结

W5500内嵌了硬件TCP/IP协议在使用过程中比较方便直接使用SPI进行通信即可驱动,免去软件协议上的实现,对于单片机的驱动以太网通信是十分方便的,程序代码比较长,需要相关程序代码的可下方留言获取,另外可提供STM32相关驱动代码,本文对于W5500的使用总结到此结束,欢迎一键三连!!!