W5500 UDP packet 수신 질문

#1

W550io를 이용해 테스트를 하고있습니다.

현재 AX 프로그램을 이용해 UDP loopback을 테스트 하고있는데요

TX_RX_MAX_BUF_SIZE는 2048 로 주었고

처음 초기화시 socket의 tx,rx size를 다음과 같이 주었습니다. 0,1,2 만사용, DHCP용 == 3

uint8 txsize[MAX_SOCK_NUM] = {4,4,4,2,0,0,0,0};
uint8 rxsize[MAX_SOCK_NUM] = {4,4,4,2,0,0,0,0};

그리고 AX를 이용해 loopback 테스트를 하는 도중 질문이 있습니다.

size를 0~1450정도로 주었을때에는 loopback이 정상적으로 돌아옵니다.

하지만 그 이상이 되면 getSn_RX_RSR(s)로 정상적인 receive 길이가 나오지 않습니다.

wireshark로 찍어보면 frame이 나뉘어져서 보내는데

이 데이터들을 연속적으로 받을수는 없는건가요?

buffer는 2KB인데 실제로 받을수있는 데이터가 이에 모자라서 질문드립니다.

#2

WIZnet의 TCP/IP chip은
UDP 통신 시 MTU(1472) 이상을 송신하거나 수신할 수 없습니다.

getSn_RX_RSR() 값이 1472 이상 값을 리턴하는 경우 패킷이 두개 이상 들어 왔기 때문이며,
recvfrom()시 각 패킷 단위 수신하여 처리됩니다.
UDP의 각 패킷들은 destip / port / pack len 와 같은 header(8)를 포함하고 있으며, 헤더 처리후 해당 Packet의 data만 수신하도록 되어 있습니다.
자세한 것은 recvfrom 함수와 데이타시트를 참조하세요.