文档介绍:该【W5500通讯性能测试 】是由【HShess】上传分享,文档一共【13】页,该文档可以免费在线阅读,需要了解更多关于【W5500通讯性能测试 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。W5500通讯性能测试
欢迎技术讨论,作者擅长ARM,FPGA,电路设计,C#,Delphi,BCB,Ocx…有偿解决任何技术难题与Bug! 2
以太网TCP在W5500上的通讯性能测试
author:ANGRY_KUA_MAX
欢迎技术讨论,作者擅长ARM,FPGA,电路设计,C#,Delphi,BCB,Ocx…有偿解决任何技术难题与Bug! 3
概述
当前以太网在嵌入式系统中使用范围越来越广,而一个性能稳定,高效率的以太网传输方式能大幅度降低产品开发周期与售后成本。
本文以作者工作环境中使用过的以太网芯片W5500(硬件协议栈)与LWIP(软件协议栈)作为测试对象,这次只测试W5500性能测试,下次再测试LWIP。
测试环境
本次使用STM32F107搭配W5500进行带宽测试,W5500使用SPI口通讯,时钟可以跑到80M,即理论可以速率为10MB;下次也使用STM32F107搭配83848跑LWIP做验证测试。(使用相同的MCU做数据分析才有对比价值,提前透漏,LWIP的性能比W5500要强一点,但W5500价格偏低,占用资源也少一些)
STM32F107与W5500的通讯,采用SPI的DMA方式;
欢迎技术讨论,作者擅长ARM,FPGA,电路设计,C#,Delphi,BCB,Ocx…有偿解决任何技术难题与Bug! 5
初始化W5500为四个端口,各个收发缓存为(8K,4K,2K,2K),缓存对收发速度有影响。测试的端口收发缓存为
TCP测试数据
W5500上传数据函数
switch(getSn_SR(NET_TYPE_TCP))
{
caseSOCK_INIT:
listen(NET_TYPE_TCP);
break;
caseSOCK_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;
欢迎技术讨论,作者擅长ARM,FPGA,电路设计,C#,Delphi,BCB,Ocx…有偿解决任何技术难题与Bug! 5
len=recv(NET_TYPE_TCP,net_rxbuf,len);
if(len>0)
{
while(1)//作死的发送
{
send(NET_TYPE_TCP,net_rxbuf,1460);//本函数为阻塞函数,发生成功后,本函数才会返回
}
}
}
break;
caseSOCK_FIN_WAIT:
caseSOCK_CLOSING:
caseSOCK_TIME_WAIT:
caseSOCK_CLOSE_WAIT:
caseSOCK_LAST_ACK:
close(NET_TYPE_TCP);
欢迎技术讨论,作者擅长ARM,FPGA,电路设计,C#,Delphi,BCB,Ocx…有偿解决任何技术难题与Bug! 6
break;
caseSOCK_CLOSED:
socket(NET_TYPE_TCP,Sn_MR_TCP,net_sys_info->,Sn_MR_ND);
break;
default:
break;
}
W5500上传速率
网络传输速率我们使用IPOP工具与360自带的加速球查看,其中IPOP软件以bit为单位,其实际的速度与360监测的一致(6080/8=750KB),即W5500在SPI速率为18兆位/秒的速度下测试,测试出来的通讯速度可达到750K左右,作者使用STM32F407做测试,,STM32F107的通讯速率截图如下:
欢迎技术讨论,作者擅长ARM,FPGA,电路设计,C#,Delphi,BCB,Ocx…有偿解决任何技术难题与Bug! 7
W5500下载数据函数
While(1)
{
switch(getSn_SR(NET_TYPE_TCP))
{
caseSOCK_INIT:
listen(NET_TYPE_TCP);
break;
caseSOCK_ESTABLISHED:
if(getSn_IR(NET_TYPE_TCP)&Sn_IR_CON)
欢迎技术讨论,作者擅长ARM,FPGA,电路设计,C#,Delphi,BCB,Ocx…有偿解决任何技术难题与Bug! 9
{
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;
len=recv(NET_TYPE_TCP,net_rxbuf,len);
if(len>0)
{
memcpy(net_tempbuf,net_rxbuf,len);//收到的数据保存
//
}
}
break;
caseSOCK_FIN_WAIT:
欢迎技术讨论,作者擅长ARM,FPGA,电路设计,C#,Delphi,BCB,Ocx…有偿解决任何技术难题与Bug! 9
caseSOCK_CLOSING:
caseSOCK_TIME_WAIT:
caseSOCK_CLOSE_WAIT:
caseSOCK_LAST_ACK:
close(NET_TYPE_TCP);
break;
caseSOCK_CLOSED:
socket(NET_TYPE_TCP,Sn_MR_TCP,net_sys_info->,Sn_MR_ND);
break;
default:
break;
}
}
W5500下载速率
测试出来的通讯速度可达到600K左右,但实际波动比较大,受限制与MCU的性能。
欢迎技术讨论,作者擅长ARM,FPGA,电路设计,C#,Delphi,BCB,Ocx…有偿解决任何技术难题与Bug! 10