W5200 TCP zeroWindow

안녕하세요. 초보 f.w 개발자 입니다.

W5200에 STM32F2 사용중이며, loopback Test Source를 포팅하여 테스트 중 입니다.

설정은 PC - 192.168.0.99, MCU - 192.168.0.201, Subnet Mask 255.255.255.0, gateway 192.168.0.1

W5200에 Socket 0번만 사용 중이며, max SIze 16kb, 나머지 socket은 0byte 설정 되어있습니다.

SPI 30Mhz로 DMA 기능 사용하여 10Mbps 속도까지 나오고 있습니다.

이렇게 되면 TCP Zero Window & Window full가 많이 뜨면서, 가끔 통신이 끊어지는 경우도 있습니다.

그런데 그냥 SPI Mode는 5Mbps 속도가 나오지만, TCP ZeroWindow 이 가끔씩 발생 합니다.

또, 통신이 끊어지는건 보이지않습니다.

수신된 데이터를 제가 못읽어서 발생되는 문제같은데,

이렇게 되면 해결 방법은 AX1 Program으로 테스트를 못하는건가요?

TCP IP 통신프로그램을 짜서, MTU Size 만큼, 데이터를 쪼개서 보내야 되는건가요??

수신 len 보면 16384가 오는데, 저의 max buffer size는 1460이고,

if( RXR_Len > TX_RX_MAX_BUF_SIZE) RXR_Len = TX_RX_MAX_BUF_SIZE;

이 구분에 의해서 1460이 셋팅 됩니다. 정상 인가요?

Software 적으로 위 같은 문제를 개선 할수 있는 방법은 없는가요? 금번에 wiznet ic를 통한 프로젝트를 진행중인데,

통신이 조금 불안정하여, 걱정이 됩니다. MCU 사양을 STMF4로 10MBps 이상이 충족 되어야 해서요.

window error 관련 wireshark capture 파일 첨부 합니다.

확인 좀 부탁 드립니다!


안녕하세요…

알고 계시는 내용이지만, 설명드리자면
TCP zero Windows는 buffer의 사이즈만큼 데이터가 쌓여있을경우 발생합니다.

TCP ZeroWindows를 발생하지 않게 하기 위해서는
데이터가 수신되는 즉시, 읽어가시게 하면됩니다.
→ S0_IR의 bit 2 는 수신시 interrupt가 발생하게 됩니다. 이를 이용하여 읽어가시면 됩니다.

만일 제공하는 코드를 변경하지 않고 쓰고자 한다면, buffer size를 2K or 4K로 사용하는 방법도 있습니다.

감사합니다.
EK :slight_smile: