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를 제어하고 있다.