W5500 UDP 연결후 수신이 안됩니다.

반갑습니다. 포럼에서 많은 도움 받고 있습니다. 감사합니다.

W5500 UDP 연결해서 사용중입니다.
보드의 송신Data는 PC에서 잘 받습니다. 반대로 PC의 Data는

  1. getSn_SR(sn) 하면
  2. case SOCK_UDP: 로 진입은 되나
  3. if((size = getSn_RX_RSR(sn)) > 0) 에서 size가 항상 0입니다.
    wireshark 캡쳐 자료 첨부 드립니다.

첨부 부탁드립니다.

Pcap의 파일형태로 부탁드립니다. 해당 부분만을 보고 답변드리기 어렵습니다.

캡쳐자료.zip (1.2 KB)

모듈 ->PC로 보낼때는 port 가 1004 → 20000 으로 보내고
PC ->모듈로 보낼때는 port가 1004 → 1004로 보내고 있습니다.

이유가 있는건가요?

PC측에서 송수신 포트를 다르게 요청을 해서
다르게 사용하고 있습니다.
같은 포트로 캡쳐한 파일 첨부드립니다.
같은 포트 사용해도 수신은 못하네요. 그리고 TCP는 송수신 잘됩니다.캡쳐(동일포트).zip (4.2 KB)

UDP 사용시 wizchip_con.h 내용을 변경을 해야 하나요?

PC측 송신 프로그램을 다른걸로 하니 제대로 수신됩니다.
TCP에서는 잘되어 믿고 사용했는데, 원인은 모르겠습니다.
그런데 수신Data 사이즈가 보낸것 보다 많은 Data를 수신 하였습니다.
이전에 보낸Data가 뒤에 이어서 나옵니다. 원인이 뭘까요?
“0123456789” 10byte를 보냅니다.
20210430_162741
위의 Data는 받은 Data를 RS232로 프린터 한 Data 결과입니다.
캡쳐Data는 10Bytes라고 되어 있습니다.캡쳐.zip (759 바이트)
실제로 수신 길이를 디버깅 하면 18byte가 됩니다.

IO 라이브러리는 ret = recvfrom(sn, buf, size, destip, (uint16_t*)&destport); 에서 받은 ret를 실제 사이즈로 사용하고 있네요. 이렇게 하니 정상입니다.
size = getSn_RX_RSR(sn) 의 사이즈가 8bytes 많은 이유는 뭔가요?
감사합니다.

안녕하세요

Receive buffer의 실제로 수신하는 데이터는 아래와 같습니다.

recvfrom()함수에서 이를 파싱한후 데이터를 반환합니다.
아래 링크 참고하시기 바랍니다.