W5300 수신 시 데이터 크기 문제


#1

==영문 포럼에서 옮깁니다. ==

안녕하세요? 담당자님.

W5300 사용 중 수신 오류 문의 드림니다.
W5300은 Tcp serve로 설정하고 동작하고 있습니다.
256바이트 이하 데이터는 정상 수신합니다.
문제는 수신 데이터를 256바이트 이상 전송하면 데이터 오류가 발생합니다.
getSn_RX_RSR 함수의 리턴값도 정상값이 아니 값을 리턴하고 있습니다.
답변 부탁합니다.
감사합니다.

아래는 참고 tcps 코드입니다.

void w5300_tcps(SOCKET s, uint16 port, uint8* buf, uint16 mode)
{
int i;
uint32 len;
wSn_SSR =getSn_SSR(s);
switch(wSn_SSR) // check SOCKET status
{ // ------------
case SOCK_ESTABLISHED: // ESTABLISHED?
if(getSn_IR(s) & Sn_IR_CON) // check Sn_IR_CON bit
{
printf("%d : Connect OK\r\n",s);
setSn_IR(s,Sn_IR_CON); // clear Sn_IR_CON
}
if((len=getSn_RX_RSR(s)) > 0) // check the size of received data
{
len = recv(s,buf,len); // recv
m_bTcpRcvFlag = TRUE;
m_nTcpRevSize = len;
tcpRxCnt++;
}
break;
// ---------------
case SOCK_CLOSE_WAIT: // PASSIVE CLOSED
disconnect(s); // disconnect
break;
// --------------
case SOCK_CLOSED: // CLOSED
close_socket(s); // close the SOCKET
socket(s,Sn_MR_TCP,port,mode); // open the SOCKET
break;
// ------------------------------
case SOCK_INIT: // The SOCKET opened with TCP mode
listen(s); // listen to any connection request from “TCP CLIENT"
printf(”%d : LOOPBACK_TCPS(%d) Started.\r\n",s,port);
break;
default:
break;
}
}


#2

안녕하세요. 고객님.

우선 더미 허브같은 것을 이용하여 W5300이 실제로 받게 되는 패킷의 크기가 어떻게 되는지 확인 부탁드립니다.

RSR의 리턴값은 W5300이 실제로 받은 패킷의 크기 이므로 아마도 수신되는 패킷의 크기가 이미 변경되어 들어온 것으로 추정됩니다.

그리고 소켓버퍼의 크기는 어떻게 설정하셨는지와 RSR리턴값이 원하던 값보다 큰지 작은지 아니면 전혀 엉뚱한 값으로 들어오는지 확인 부탁드립니다.

감사합니다.


#3

안녕하세요? 담당자님.

수신버퍼의 크기는 8k 설정하였습니다.
해당 register에 쓰고 읽기를 하여 확인 해 보았습니다.

RSR 리턴값이 보낸 값보다 작게 들어 오는 것 같은데
257바이트 이상 보낼 때 부터 여러번 나누어 들어 옵니다.

예를 들어 특정 값을 256바이트 전송하면 정상적으로 수신하며 RSR 리턴값은 1회
수신됩니다. 이때 디버거를 통해 수신 데이터를 확인 해 보면 보낸 데이터와 동일 합니다.
특정 값을 257바이트 이상 전송하면 RSR 리턴값이 3~4회 수신 되며 오동작합니다.
loopback_tcps()함수를 이용하여 테스트 해 보았는데 PC에서전송 횟수는 1회인데
PC 수신 횟수는 3~4회 정도 입니다.

또 이 증상 발생 후 256바이트 이하로 데이터를 전송해도 정상 동작은 되지 않습니다.

현재 IPTime N604R 인터넷 공유기를 사용하고 있는데 혹시 이것과 관계 있을까요?
몇일 디버깅을 해봐도 도통 알 수가 없네요.
혹시 wireshark 프로그램으로 Capture한 데이터가 문제 해결에 도움이 될 수 있을까요?
위즈넷 홈피에 보니 이프로그램으로 데이터 Capture해서 분석하는 QnA가 있던데…

이상입니다.


#4

안녕하세요 고객님.

공유기 MTU값 설정 때문에 그럴수도 있습니다. 보통 기본값은 1500바이트이나 한번 확인 부탁드립니다.

아니면 W5300과 PC를 다이렉트로 연결해서 루프백 테스트를 해보시기 바랍니다.

혹시 송신단에서 자동으로 fragmentation을 하는 것은 아닌지도 확인 부탁드립니다.

루프백 테스트로 W5300이 3~4회 보냈다는 것은 패킷이 3~4회 입력 받았다는 의미이므로 PC에서 보내는 패킷이 손상 또는 변경되었을 것으로 판단 됩니다.

만약 더미 허브가 없어 W5300이 받는 패킷이 어떤 패킷인지 판단하기 힘들다면, PC to PC로 구성하여 wireshark와 같은 패킷캡쳐 프로그램으로 한번 분석해 보시는 것도 좋을 것 같습니다.

감사합니다.