본문 바로가기

[TI]/TM4C

TM4C123 EVM - W5500 TCP/IP 전송 속도 테스트

TM4C123 EVM - W5500 TCP/IP 전송 속도 테스트



[NET_EV_SM EVM]보드와 W5500 EVM 보드를 이용하여 Ethernet (TCP/IP) 테스트를 진행 했다.

고성능 Cortex-M4 코어의 TM4C123 에서 Ethernet 기능을 추가해 두면 여러 프로젝트에서 유용할 것 같다.

위 사진과 같이 W5500 EVM 보드를 연결하면 Ethernet을 쉽게 테스트 가능하다. 



W5100, W5200, W5500 Ethernet 모듈은 [NET_EV_SM EVM] 보드의 SPI-EXP 모듈을 연결하여 쉽게 테스트 가능하다.


W5500의 CS핀은 P_B15 -> CN18_15pin ->PD6

/RST 핀은 P_A3->CN17_3pin -> PE1

에 연결되어 있다.



TM4C123 코드에서 W5500 Driver Code에서 아래와 같이 핀을 할당 할 수 있다.

//-----------------------------------------------------------------------------

// W5500 HAL


#define W5500_CS_PORT PORTD

#define W5500_CS_BIT BIT6


#define W5500_RST_PORT PORTE

#define W5500_RST_BIT BIT1


#define IINCHIP_RSToff() PE1 = 0

#define IINCHIP_RSTon() PE1 = BIT1


#define IINCHIP_CSoff() PD6 = 0

#define IINCHIP_CSon() PD6 = BIT6


                                        

#define W5500_IO_INIT() ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);\

                                        ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);\

                                        ROM_GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, W5500_CS_BIT);\

                                        ROM_GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, W5500_RST_BIT);


#define IINCHIP_SPI_INIT() SPI0_Init();IINCHIP_SpiSpeed()

#define IINCHIP_SpiSendData SPI0_WriteReadByte

#define IINCHIP_SpiRecvData SPI0_WriteReadByte

#define IINCHIP_SpiSpeed()              SPI0_SetSpeed(SPI_SPEED_MAX)

//-----------------------------------------------------------------------------




TM4C123의 이더넷 테스트를 위해 TCP/IP 루프백 테스트 코드를 이용하였다. 

int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t port)

{

   int32_t ret;

   uint16_t size = 0, sentsize=0;

   switch(getSn_SR(sn))

   {

      case SOCK_ESTABLISHED :

         if(getSn_IR(sn) & Sn_IR_CON)

         {

            setSn_IR(sn,Sn_IR_CON);

         }

         if((size = getSn_RX_RSR(sn)) > 0)

         {

            if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;

            ret = recv(sn,buf,size);

            if(ret <= 0) return ret;

            sentsize = 0;

            while(size != sentsize)

            {

               ret = send(sn,buf+sentsize,size-sentsize);

               if(ret < 0)

               {

                  close(sn);

                  return ret;

               }

               sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.

            }

         }

         break;

      case SOCK_CLOSE_WAIT :

         if((ret=disconnect(sn)) != SOCK_OK) return ret;

         break;

      case SOCK_INIT :

         if( (ret = listen(sn)) != SOCK_OK) return ret;

         break;

      case SOCK_CLOSED:

         if((ret=socket(sn,Sn_MR_TCP,port,0x00)) != sn)

            return ret;

         break;

      default:

         break;

   }

   return 1;

}




TM4C123은 기본 드라이버 코드가 ROM에 저장되어 있기 때문에 코드 사이즈를 상당히 줄일 수 있다.

실제 컴파일 해 보면 코드 사이즈가 7kbyte로 상당히 적은것을 확인 할 수 있다.


[1] = D:\WORK\ARM\TM4C\tm4c123_evm\ex10_w5500\ewarm66\Debug\Obj

[2] = command line

[3] = dl7M_tln.a

[4] = driverlib.a

[5] = m7M_tlv.a

[6] = rt7M_tl.a

[7] = shb_l.a


  7 072 bytes of readonly  code memory

    720 bytes of readonly  data memory

  2 645 bytes of readwrite data memory




Wiznet사의 AX1프로그램을 이용하여 W5500의 TCP/IP 루프백 전송 속도 테스트를 해 보면 TM4C123 의 SPI 최대 속도는 12Mhz에서 2Mbps 정도로 측정된다. 

TCP/IP 전송 속도 테스트 결과 참고 에서와 같이 TCP/IP 전송 속도를 비교해 보면 SPI속도가 느려서 그런지 약간의 한계가 있어 페리 기능이 좀 아쉽다.


[1] iInChip Send: 2.1093 Mbps(348160 bytes, 1.2593 sec)

iInChip Recv: 1.9174 Mbps(348160 bytes, 1.3853 sec)

------------------------------------------------------------

[2] iInChip Send: 2.0543 Mbps(348160 bytes, 1.2930 sec)

iInChip Recv: 1.7646 Mbps(348160 bytes, 1.5053 sec)

------------------------------------------------------------

[3] iInChip Send: 2.1132 Mbps(348160 bytes, 1.2570 sec)

iInChip Recv: 1.8640 Mbps(348160 bytes, 1.4250 sec)

------------------------------------------------------------

[4] iInChip Send: 2.1347 Mbps(348160 bytes, 1.2443 sec)

iInChip Recv: 1.9225 Mbps(348160 bytes, 1.3817 sec)

------------------------------------------------------




TM4C123 EVM 과 W5500을 이용하여 TCP/IP 테스트 코드

#include "system.h"

#include "serial.h"

#include "wiznet.h"


#define SOCK_TCPS0       0

#define DATA_BUF_SIZE   2048

uint8_t gDATABUF[DATA_BUF_SIZE];


void ProcessTCPS(void)

{

    loopback_tcps(SOCK_TCPS0, gDATABUF, 3000);

}


int main(void)

{

    short data;

    

    SystemInit();

    Led1Init();

    Led1On();

    

    Led2Init();

    Led2On();

    

    DebugInit(BAUD_115200);

    DebugPrint("TM4C Uart Test\r\n");


    //W5500 초기화 함수

    W5500_Init();

    

    while(1)

    {

        ProcessTCPS();      

    }

}


반응형