본문 바로가기

[INTERFACE]/AVR_W5100_EVM

[Mega128 EVM] TCP Test Program

사용자 삽입 이미지





Mega128 EVM의 이더넷 제어는 W5100를 이용하고 우선 간단히 테스트 하기 위해 속도는 좀 느리지만 SPI모드로 구동하여 테스트 해 보았다.

사용자 삽입 이미지















 

이더넷 제어 관련 파일은 ../mega128_evm/01_drv/wiznet 폴더에 있고 w5100.c, wiznet.c파일을 추가하면 된다.

사용자 삽입 이미지












네트웍 MAC, IP..등의 초기화 설정은 main에서 간단히 설정할 수 있다.

//-----------------------------------------------------------------------------
#define MY_NET_MAC   "\x00\x08\xDC\x00\x00\x00"  // MY Mac Address : 00.08.DC.00.00.00
#define MY_NET_SIP   0xC0A80003 // MY Source IP     : 192.168.0.3
#define MY_NET_GWIP   0xC0A80001 // MY Gateway IP    : 192.168.0.1
#define MY_CH_DESTIP  0xC0A80002 // MY Destination   : 192.168.0.2
      :

예제 소스코드

예제는 TCP Server로 구성하고 클라이언트로 부터 전송되는 데이들 받아서 그값에 따라 Mega128 EVM의 LED를 제어하도록 하였다. 자세한 설명은 추후에 계속....

void EthernetTest(unsigned char *pRcvBuffer, unsigned int len)

{

        unsigned int i;

        if(pRcvBuffer[0] == CMD_LED_OUT)

        {

                if(pRcvBuffer[1] & 1)Led1On();

                else Led1Off();

                if(pRcvBuffer[1] & 2)Led2On();

                else Led2Off();

        }

               

        DebugPrint("Read Data[%d]\r\n", len);

       

        for(i=0;i<len;i++)

        {

                //if(i%16==0)DebugPrint("\r\n");

                DebugPrint("%02X ", pRcvBuffer[i]);

        }

        DebugPrint("\r\nReceive OK!\r\n");

}

//TCP-Server 처리

void ProcessTcpSever(void)

{

        int len;                                                

        unsigned char data_buf[TX_RX_MAX_BUF_SIZE];

        uint16 port = MY_LISTEN_PORT;

       

        switch (getSn_SR(SOCK_TCPS))

        {

        case SOCK_ESTABLISHED:

                //check Rx data

                if((len = getSn_RX_RSR(SOCK_TCPS)) > 0)                 

                {

                        //if Rx data size is lager than TX_RX_MAX_BUF_SIZE

                        if (len > TX_RX_MAX_BUF_SIZE) len = TX_RX_MAX_BUF_SIZE;       

                        //read the received data

                        len = recv(SOCK_TCPS, data_buf, len);

                                               

                        EthernetTest(data_buf, len);

                }              

                break;

               

        case SOCK_CLOSE_WAIT:                                   

                //If the client request to close

                disconnect(SOCK_TCPS);

               

                m_SokStatus1 = 0;

                break;

               

        case SOCK_CLOSED:

                if(!m_SokStatus1)

                {

                        m_SokStatus1 = 1;

                        DebugPrint("Connect.");

                }

               

                //reinitialize the socket

                if(socket(SOCK_TCPS,Sn_MR_TCP, port,0x20) == 0)

                {

                        DebugPrint("Fail to create socket.");

                        m_SokStatus1 = 0;

                }

                else

                {

                        listen(SOCK_TCPS);

                }

               

                break;

        }

}

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



터미널 창의 제어 메세지

사용자 삽입 이미지














호스트 프로그램
호스트 프로그램은 VB를 이용하여 간단히 TCP클라언트로 구성하고 서버로 접속해서 LED를 제어하도록 작성하였다.

사용자 삽입 이미지


실행 동영상
호스트 측의 LED버튼을 클릭하여 EVM보드의 LED를 제어하고 있다.

반응형