STM32 MCU 보드에서 W5500 사용하기 (3부 Loopback)

stm32 MCU에서 W5500을 사용한 Loopback 테스트

Loopback 테스트를 위한 Echo Server 작성

이전에 포스팅한 “STM32 MCU 보드에서 W5500 사용하기”를 참조하여, 새로운 프로젝트를 생성한 후 W5500 Driver를 포팅 한다. 개발 보드 또한 이전 포스팅에서 사용한 보드를 그대로 사용하여 진행하였다.
STM32 MCU 보드에서 W5500 사용하기 (1부)
STM32 MCU 보드에서 W5500 사용하기 (2부)

loopback 테스트를 위해서 Echo Server를 구현 한다. main.c 파일에 다음의 함수를 추가한다.

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)
         {
            myprintf("%d:Connected\r\n",sn);
            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 :
         myprintf("%d:CloseWait\r\n",sn);
         if((ret=disconnect(sn)) != SOCK_OK) return ret;
         myprintf("%d:Closed\r\n",sn);
         break;
      case SOCK_INIT :
          myprintf("%d:Listen, port [%d]\r\n",sn, port);
         if( (ret = listen(sn)) != SOCK_OK) return ret;
         break;
      case SOCK_CLOSED:
         myprintf("%d:LBTStart\r\n",sn);
         if((ret=socket(sn,Sn_MR_TCP,port,0x00)) != sn)
            return ret;
         myprintf("%d:Opened\r\n",sn);
         break;
      default:
         break;
   }
   return 1;
}

main 함수를 다음과 같이 수정한다.

int main(int argc, char* argv[])
{
    int ret;

    RCC_Configuration();
    USART1_Configuration();
    W5500_SPI_Init();

    W5500_Init();
    Net_Conf();

    while(1)
    {
        /* Loopback Test */
        // TCP server loopback test
        if((ret = loopback_tcps(SOCK_TCPS0, gDATABUF, 5000)) < 0) {
            myprintf("SOCKET ERROR : %ld\r\n", ret);
        }
    }
}

사용할 버퍼 변수와 헤더 정보를 선언한다.

#define SOCK_TCPS0       0
#define DATA_BUF_SIZE   2048
uint8_t gDATABUF[DATA_BUF_SIZE];

프로젝트를 새롭게 빌드하여 Firmware 바이너리 이미지를 생성한 후, 개발 보드에 Fusing 한다. (이전 포스팅 참조)
※ IP 주소의 경우 자신의 네트워크 환경에 맞게 변경하여 빌드하여야 한다.

AX1 프로그램 설치

Loopback 테스트를 위한 AX1 프로그램을 다음의 링크에서 다운로드 받는다.
[DOWNLOAD AX1][http://www.wiznet.co.kr/Admin_Root/UpLoad_Files/BoardFiles/AX1(1).zip]

다운 받은 파일을 압축을 풀면 AX1 메뉴얼과 설치 파일이 있다. 설치 프로그램을 더블 클릭하여 실행 하면 설치 과정이 시작된다. AX1에 대한 자세한 내용은 메뉴얼을 참고 하기 바란다.

ax1_0

Next를 눌러 다음 단계로 진행한다. ax1_1

설치 경로를 설정한 후 Next를 클릭한다. ax1_2

Next를 눌러 다음 단계로 진행한다. ax1_3

Next를 눌러 다음 단계로 진행하면, 실제 프로그램 설치가 진행된다. ax1_4

Finish를 누르면 AX1 설치가 완료 된다. ax1_5

Loopback 테스트 진행

Loopback 테스트를 위한 Network 환경은 다음과 같이 구성하였다.

이미지 1 PC IP : 192.168.11.244 Board IP : 192.168.11.50

ax1 프로그램을 실행한다. ax1_6

실제 보드와의 TCP 연결을 위해 AX1 프로그램 메뉴 TCP -> Connect를 실행하면, 다음의 창이 뜨며 보드에 설정된 IP와 포트 번호 5000번을 입력한 후 OK 버튼을 누른다. ax1_7

정상적인 연결이 이루어지면 다음의 팝업창이 뜰 것이다.
ax1_8

정확한 속도 계산을 위해 AX1 프로그램 메뉴 CPUTICK을 클릭한다. ax1_8_1

아래의 아이콘을 클릭한다. ax1_9

테스트 할 때 사용할 파일 선택창이 뜨며, 파일을 선택한다. ax1_10

테스트 횟수를 묻는 창이 뜨며, 테스트 할 횟수를 적고 OK 버튼을 누른다. ax1_11

다음과 같이 Loopback 테스트가 진행되며, 이더넷 통신 속도를 확인할 수 있다. ax1_12

프로젝트 파일 : 다운로드

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

This site uses Akismet to reduce spam. Learn how your comment data is processed.