[TI]/TM4C2015. 2. 16. 03:38

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

    }

}


Posted by nexp

댓글을 달아 주세요

Cortex-M/EFM322013. 5. 1. 22:46

EFM32G210 EVM - W5200을 이용한 TCP/IP 전송 속도 테스트

EFM32G210 EVM - W5200을 이용한 TCP/IP 전송 속도 테스트



[XMega-EX EVM] 확장 테스트 보드를 이용하면 W5200모듈을 연결하여 이더넷 테스트가 가능하다.



EFM32G210 EVM W5200 TCP/IP 모듈 드라이버 코드

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

// W5100 HAL

#define W5100_CS_PORT GPIOA

#define W5100_CS_BIT BIT0


#define W5100_RST_PORT GPIOA

#define W5100_RST_BIT BIT1



#define W5100_IO_INIT() GPIO_PinModeSet(gpioPortA, 0, gpioModePushPull, 1);\

                                        GPIO_PinModeSet(gpioPortA, 1, gpioModePushPull, 1);\

                                        IINCHIP_CSon();


#define IINCHIP_CSoff() cbi(W5100_CS_PORT, W5100_CS_BIT)

#define IINCHIP_CSon() sbi(W5100_CS_PORT, W5100_CS_BIT)



#define IINCHIP_SPI_INIT() SPI0_Init();IINCHIP_SPI_SPEED();

#define IINCHIP_SpiSendData SPI0_WriteReadByte

#define IINCHIP_SpiRecvData SPI0_WriteReadByte

#define IINCHIP_SPI_SPEED()            MMC_SPISpeed(SPI_SPEED_MAX) 


#define IINCHIP_RSToff() cbi(W5100_RST_PORT, W5100_RST_BIT)

#define IINCHIP_RSTon() sbi(W5100_RST_PORT, W5100_RST_BIT)

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




EFM32를 이용하여 TCP/IP 전송율 테스트 결과 1.4Mbps 이다. EFM32 의 최대 SPI 클럭속도가 1.4Mhz인 것을 생각하면 그리 빠르지는 않은듯...

저전력 웹서버 만들면 좋을것 같다.


Posted by nexp

댓글을 달아 주세요

[MCU]/adStar2013. 4. 27. 23:30

adStar - W5100 TCP/IP 전송 속도 테스트 (외부 메모리 제어 모드 사용)

adStar - W5100 TCP/IP 전송 속도 테스트 (외부 메모리 제어 모드 사용)

 

 

 

adStar 도 CANTUS 와 같이 외부 메모리 제어 모드가 있다.  외부 메모리를 연결할 수 있고,  특히 W5100과 같이 고속 이더넷이 필요할 때 사용하면 편리하다. [adStar TFT-EX] 보드에는 메모리 방식의 W5100을 연결할 수 있는 커넥터가 있기 때문에 이를 테스트 해 보았다.

 

메모리 제어 기능은 PORT3, PORT4에서 설정할 수 있다.

 

 

 

adStar의 CS0 할당 번지는 0x5000 0000 이다.

기존 CANTUS 와 약간의 차이가 있는것은 메모리 번지와 제어 레지스터 번지이다. 나름의 이유가 있었겠지만 기존 코드와 호환성을 유지하기 위해 동일하게 했으면 하는 생각이 든다.

 

 

 

 

asStar W5100 초기화 코드

 

void W5100_IO_INIT()
{
 *(volatile U16*)0x80000800 = BIT10; //BANK 0 8Bit

 *R_PAF3 = 0; //SRAM interface address, data
 Cbi(*R_PAF4, GP_CFG(1) | GP_CFG(3)| GP_CFG(4)| GP_CFG(5));// nCS, nWE, nRE, ALE  

 

 

 

asStar W5100 메모리 제어 방식(INDIRECT)을 이용한 TCP/IP 전송 속도 테스트

회로적으로 간단하게 테스트 하기위해 INDIRECT방식을 이용했는데도 6Mbps 이상 나오고 있는데 DIRECT모드를 이용하면 더 빠를 수 있을것 같다. 

 

 

 

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/W72002013. 1. 1. 23:00

[W7200 EVM] TCP/IP 테스트 - W7200 TCP Server 전송 속도 테스트

[W7200 EVM] TCP/IP 테스트 - W7200 TCP Server 전송 속도 테스트




W7200은 Cortex-M3 STM32와 W5200이 한칩에 들어 있는 Internet MCU 이다.


소스코드는 기존 STM32-SM + W5200과 호환이 되지만 SPI(SPI0), CS(PA4), RST(PB8), PowerDown(PB9) 핀은 하드웨어 적으로 고정되어 있다.



W7200 TCP Server 전송 속도

TCP 서버 송수신 속도는 3Mbps정도로 측정된다. STM32-SM EVM (2.5Mbps)과 동일한 코드로 테스트 해보면 W7200이 속도가 좀더 빠르게 나오는데... 아무래도 한칩에 포함되어 있어 그런것이 아닐까 생각해 본다.




W7200 W5200 제어 드라이버 코드

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

// W5100 HAL

#define _SPI0_ENABLE 1


#define W5100_CS_PORT GPIOA

#define W5100_CS_BIT BIT4


#define W5100_RST_PORT GPIOB

#define W5100_RST_BIT BIT8

#define IINCHIP_RSToff() cbi(W5100_RST_PORT, W5100_RST_BIT)

#define IINCHIP_RSTon() sbi(W5100_RST_PORT, W5100_RST_BIT)



#define W5100_PD_PORT GPIOB

#define W5100_PD_BIT BIT9

#define IINCHIP_PDoff() cbi(W5100_PD_PORT, W5100_PD_BIT)

#define IINCHIP_PDon() sbi(W5100_PD_PORT, W5100_PD_BIT)




#define W5100_IO_INIT() RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);\

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;\

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;\

GPIO_InitStructure.GPIO_Pin=W5100_CS_BIT;\

GPIO_Init(GPIOA, &GPIO_InitStructure);\

GPIO_InitStructure.GPIO_Pin=W5100_RST_BIT|W5100_PD_BIT;\

GPIO_Init(GPIOB, &GPIO_InitStructure);\

                                        IINCHIP_RSTon();IINCHIP_PDoff();



#define IINCHIP_CSoff() cbi(W5100_CS_PORT, W5100_CS_BIT)

#define IINCHIP_CSon() sbi(W5100_CS_PORT, W5100_CS_BIT)




#define IINCHIP_SPI_INIT() SPI0_Init();SPI0_SetSpeed(SPI_SPEED_MAX);

#define IINCHIP_SpiSendData SPI0_WriteReadByte

#define IINCHIP_SpiRecvData SPI0_WriteReadByte

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








Posted by nexp

댓글을 달아 주세요

[MCU]/adStar2012. 12. 25. 21:00

[adStar EVM] W5200을 이용한 TCP-Seerver 전송 속도 테스트

 [adStar EVM] W5200을 이용한 TCP-Seerver 전송 속도 테스트

 

 

 

[adStar-EX EVM] 보드에는 H/WTCPIP W5200모듈을 연결할수 있어 이더넷 테스트가 가능하다. W5200을 이용하여 TCP Server모드에서 전송 속도를 테스트 해 보았다.

 

[W5200 EVM] 모듈 연결 핀맵

 

 

[adStar-EX EVM] W5200  드라이버 코드

#define _SPI1_ENABLE     1

//-----------------------------------------------------------------------------
// W5100 HAL
#define W5100_CS_PORT     GPIO1
#define W5100_CS_BIT     BIT3
#define W5100_RST_BIT     BIT5


#define W5100_IO_INIT()     Sbi(*R_PAF4, GP_CFG(3));Sbi(*R_GP1ODIR, W5100_CS_BIT);\
          Sbi(*R_PAF2, GP_CFG(5));Sbi(*R_GP1ODIR, W5100_RST_BIT)


#define IINCHIP_CSoff()     cbi(W5100_CS_PORT, W5100_CS_BIT)
#define IINCHIP_CSon()     sbi(W5100_CS_PORT, W5100_CS_BIT)


#define IINCHIP_SPI_INIT()    SPI1_Init()
#define IINCHIP_SpiSendData    SPI1_WriteReadByte
#define IINCHIP_SpiRecvData    SPI1_WriteReadByte


#define IINCHIP_RSToff()    cbi(W5100_RST_PORT, W5100_RST_BIT)
#define IINCHIP_RSTon()     sbi(W5100_RST_PORT, W5100_RST_BIT)

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

 

 

 

테스트 결과 3Mbps정도로 측정된다. SPI방식으로 이정도면 나쁘지 않은것 같다.

 

 

Posted by nexp

댓글을 달아 주세요