[iMCU W7100 EVM] TCP/IP 테스트 (TCP 전송 속도 테스트)
W7100은 W5100코어가 포함되어 있기 때문에 기존 하드웨어 독립적으로 작성한 예제를 이용하면 수정없이 사용가능하다.
일단 이더넷 속도 테스를위해 루프백(수신 데이터를 그대로 전송) 테스트를 해 보았다.
TCP 서버 데이터 처리
ProcessTcpSever() 함수에서 TCP 시퀀스를 폴링으로 처리 한다.
소켓의 상태를 검사 하다 데이터가 수신되면 recv()함수로 수신된 바이트를 읽어오면 된다.
테스트로 3.4M byte 이미지 데이터 연속적으로 전송하고 송수신 시간을 측정해 보았다.
5.4Mps가 나오다. 0.5초만에 이미지 전송이 가능하다. [AVR-Mega128 EVM 이더넷 전송 속도테스트] 와 비교해 보면 알수 있듯이 16Mhz AVR보다 빠른 전송 속도가 나온다. 요즘 AVR 가격이 많이 올라 소매가 9000원 정도 한다. MCU+W5100이 포함된 W7100이 소매가 6500원에 판매 되니 가격대 성능비로는 나쁘지 않은것 같다. (물론 단점도 만이 있지만...)
W7100은 W5100코어가 포함되어 있기 때문에 기존 하드웨어 독립적으로 작성한 예제를 이용하면 수정없이 사용가능하다.
일단 이더넷 속도 테스를위해 루프백(수신 데이터를 그대로 전송) 테스트를 해 보았다.
TCP 서버 데이터 처리
ProcessTcpSever() 함수에서 TCP 시퀀스를 폴링으로 처리 한다.
소켓의 상태를 검사 하다 데이터가 수신되면 recv()함수로 수신된 바이트를 읽어오면 된다.
//TCP-Server 처리
void ProcessTcpSever(void)
{
int len;
unsigned char data_buf[TX_RX_MAX_BUF_SIZE];
unsigned int port = MY_LISTEN_PORT;
switch (getSn_SR(SOCK_TCPS))
{
case SOCK_ESTABLISHED:
//데이터 수신 검사
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;
//데이터 수신
len = recv(SOCK_TCPS, data_buf, len);
send the received data
send(SOCK_MYTEST, 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;
}
//reinitialize the socket
if(socket(SOCK_TCPS,Sn_MR_TCP, port,0x00) == 0)
{
DebugPrint("Fail to create socket.");
m_SokStatus1 = 0;
}
else
{
listen(SOCK_TCPS);
}
break;
}
}
void ProcessTcpSever(void)
{
int len;
unsigned char data_buf[TX_RX_MAX_BUF_SIZE];
unsigned int port = MY_LISTEN_PORT;
switch (getSn_SR(SOCK_TCPS))
{
case SOCK_ESTABLISHED:
//데이터 수신 검사
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;
//데이터 수신
len = recv(SOCK_TCPS, data_buf, len);
send the received data
send(SOCK_MYTEST, 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;
}
//reinitialize the socket
if(socket(SOCK_TCPS,Sn_MR_TCP, port,0x00) == 0)
{
DebugPrint("Fail to create socket.");
m_SokStatus1 = 0;
}
else
{
listen(SOCK_TCPS);
}
break;
}
}
테스트로 3.4M byte 이미지 데이터 연속적으로 전송하고 송수신 시간을 측정해 보았다.
5.4Mps가 나오다. 0.5초만에 이미지 전송이 가능하다. [AVR-Mega128 EVM 이더넷 전송 속도테스트] 와 비교해 보면 알수 있듯이 16Mhz AVR보다 빠른 전송 속도가 나온다. 요즘 AVR 가격이 많이 올라 소매가 9000원 정도 한다. MCU+W5100이 포함된 W7100이 소매가 6500원에 판매 되니 가격대 성능비로는 나쁘지 않은것 같다. (물론 단점도 만이 있지만...)
반응형