W5500通讯性能测试
W5500通讯性能测试

以太网TCP在W5500上的通讯性能测试author: ANGRY KUA MAXQQ : 2518383357Time : 2018-01-12本文为原创,转载请通知作者,文中代码,请勿用于商业用途!1. 概述当前以太网在嵌入式系统中使用范围越来越广,而一个性能稳定,高效率的以太网传输方式能大幅度降低产品开发周期与售后成本。
本文以作者工作环境中使用过的以太网芯片W5500 (硬件协议栈)与LWIP (软件协议栈)作为测试对象,这次只测试W5500性能测试,下次再测试LWIP。
2. 测试环境本次使用STM32F107搭配W5500进行带宽测试,W5500使用SPI 口通讯,时钟可以跑到80M,即理论可以速率为10MB ;下次也使用STM32F107搭配83848跑LWIP做验证测试。
(使用相同的MCU做数据分析才有对比价值,提前透漏,LWIP的性能比W5500要强一点,但W5500价格偏低,占用资源也少一些)STM32F107与W5500的通讯,采用SPI的DMA方式;初始化W5500为四个端口,各个收发缓存为(8K,4K,2K,2K),缓存对收发速度有影响。
测试的端口收发缓存为3. TCP测试数据3.1. W5500上传数据函数switch(getSn_SR(NET_TYPE_TCP)){case SOCK_INIT:liste n( NET_TYPE_TCP);break;case SOCK_ESTABLISHED:if(getSn_IR(NET_TYPE_TCP) & Sn_IR_CON){setSn_IR(NET_TYPE_TCB n」R_CON);}len=getSn_RX_RSR(NET_TYPE_TCP);if(le n>0){len = (le n > NET_BUF_RXSIZE)?NET_BUF_RXSIZE:le n;len = recv(NET_TYPE_TCPet_rxbuf,le n);if(le n > 0){while(1) //作死的发送{send(NET_TYPE_TCntet_rxbuf,1460); //本函数为阻塞函数,发生成功后,本函数才会返回}}}break;case SOCK_FIN_WAIT:case SOCK_CLOSING:case SOCK_TIME_WAIT:case SOCK_CLOSE_WAIT:case SOCK_LAST_ACK:close(NET_TYPE_TCP);break;case SOCK_CLOSED:socket(NET_TYPE_TCSn_MR_TCPnet_sys_i nfo->debug_save_i nfo.n et.port,Sn_MR_ND);break;default:break;}3.2. W5500 上传速率网络传输速率我们使用IPOP工具与360自带的加速球查看,其中IPOP软件以bit为单位,其实际的速度与360监测的一致(6080/8=750KB),即W5500在SPI速率为18兆位/秒的速度下测试,测试出来的通讯速度可达到750K左右,作者使用STM32F407做测试,上传速率可以达到3.5MB以上,STM32F107的通讯速率截图如下:3.3. W5500下载数据函数While⑴{switch(getSn_SR(NET_TYPE_TCP)){case SOCK_INIT:liste n( NET_TYPE_TCP);break;case SOCK_ESTABLISHED: if(getSn_IR(NET_TYPE_TCP) & Sn_IR_CON) { setSn_IR(NET_TYPE_TCS n」R_CON);}len=getSn_RX_RSR(NET_TYPE_TCP);if(le n>0){len = (le n > NET_BUF_RXSIZE)?NET_BUF_RXSIZE:le n; len =recv(NET_TYPE_TCPet_rxbuf,le n);if(le n > 0)memcpy( net_tempbuf, net_rxbuf,le n);// 收到的数据保存//}}break;case SOCK_FIN_WAIT:case SOCK_CLOSING:case SOCK_TIME_WAIT:case SOCK_CLOSE_WAIT:case SOCK_LAST_ACK:close(NET_TYPE_TCP);break;case SOCK_CLOSED:socket(NET_TYPE_TCBn_MR_TCPnet_sys_i nfo->debug_save_i nfo.n et.port,Sn_MR_ND);break;default:break;}}3.4. W5500下载速率测试出来的通讯速度可达到600K左右,但实际波动比较大,受限制与MCU的性能。
W5500问题集锦

W5500问题集锦(一)发布时间:2013-11-27 阅读次数:1445 字体大小: 【小】【中】【大】在”WIZnet杯”以太网技术竞赛中,有很多参赛者在使用中对W5500有各种各样的疑问,对于这款WIZnet新推出的以太网芯片,使用中大家是不是也一样存在以下问题呢?来看一看:1.W5500不支持自动极性变换,有点失望……答:其实,只要对方支持极性变换就可以实现,现在的设备不支持极性变换的很少的。
你要是碰到个别老设备连不上,再换交叉线也不迟。
基本上2000年以后的设备都没问题的啦~原帖来自:9MCU2.W5500+STM32F0无法通信问题描述1:我现在做毕设,老师推荐买了W5500这款芯片,与STM32F0进行通信。
但是根据收集到的资料,修改的例程找不到问题所在。
对于网络这部分,本人小白一个,附上程序,希望大家指导一下!谢谢!答1:先附上W5500的例程问题描述2:如果ping 不通,TCP连接不能建立是代码的问题吗?loopback的程序步骤是怎样的答2:W5500 若想Ping通的话需要保证以下2点:1)物理信道通信正常:初步判定Link 灯及状态灯指示正常。
2)配置了W5500的IP,网关,子网掩码,MAC地址这些特殊寄存器由于W5500内部硬件逻辑电路实现了ARP协议。
所以,一旦收到ping包请求的话,会自动回复。
以上的设置不过是为了保证基本信道及通讯能够建立的而已。
反向而言,如果Ping不通,也可以先从这两方面着手。
原帖来自:9MCU3.W5500没指明接收缓冲数据格式,和W5100一样?问题描述:习惯码字和调试分离,虽然待会调试就知道了,也不妨提出来沟通下。
答:注意SPI帧的不同。
W5100:W5500:原帖来自:9MCU4.关于w5500程序的几个问题问题描述:有几个关于w5500程序的问题想请教大家:void Reset_W5500(void){WIZ_RESET_0; //低电平Delay_us(50); //这个的时间如果设为500us,貌似指示灯就全暗了??WIZ_RESET_1;Delay_ms(200);}while(( (getPHYCFGR()) & PHYCFGR_LNK_ON) == PHYCFGR_LNK_OFF); //PHYCFGR_LNK_OFF是0×00,PHYCFGR_LNK_ON是0×01。
基于FPGA和W5500的串口数据切换系统研究与设计

基于FPGA和W5500的串口数据切换系统研究与设计基于FPGA和W5500的串口数据切换系统研究与设计摘要:串口作为一种常见的通信接口,在嵌入式系统中广泛应用。
本文基于FPGA(Field Programmable Gate Array)和W5500芯片,设计了一种串口数据切换系统。
该系统能够实现多个串口的数据交换和切换操作,并具备高速传输和稳定性。
关键词:FPGA,W5500,串口,数据切换1. 引言串口是一种用于在设备之间进行数据传输的通信接口,在各种嵌入式系统中得到广泛应用。
然而,常见的串口接口数量有限,无法满足复杂系统对多串口的需求。
为了解决这一问题,本文提出了一种基于FPGA和W5500芯片的串口数据切换系统。
2. FPGA和W5500芯片简介2.1 FPGAFPGA是一种可编程逻辑器件,可以根据需求进行编程,实现不同的电路功能。
其灵活性和高度可定制性使得FPGA成为嵌入式系统设计的重要工具。
2.2 W5500芯片W5500是一种以太网控制器,其集成了MAC(Media Access Control)和PHY(Physical Layer)功能。
该芯片能够实现高速数据传输,并支持TCP/IP协议栈。
3. 系统设计3.1 硬件设计本系统使用FPGA作为核心控制器,通过FPGA与多个串口通信。
为了实现数据切换,本文引入W5500芯片,利用其高速传输和稳定性,实现串口数据的交换和切换。
具体的硬件设计包括FPGA和W5500的连接,以及串口与W5500的连接。
3.2 软件设计本系统的软件设计主要包括FPGA的逻辑设计和W5500的驱动程序设计。
FPGA的逻辑设计根据具体需求,编写程序实现串口数据的交换和切换。
W5500的驱动程序设计则包括数据的接收和发送等功能。
4. 系统性能测试为了验证本系统的性能,对其进行了多方面的测试。
首先,测试系统能够稳定运行并实现串口数据的交换和切换。
其次,测试系统的数据传输速度和实时性,确保系统能够满足实际应用的需求。
YIXIN_W5500模块用户手册 V2

User ManualYIXIN_W5500模块用户手册全硬件TCP/IP协议以太网模块目录一、YIXIN_W5500以太网模块简介 (1)二、YIXIN_W5500模块排针功能表 (1)三、W5500芯片资源介绍 (2)四、电脑调试软件安装 (3)五、调式方法 (5)1.YIXIN_W5500模块接线方法 (5)2.W5500客户端模式测试 (5)3.W5500服务端模式测试 (12)4.W5500 UDP模式测试 (15)模块购买链接:/item.htm?spm=a1z10.1.w4004-7343112040.8.6OZKhY&id= 40933615687一、YIXIN_W5500以太网模块简介YIXIN_W5500以太网模块是一款基于WIZnet W5500芯片的以太网模块,是一款性能出色、性价比高的以太网模块。
模块集成硬件化TCP/IP协议;内部具有32K字节存储器作为TX/RX缓存;支持10/100Mbps的网络传输速率;支持8个独立端口同时运行;同时模块还支持3.3V或者5V电源供电,当5V供电时还可以输出3.3V的电压,方便用户在不同的单片机系统中使用;模块与单片机系统的通讯方式是简单、方便的SPI总线通信。
W5500的具体性能参数请下文的“W5500芯片资料介绍”。
YIXIN_W5500以太网模块的实物图如图1.1所示:图1.1 YIXIN_W5500模块实物图二、YIXIN_W5500模块排针功能表表2.1 YIXIN_W5500模块排针功能说明注1:W5500的工作电压是3.3V,但I/O口可以承受5V电压。
注2:YIXIN_W5500模块有两种供电方式,即为3.3V供电或者5V供电,当使用5V供电时,“3.3V”引脚将会有3.3V的电压输出。
三、W5500芯片资源介绍W5500芯片是一款采用全硬件TCP/IP协议栈的嵌入式以太网控制器,它能使嵌入式系统通过SPI(串行外设接口)接口轻松地连接到网络。
W5500(socket)寄存器使用说明书

Socket 端口寄存器Sn3_MR (Socket n 模式寄存器) [R/W] [0x0000] [0x00]Sn_MR 描述3n 是 Socket 编号(0,1,2,3,4,5,6,7).n 设置了 SNUM[2:0]控制位集 n is Socketnumber (0, 1, 2, 3, 4, 5, 6, 7). n is set ‘SNUM[2:0]’ in Control Bits sets.Sn_CR (Socket n 配置寄存器) [R/W] [0x0001] [0x00]该寄存器用于设置 Socket n 的配置命令如 OPEN、CLOSE、CONNECT、LISTEN、END 和RECEIVE。
经 W5500 识别这一命令后,Sn_CR 寄存器会自动清零为 0×00。
尽管 Sn_CR 被清零为 0×00,但命令仍在处理中。
为了验证该命令是否完成,请检查 Sn_IR 或 Sn_SR 寄IR (中断寄存器) [R/W] [0x0015] [0x00]中断寄存器( IR)指明了中断的状态。
IR 的每一位都是‘0’,直到被主机写为‘1’. 如果 IR 不等于‘0×00’, INTn 引脚将会被拉低。
直到其变为‘0×00’时, INTn 才会被拉高。
S n_SR (Socket n 状态寄存器) [R] [0x0003] [0x00]Sn_SR指示了 Socket n 的状态,并根据 Sn_CR 或者一些TCP模式下的特殊控制包,如 SYN,FIN 包而改变。
Sn_SR临时状态描述Sn_PORT (Socket n 源端口寄存器) [R/W] [0x0004-0x0005] [0x0000]该寄存器配置了 Socket n 的源端口号。
当 Socket n 工作在 TCP 或 UDP 模式下,该寄 存器生效。
注意:必须在 OPEN 命令生效前,完成对该寄存器的设置。
W5500以太网芯片及模块使用

W5500以太网芯片及模块使用
一、模块介绍
是以太网转spi接口的,模块上有3个led和一个复位按钮,灯的含义是:
LINKLED
网络连接指示灯(Link LED)
显示当前连接状态:
低电平:连接建立;
高电平:未连接;
DUPLED
全/半双工指示灯(Duplex LED)
显示当前连接的双工状态:
低电平:全双工状态;
高电平:半双工状态;
ACTLED
活动状态指示灯(Active LED)
显示数据收/发活动时,物理介质子层的载波侦听活动情
况:
低电平:有物理介质子层的载波侦听信号;
高电平:无物理介质子层的载波侦听信号;
但貌似配置成全双工100M的速度也没什么增加,哪里出问题了呢?我现在使用18M的spi,使用wiz官方loopback软件测试速度为5Mb/s左右,好慢啊(/ □ \)
二、模块驱动
注意:在官网上有人共享了github的库函数驱动,不过是C99标准的,这一段Keil的c编译器支持好像有问题,而且对于是库函数很
致命,使用寄存器则无所谓
比如:ctlsocket和ctlwizchip函数的参数会因C99和C89的强转void类型定义不同,使其失效。
eg:0x0000不会错,0x0010可能会篡改成0x4e3c。
一种基于W5500的ModbusTCP服务器系统设计

一种基于W5500的ModbusTCP服务器系统设计作者:渠薇韩宗平姜久慧陆毅陶为戈潘瑜韩晓新来源:《江苏理工学院学报》2018年第02期摘要:Modbus协议是由Modicon公司在1979年研发的一种完全开放免费的总线通信协议,目前已经在工业领域得到了广泛应用。
因为现在将Modbus/TCP传输协议投放于工业控制中是可行而方便的,并且它的帧格式较为简单易懂,所以先是简明扼要地介绍了Modbus/TCP 规范以及以太网芯片W5500,最后给出了一个基于W5500的Modbus/TCP服务器的系统设计。
关键词:W5500;Modbus/TCP;服务器;控制系统中图分类号:TP393.09 文献标识码:A 文章编号:2095-7394(2018)02-0052-05近年以来,以太网方面的网络技术发展日新月异,工业控制也已经逐渐走向了集中监控、集散控制的形式,并且以以太网为代表的通信技术正逐渐成为工业控制发展中的新兴方向。
[1]到如今,利用最新网络技术,为工业控制器连网来进行网络管理提供了方便。
Modbus协议是属于电子控制器上的一种网络协议。
因为就现在来看,以太网通信具有价格低、稳定性高和速率高等优点,所以就成为了应用最广而且最受欢迎的通信网络之一[2]。
而不管现代工业控制领域持续不断产生怎样先进的概念,Modbus协议的简单性使它能便于在许多通信媒体上实施应用,从而成为了应用最广泛的工业协议。
1 基于工业以太网的 Modbus/TCP协议1.1 工业以太网通信协议模型现在常见的工业以太网的通信模型如图 1所示[3]。
目前有两种重要的网络参考模型:开放式通信系统互联网(OSI)七层参考模型和TCP五层参考模型。
其中开放式通信系统互联网(OSI)七层参考模型是由国际标准化组织制订,而后者目前则是被国际互联网(Internet)采用的一种通信模型。
OSI参考模型共分为七层,分别是:(1)应用层(英文缩写为APDU);(2)表示层(英文缩写为PPDU);(3)会话层(英文缩写为SPDU);(4)运输层(英文缩写为TPDU);(5)网络层(报文);(6)数据链路层(以帧为单位);(7)物理层。
用 W5500构成的低成本嵌入式 Web服务器

用 W5500构成的低成本嵌入式 Web服务器茅胜荣;肖家文;乔东海【摘要】In the era of HTML5 ,the B/S(Browser/Server) model has been applied in many applications with the number of Web server increasing .In the embedded field ,if the client wants to realize the function of the remote monitoring server ,the Web server not only need to parse the user requests ,but also need to make a quick and accurate response to the commands .Based on the OSI reference model and the HTTP communication ,a Web server is established ,which can run in a microcontroller ,without any complex web server framework . It can give a real‐time response to the traditional requests like HTML ,JavaScript and CSS ,and has the characteristics such as low re‐source consumption ,high efficiency ,good security ,low power consumption and low cost .%在HTML5的时代下,随着Web服务器的数量与日俱增,B/S(Browser/Server)模型得到了更加广泛的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
author:ANGRY_KUA_MAX
QQ:2518383357
Time:2018-01-12
本文为原创,转载请通知作者,文中代码,请勿用于商业用途!
1.
当前以太网在嵌入式系统中使用范围越来越广,而一个性能稳定,高效率的以太网传输方式能大幅度降低产品开发周期与售后成本。
本文以作者工作环境中使用过的以太网芯片W5500(硬件协议栈)与LWIP(软件协议栈)作为测试对象,这次只测试W5500性能测试,下次再测试LWIP。
2.
本次使用STM32F107搭配W5500进行带宽测试,W5500使用SPI口通讯,时钟可以跑到80M,即理论可以速率为10MB;下次也使用STM32F107搭配83848跑LWIP做验证测试。(使用相同的MCU做数据分析才有对比价值,提前透漏,LWIP的性能比W5500要强一点,但W5500价格偏低,占用资源也少一些)
case SOCK_CLOSING:
case SOCK_TIME_WAIT:
case SOCK_CLOSE_WAIT:
case SOCK_LAST_ACK:
close(NET_TYPE_TCP);
break;
case SOCK_CLOSED:
socket(NET_TYPE_TCP,Sn_MR_TCP,net_sys_info->debug_save_.port,Sn_MR_ND);
STM32F107与W5500的通讯,采用SPI的DMA方式;初始化W5500为四个端口,各个收发缓存为(8K,4K,2K,2K),缓存对收发速度有影响。测试的端口收发缓存为
3.
3.1.
switch(getSn_SR(NET_TYPE_TCP))
{
case SOCK_INIT:
listen(NET_TYPE_TCP);
len = recv(NET_TYPE_TCP,net_rxbuf,len);
if(len > 0)
{
while(1) //作死的发送
{
send(NET_TYPE_TCP,net_rxbuf,1460); //本函数为阻塞函数,发生成功后,本函数才会返回
}
}
}
break;
case SOCK_FIN_WAIT:
break;
case SOCK_ESTABLISHED:
if(getSn_IR(NET_TYPE_TCP) & Sn_IR_CON)
{
setSn_IR(NET_TYPE_TCP, Sn_IR_CON);
}
len=getSn_RX_RSR(NET_TYPE_TCP);
if(len>0)
{
len = (len > NET_BUF_RXSIZE)?NET_BUF_RXSIZE:len;
break;
default:
break;
}
3.2.
网络传输速率我们使用IPOP工具与360自带的加速球查看,其中IPOP软件以bit为单位,其实际的速度与360监测的一致(6080/8=750KB),即W5500在SPI速率为18兆位/秒的速度下测试,测试出来的通讯速度可达到750K左右,作者使用STM32F407做测试,上传速率可以达到3.5MB以上,STM32F107的通讯速率截图如下:
socket(NET_TYPE_TCP,Sn_MR_TCP,net_sys_info->debug_save_.port,Sn_MR_ND);
break;
default:
break;
}
}
3.4.
测试出来的通讯速度可达到600K左右,但实际波动比较大,受限制与MCU的性能。
4.
作者在使用W5500的过程中,发现使用其tcp的上传数据存在死机的Bug,MCU在主动传输数据给上位机,若此时将网线断开或者上位机直接关闭sock,则MCU直接死掉,而且是导致MCU直接死掉,使用看门狗都无法恢复的那种。至于为什么MCU会死掉,又怎么解决这个MCU死机的问题,欢迎联系讨论。
3.3.
While(1)
{
switch(getSn_SR(NET_TYPE_TCP))
{
case SOCK_INIT:
listen(NET_TYPE_TCP);
break;casBiblioteka SOCK_ESTABLISHED:
if(getSn_IR(NET_TYPE_TCP) & Sn_IR_CON)
{
setSn_IR(NET_TYPE_TCP, Sn_IR_CON);
//
}
}
break;
case SOCK_FIN_WAIT:
case SOCK_CLOSING:
case SOCK_TIME_WAIT:
case SOCK_CLOSE_WAIT:
case SOCK_LAST_ACK:
close(NET_TYPE_TCP);
break;
case SOCK_CLOSED:
}
len=getSn_RX_RSR(NET_TYPE_TCP);
if(len>0)
{
len = (len > NET_BUF_RXSIZE)?NET_BUF_RXSIZE:len;
len = recv(NET_TYPE_TCP,net_rxbuf,len);
if(len > 0)
{
memcpy(net_tempbuf,net_rxbuf,len);//收到的数据保存