본문 바로가기

[INTERFACE]/iMCU_W7100

[W7100 EVM] 예제프로그램 - 초간단 TCP Server를 이용한 보드 제어

[W7100 EVM] 예제프로그램 - 초간단 TCP Server를 이용한 보드 제어
이더넷 전송 제어의 가장 기본인 TCP 프로토콜을 이용한 테스트를 해보자. TCP 는 서버모드와, 클라이언트모드가 있는데 서버모드는 클라이언트의 연결을 기다리고 있다 요청이 들어오면 연결되어 통신이 이루어진다.

W7100이  TCP Server모드로 동작하기 위한 대략적인 흐름을 보면 Socket를 OPEN하고 클라이언트의 요청을 기다린다(Listen). 연결이 되면 데이터 송수신하고(ESTABLISEH) 연결을 종료 하기위해 CLOSE 하면 된다.



TCP Server를 간단히 코드로 나타내면 아래와 같이 된다.
//TCP-Server 처리
void ProcessTcpSever(void)
{
//소켓번호
int s = SOCK_TCPS;
//포트번호
int port = 5000;

 switch (getSn_SR())
 {
//소켓 초기화 시
 case SOCK_INIT:
    listen(s);
     break;


//연결되어 데이터를 수신하게 되면
 case SOCK_ESTABLISHED:
   //데이터 받아서 
   len = recv(s, data_buf, len);   
   
   // 처리 한다.
   EthernetTest(data_buf, len);
  break;

//연결 종료 요청을 받을때  
 case SOCK_CLOSE_WAIT:                             
  disconnect(s);
  break;
 
 //연결종료
 case SOCK_CLOSED:
  close(s);
  socket(s, Sn_MR_TCP,port,0x00);
   break;
}


TCP클라이언트로 데이터가 수신되면 처리 하는 함수로 테스트 예제로 이번 예제에서 첫번째 데이터로 LED를 제어하고 있다. ->이부분을 원하는 형태로 수정하면 된다.
//수신데이터 처리
void EthernetTest(unsigned char *pRcvBuffer, unsigned int len)
{
 unsigned int i;

 DebugPrint("Read Data[%d]\r\n", len);
 
 for(i=0;i<len;i++)
 {
  //수신데이터 표시
  DebugPrint("%c ", pRcvBuffer[i]);
 }

 //데이터 처리 - LED제어
 if(pRcvBuffer[0] == '1')
 {
  Led1On();
 }
 else if(pRcvBuffer[0] == '0')
 {
  Led1Off();
 }
}


W7100 TCP 서버 테스트
실행파일



보드가 서버로 동작하기 때문에 PC프로그램은 Client로 접속에서 데이터 전송할 수 있다. 예제에서는보드 IP인 192.168.0.104로 접속 가능하다.



W7100 TCP 테스트 동영상
반응형