[W5300] Keep Alive 레지스터 설정 문의 드립니다.

안녕하세요!

W5300을 사용하여 TCP/IP 통신을 하고 있습니다.
Keep Alive 기능을 사용하고 있는데요! 설정 관련해서 문의 드립니다.

“Sn_KPALVTR = 10, 매 50s마다 KA packet을 전송” 이라고 메뉴얼에 되어 있는데요

Sn_KPALVTR에 1로 설정하고 Wireshark로 확인해 보면

Sn_KPALVTR = 1, 10초간격으로 KPALVTR Packet이 전송됩니다.
Sn_KPALVTR = 2일 경우 15초,Sn_KPALVTR = 3일경우 20초로 KPALVTR Packet이 전송됩니다.

그리고, TCP/IP 케이블을 RJ45 커넥터에 빼서 Timeout interrupt를 발생을 스톱워치로 측정하면
Sn_KPALVTR = 1로 설정하면 약 60초후에 Timeout interrupt 발생
Sn_KPALVTR = 2일 경우 약 65초 Timeout interrupt 발생
Sn_KPALVTR = 3일 경우 약 70초 Timeout interrupt 발생 합니다.

동작 시간 Offset이 발생하는데요 실제 동작이 위의 내용처럼 시간 Offset이 발생하는지요?
아니면, Sn_KPALVTR 레지스터 외에 설정 해야 하는 부분이 있는지요?

확인 부탁 합니다.

안녕하세요

keep alive packet은 데이터 송수신이 이루어지고 있지 않을경우,
상대방의 상태를 check하기 위해서 전송하는 패킷입니다.
Sn_KPALVTR=1일 경우 5초간격, Sn_KPAVLTR=2일경우 10초 간격으로 패킷이 나가는 것이 정상동작인데 이상하게 보여집니다.
따로 더 설정해주어야하는 부분은 없습니다.
wireshark와 코드를 주시면 확인 해드리겠습니다.

Timeout은 KPALVRT를 설정할 경우,
데이터 전송패킷에의한 Timeout이 발생하기전 Keep alive packet이 나가게 되고
데이터 전송패킷에의한 Timeout은 clear되고 keep alive packet에 대한 timeout이 발생하게 됩니다.
따라서 데이터 전송이 이루어지고 keep alive packet이 전송된 시점 이후부터 timeout 카운터가 적용되기 때문에, 1로설정할경우와 2로 설정할 경우의 timeout interrupt 발생시점의 시간차는 정상동작입니다.

안녕하세요!

Keep Alive Timeout 관련해서 계산상 동작 시간과 실제 동작 시간의 차이에대해 원인분석한 내용 입니다.

Sn_KPALVTR = 1, RTR = 50000 로 설정시에 10초간격으로 KPALVTR Packet이 전송 (Wireshark확인)되는 것은 Sn_KPALVTR 5초 + RTR 5초가 같이 동작해서 10초인것 같습니다.
RTR을 0으로 설정 하면 5초 간격으로 KPALVTR Packet이 전송됩니다.
Sn_KPALVTR = 2,RTR = 50000경우 15초 간격이 됩니다.

그리고 Timeout interrupt가 60초 후에 발생 하는것은
Sn_KPALVTR = 1, RTR = 50000 , RCR = 10 일경우
(Sn_KPALVTR 5초 x RCR 10회) + RTR 5초 해서 정확히 55초 후에 Timeout interrupt 발생
RCR를 변경하면 Timeout interrupt도 그에 대응해서 발생 합니다.

참고로 저희 보드는 RTR=50000, RCR = 10로 설정해서 사용 합니다.
Keep Alive가 RTR와 RCR이 같이 연동해서 동작 하는것 같습니다.