W5100 getSn_SR(sn) 함수에 대하여...

안녕하세요
W5100으로 개발을 진행중에 있어서 궁금한 점이 있습니다.

W5100 제품을 테스트 하던중 getSn_SR(sn) 함수를 통하여 소켓의 상태(?)를 받아와서
정상인지 비정상인지 판단하는 것 같은데
궁금한점이 있습니다.

w5100은 tcp 클라이언트로 동작하고 있습니다.

여기서 서버측을 끊으면 getSn_SR(sn) 함수에서 0x00 or 0x13이 리턴됩니다.

하지만 랜케이블 자체를 끊었을 때는 0x17 (SOCKET_ESTABLISHED)에서 변하질 않고
랜케이블을 다시 연결해도 그대로 유지되고 연결은 안됩니다.

제가 정리를 잘 못한것 같아 요약드립니다.

  1. W5100
  • TCP 클라이언트 작동 : getSn_SR(sn) 리턴값 정상 작동 시 , 0x17(SOCKET_ESTABLISHED)
  1. getSn_SR(sn) 함수의 리턴 값
  • 서버에서 연결을 해제하였을 경우 : getSn_SR(sn) 리턴값이
    0x00 (SOCKET_CLOSED) 와 0x13 (SOCKET_INIT)이 반복됨
    이 부분은 tcpc_rx 함수를 사용하여 그런것 같습니다.
    이 후 서버 소켓을 열었을때 다시 정상적으로 붙음

  • 랜케이블을 뽑았을 때 : getSn_SR(sn) 리턴값이
    0x17 (SOCKET_ESTABLISHED)로 유지됨.
    이 후 랜케이블을 다시 입력해도 접속이 안됨.

랜케이블이 뽑혔을 경우를 인식할 수 있는 방법이 없습니다.
그리고 다시 입력했을 경우도 이 부분을 판단할 수 없어 재연결이 힘듭니다.

제가 놓친 부분이 있는지 확인 부탁드립니다.

CLOSED상태에서 socket open시 INIT 상태로가며 서버와 연결되었을경우 ESTABLISHED 상태가 되는것이 정상작동입니다.

랜케이블이 뽑혀있을때 서버가 접속을 끊을경우, W5100에서는 이를 알 방법이 없습니다. 이상태에서 데이터를 전송할경우 서버로부터 응답이없기때문에 Timeout처리되어 연결이 끊길수 있습니다.
W5500이나 W5100S의 경우이러한 상황을 위해 주기적으로 패킷을 전송하는 Keep Alive 기능이 있습니다만 안타깝게도 W5100에는 적용되지 않았습니다.

친절한 답변 감사합니다. 혹시 w5100s로 바꾸는데 있어서 w5100과 IC 교체만으로도
호환이 가능할까요?

W5100과 W5100s는 Pin map이 같게 설정되어 있어서 IC 교체만으로도 사용이 가능하십니다.
iOLibrary에서 Define을 W5100 → W5100S 로 바꾸시면 될 듯 합니다.

감사합니다~
좋은 하루 보내십시요!

아 W5100S 48pin 이네요…