
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를 제어하고 있다.
댓글을 달아 주세요