w5100 keepalive 문의

w5100 TCP 통신을 사용 하고 있습니다.

W5100에 PC 2대가 연결 되어있는 상태에서 강제로 PC 1대의 LAN선을 제거시

SOCK_ESTABLISHED 상태로 유지 되고있습니다.

그래서 keepalive를 사용해 통신 안될 시 TIMEOUT을 사용 하고 있는데요.

RTR 2200(220mS) RCR(8) 설정 후 IINCHIP_WRITE(Sn_CR(s),Sn_CR_SEND_KEEP) 1회 전송 후

재전송 타임을 체크해 보니 1회당 keepalive 타임이 220mS가 나와야 하는데 2초~4초로 랜덤하게

나오고 있습니다. 220mS * 8 = 약 1.8초 가 나와야 하는거 같은데 랜덤하게 나와서 8회 전송 완료

타임이 약 20초 가량 나오고 있습니다. W5100에서 RTR 타임마다 RCR 카운트 만큼 알아서 처리해

주는거 같은데 위같은 증상이 나오는 이유가 무엇입니까? 해결 방안이 있습니까?

wireshark tool을 이용하여 해당 패킷을 확인하고 계신건가요?
만약 그렇다면, 동작하는 패킷을 첨부해주시면 확인해보도록하겠습니다.

또한 RTR와 RTR 값을 설정한 부분도 첨부해주세요.


setRTR(2200);
setRCR(8);
셋팅은 초기 INIT 할 때 한번 셋팅 합니다.
void setRTR(uint16 timeout)
{
IINCHIP_WRITE(RTR0,(uint8)((timeout & 0xff00) >> 8));
IINCHIP_WRITE((RTR0 + 1),(uint8)(timeout & 0x00ff));
}
void setRCR(uint8 retry)
{
IINCHIP_WRITE(RCR,retry);
}

안녕하세요

W5100S 문서에서 해당관련 내용을 캡쳐해드립니다.
W5100과 원리는 같습니다.


위의 내용처럼 Retransmission time은 배수로 증가하여 아래와 같이 계산됩니다.
220ms + 220ms*2 + 220ms *4 + 220ms * 8 + 220ms * 16 …

올려주신 와이어 샤크를 보면 초기 재전송 값이 220ms가 아닌 440ms 로 보이는 점이 의문이지만 그이후 값은 위의 내용과 일치하는 것으로 보입니다.