51单片机驱动W5500设置为TCP Client进行通信测试示例
- W5500简介
- 芯片特点
- 引脚说明
- 相关寄存器
- 相关程序
- 测试结果图
- 总结
原文链接: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.3V | 3.3V 电源输入引脚 |
MISO | SPI 主机输入从机输出引脚 |
MOSI | SPI 主机输出从机输入引脚 |
SCS | SPI SLAVE 选择引脚(低电平有效) |
SCLK | SPI 主机输出从机输入引脚 |
5V | 5V 电源输入引脚 |
GND | 电源地引脚 |
RST | W5500 硬件初始化引脚(低电平有效) |
INT | W5500 中断引脚(低电平有效) |
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有效,复位后自动清0Delay(10);//延时10ms,自己定义该函数//设置网关(Gateway)的IP地址,Gateway_IP为4字节unsigned char数组,自己定义 //使用网关可以使通信突破子网的局限,通过网关可以访问到其它子网或进入InternetWrite_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=2kWrite_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的使用总结到此结束,欢迎一键三连!!!