[WIZ550io] AX1 테스트

WIZ550io로 개발한 보드가 통신속도가 아무래도 느린 것 같아 AX1을 통해 테스트해봤습니다.

기본 send는 다음과 같이 정상적으로 됩니다.

그런데 파일 전송을 테스트하면 다음 상태에서 계속 멈춰있습니다.

무엇이 문제일까요?

제 PC는 윈도우즈10이라서 혹시 몰라 AX1은 호환성?으로 XP로 동작하게 설정했습니다.
전송 파일은 984KB짜리 텍스트 파일입니다.

Wireshark를 통해 패킷을 한번 보는것이 좋을 것 같습니다.
우선 473.14Mbps는 W5500에서 나올 수 없는 속도입니다.
상황에 따라 다르지만 1~10Mbps 에서 크게 벗어 나지 않습니다.

네 시도해보겠습니다.

테스트 결과 AX1은 윈도우10에서도 정상 동작하는 것으로 확인됩니다.
호환성 부분은 normal 로 사용하시면 됩니다. :slight_smile:

그리고 동작의 문제가 계속된다면,
위에서 답변드린것 처럼 화면 한쪽에서 wireshark를 통해 w5500을 필터링 하시고
다시한번 ax1으로 데이터 전송을 시도해서 멈추는 시점에서 wireshark의 패킷들을 확인하시고
해당 내용을 함께 첨부 부탁드립니다.

감사합니다.

확인해보니 [TCP Window Full] 발생하네요
그 이후에 [TCP ZeroWindow], [TCP ZeroWindowProbe], [TCP ZeroWindowProbeAck] 연속으로 발생…
파일 전송 시에 Length가 1662던데 길어서 처리가 안 되는걸까요?

드라이버 코드는 어떤걸 사용중이신가요?
파일이 크다고 해서 전송이 안되지는 않습니다.
패킷 파일을 첨부해주시면 도움이 될 것 같습니다.
혹시 첨부가 되지않는다면 becky@wiznet.io로 메일 부탁드립니다.

패킷 파일은 사실 단순히 "a"가 반복되는 txt 파일입니다.

드라이버 코드는 버전은 정확하게 모르겠으나 github에서 19년 8월 정도에 다운 받은 ioLibrary_Driver를 사용하고 있습니다.
이후 commit 내용은 w5500과는 관계가 없는 것으로 보여 수정하지 않았습니다.

MCU가 Ethernet으로 수신된 데이터를 읽어가지 않는다면, rx_buffer가 차면서 TCP ZeroWindow packet이 WIZ550io 에서 나가게 됩니다.
처음 100byte를 보냈을 때는 rx_buffer가 다 차지 않았기 때문에 WIZ550io에서 TCP ZeroWindow Packet을 보내지 않습니다만, 100byte을 연속으로 계속 보내게되면 ZeroWindow Packet을 보낼겁니다.

혹시 Socket을 열때 Sn_RXBUF_SIZE를 1k 로 세팅하신건가요?

또한, PC에서 보내는 데이터를 제대로 수신하려면 recv함수를 이용하여 MCU가 데이터를 읽어갈수 있게 만들어주셔야합니다.

세팅은 따로 하지 않았고, 예제의 loopback 함수를 사용하는 중입니다.
(혹시 예제 코드가 원본과 다르게 수정된 부분이 있는지 확인해볼게요)
대용량 테스트 시에는 제가 코드를 수정해야되는건가요?

안녕하세요

파일 전송 시에 len = 1662 를 확인하셨는데,
해당 내용을 wireshark에서 확인하셨나요?

혹시 wireshark에서 확인하셨다면 해당 패킷 및 앞뒤 패킷을 포함해서 캡쳐하신 뒤 첨부해주실 수 있으신가요?

감사합니다.

Wireshark에서 len 확인했습니다.


길이 154가 AX1에서 기본 send 테스트 한 것이고, 1662가 파일 선택 후 전송할 때에 길이입니다.

그 부분을 더 자세히하면


입니다.

파일 전송 테스트는 txt 파일 외에 다른 png 파일로도 시도해봤는데 같은 결과였습니다.

감사합니다.

위즈네트 칩셋들은 TCP통신에서 1472 byte 이상을 받을 수 없습니다.
따라서 PC에서 1662 byte 전송이 통신 장애를 일으킨것으로 보입니다.

또한 TCP 통신 시작시 아래와 같이 상대방이 받을 수 있는 최대 용량을 서로가 공유합니다.
(1420은 순수한 TCP 데이터이고 여기에 internet header + ethernet header가 추가되면 최대는 1472 byte가 됩니다.)

PC의 동작을 정확히 파악하긴 어렵지만 다음의 설정을 시도해볼 수 있을 것 같습니다.

image

image

image

다음과 같은 설정 후에도 같은 결과가 나오는지 확인 부탁드리고
똑같이 통신이 안된다면,
맨 처음 TCP 연결 후 데이터 전송 전의 패킷을 캡쳐 부탁드립니다. (MSS 확인용)
또한 사용하시는 펌웨어를 제가 확인해보는 방법도 고려해봐야할 것 같습니다.

감사합니다.

보여주신 세팅이 제 PC와 미묘하게 달라서 정확하게 설정을 했는지 모르겠습니다.
(대형 전송 오프로드 V2(IPv4)가 Large Send Offload v2 (IPv4), 점보 패킷이 점보 프레임, 전송 버퍼는 송/수신 버퍼로 되어있네요 제 PC에서는)

위와 같이 세팅하니 아까와 같은 값은 안 보이고, 전송 길이도 590으로 줄었습니다. 물론 몇번 전송이 되다가 [TCP Window Full] 발생합니다.

처음 TCP 연결 시의 패킷은




입니다.

혹시 몰라 wireshark 저장 파일도 업로드합니다.(처음 저장해서 원하는 정보가 저장되어 있는지는 모르겠네요)
ax1.zip (348.3 KB)

안녕하세요

보내주신 wireshark 를 통해 TCP 통신을 확인했습니다.

확인한 내용은 192.168.0.100에서 536 바이트를 3번 전송하고
192.168.0.161에서 window size가 440이 남았다고 응답했습니다.
그리고 192.168.0.100이 440 바이트 데이터를 전송한 뒤에
말씀하신 window full 현상이 나오고 있습니다.
(536+536+536+440 = 2048 = 2KB)

현재 이 상황으로 보면 192.168.0.161의 소켓 버퍼 사이즈인 2KB가 가득 찬뒤에 Recv 동작을 하지 않는것으로 보입니다.

따라서 코드를 확인하시어 소켓 수신버퍼크기를 확인 후 Recv 커맨드를 내리는 부분이 정상 동작하는지 확인이 필요해보입니다.

확인해보시고 필요하신 부분이 있으시면 포럼을 이용해주세요

감사합니다.