[AT90USB1287-EX] 이더넷 테스트 - TCP/IP를 이용한 광센서 데이터 전송 테스트
[AT90USB1287-EX] 보드에는 하드웨어 TCP/IP 모듈인 W5100을 메모리 제어(다이렉트) 방식으로 연결할 수 있다.
간단히 TCP/IP 동작확인 테스트를 위해 이더넷으로 LED 제어 및 ADC값을 읽어오는 예제를 테스트 해 보았다.
TCP/IP 호스트 프로그램
기존에 C#으로 작성했던 TCP예제를 그대로 사용하기로 한다.
AT90USB1287 TCP/IP 전송 테스트 동영상
보드에 연결되어 있는 LED를 제어하고 ADC값(CdS)을 읽어와 그래프로 출력하는 예제를 작성해 보았다.
[AT90USB1287-EX] TCP 서버 처리 함수
ProcessTCPS() 함수는 루프를 돌면서 이더넷으로 데이터가 전송되면 필요한 처리를 한다.
[AT90USB1287-EX] 이더넷 데이터 수신 처리 처리 함수
[AT90USB1287-EX] 보드에는 하드웨어 TCP/IP 모듈인 W5100을 메모리 제어(다이렉트) 방식으로 연결할 수 있다.
간단히 TCP/IP 동작확인 테스트를 위해 이더넷으로 LED 제어 및 ADC값을 읽어오는 예제를 테스트 해 보았다.
TCP/IP 호스트 프로그램
기존에 C#으로 작성했던 TCP예제를 그대로 사용하기로 한다.
AT90USB1287 TCP/IP 전송 테스트 동영상
보드에 연결되어 있는 LED를 제어하고 ADC값(CdS)을 읽어와 그래프로 출력하는 예제를 작성해 보았다.
[AT90USB1287-EX] TCP 서버 처리 함수
ProcessTCPS() 함수는 루프를 돌면서 이더넷으로 데이터가 전송되면 필요한 처리를 한다.
void ProcessTCPS(unsigned int sock)
{
unsigned int len;
unsigned char data_buf[TX_RX_MAX_BUF_SIZE];
unsigned int port = MY_LISTEN_PORT;
switch (getSn_SR(sock))
{
// Socket CLOSED일 경우
case SOCK_CLOSED:
if(!m_SokStatus1)m_SokStatus1 = 1;
//socket 초기화 하고
if(socket(sock,Sn_MR_TCP, port,0x00) == 0)
{
DebugPrint("Fail to create socket.");
m_SokStatus1 = 0;
}
else
{
//접속대기
listen(sock);
}
break;
case SOCK_ESTABLISHED:
//수신데이터가 있으면
if((len = getSn_RX_RSR(sock)) > 0)
{
if (len > TX_RX_MAX_BUF_SIZE) len = TX_RX_MAX_BUF_SIZE;
//데이터 수신
en = recv(sock, data_buf, len);
//수신데이터 처리
//send(sock, data_buf, len);
EthernetTest(data_buf, len);
}
break;
case SOCK_CLOSE_WAIT:
//If the client request to close
disconnect(sock);
m_SokStatus1 = 0;
break;
default:
break;
}
}
{
unsigned int len;
unsigned char data_buf[TX_RX_MAX_BUF_SIZE];
unsigned int port = MY_LISTEN_PORT;
switch (getSn_SR(sock))
{
// Socket CLOSED일 경우
case SOCK_CLOSED:
if(!m_SokStatus1)m_SokStatus1 = 1;
//socket 초기화 하고
if(socket(sock,Sn_MR_TCP, port,0x00) == 0)
{
DebugPrint("Fail to create socket.");
m_SokStatus1 = 0;
}
else
{
//접속대기
listen(sock);
}
break;
case SOCK_ESTABLISHED:
//수신데이터가 있으면
if((len = getSn_RX_RSR(sock)) > 0)
{
if (len > TX_RX_MAX_BUF_SIZE) len = TX_RX_MAX_BUF_SIZE;
//데이터 수신
en = recv(sock, data_buf, len);
//수신데이터 처리
//send(sock, data_buf, len);
EthernetTest(data_buf, len);
}
break;
case SOCK_CLOSE_WAIT:
//If the client request to close
disconnect(sock);
m_SokStatus1 = 0;
break;
default:
break;
}
}
[AT90USB1287-EX] 이더넷 데이터 수신 처리 처리 함수
//-----------------------------------------------------------------------------
//수신데이터 처리
void EthernetTest(unsigned char *pRcvBuffer, unsigned int len)
{
unsigned int i;
char buf[32];
DebugPrint("Read Data[%d]\r\n", len);
//Packet CMD Check
if(pRcvBuffer[0] == 0x55)
{
switch(pRcvBuffer[1])
{
case '0':
Led1Off();
break;
case '1':
Led1On();
break;
case '2':
Led2Off();
break;
case '3':
Led2On();
break;
case 'r':
sprintf(buf, "%d\r\n", AdcRead(2));
send(SOCK_TCPS, buf, strlen(buf));
break;
}
}
}
//수신데이터 처리
void EthernetTest(unsigned char *pRcvBuffer, unsigned int len)
{
unsigned int i;
char buf[32];
DebugPrint("Read Data[%d]\r\n", len);
//Packet CMD Check
if(pRcvBuffer[0] == 0x55)
{
switch(pRcvBuffer[1])
{
case '0':
Led1Off();
break;
case '1':
Led1On();
break;
case '2':
Led2Off();
break;
case '3':
Led2On();
break;
case 'r':
sprintf(buf, "%d\r\n", AdcRead(2));
send(SOCK_TCPS, buf, strlen(buf));
break;
}
}
}
반응형