以太网TCP在W5500上的通讯性能测试

以太网TCP在W5500上的通讯性能测试

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价格偏低,占用资源也少一些)

STM32F107与W5500的通讯,采用SPI的DMA方式;初始化W5500为四个端口,各个收发缓存为(8K,4K,2K,2K),缓存对收发速度有影响。测试的端口收发缓存为

3.  TCP测试数据

3.1.  W5500上传数据函数

    switch(getSn_SR(NET_TYPE_TCP))

{

case SOCK_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;

         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);

  break;

caseSOCK_CLOSED:

 socket(NET_TYPE_TCP,Sn_MR_TCP,net_sys_info->debug_save_info.net.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(1)

{

switch(getSn_SR(NET_TYPE_TCP))

{

case SOCK_INIT:

  listen(NET_TYPE_TCP);

  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;

     len = recv(NET_TYPE_TCP,net_rxbuf,len);

 

     if(len > 0)

     {

       memcpy(net_tempbuf,net_rxbuf,len);//收到的数据保存

      //       

     }

  }

  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_TCP,Sn_MR_TCP,net_sys_info->debug_save_info.net.port,Sn_MR_ND);

  break;

default:

  break;

}

}

3.4.  W5500下载速率

测试出来的通讯速度可达到600K左右,但实际波动比较大,受限制与MCU的性能。

4.  W5500的硬件Bug

作者在使用W5500的过程中,发现使用其tcp的上传数据存在死机的Bug, MCU在主动传输数据给上位机,若此时将网线断开或者上位机直接关闭sock,则MCU直接死掉,而且是导致MCU直接死掉,使用看门狗都无法恢复的那种。至于为什么MCU会死掉,又怎么解决这个MCU死机的问题,欢迎联系讨论。

你可能感兴趣的:(随手log)