W5300 Sn_SSR값이 0x10이 읽어지는 경우 다시 질문입니다


#1

오늘 조금더 테스트를 해보니 상태방에서 비정상적으로 소켓을 종료하였을 때 Sn_SSR값이 0x10으로 읽어 집니다.
테스트를 해본 컴퓨터는 2대인데 각각 win7, winXP 입니다.

윈도우에서 테스트에 사용한 소켓 프로그램은 win7 VS2010 환경에서 빌드한 소켓 프로그램입니다.

win7에서 비정상적인 종료를 하였을때 아래와 같이 수행 되며 정상적 입니다.

  1. 인터럽트 발생 그때 각각의 값은 Sn_IR : 0x02, Sn_SSR : 0x00
  2. 오픈 명령 수행 Sn_CR = 0x01
  3. Sn_SSR 값 0x13 확인
  4. 커넥트 명령 수행 Sn_CR = 0x04
  5. 수초 후 타임아웃 인터럽트 발생 Sn_IR : 0x08, Sn_SSR : 0x00
  6. 다시연결 될때까지 2, 3, 4, 5 반복 상대방과 연결이 되면 정상 동작

winXP에서 비정상적인 종료를 하였을때 아래와 같이 수행 되며 비정상적 입니다.

위의 4번 까지는 동일함
5. 거의바로 1초내로 타임아웃 인터럽트 발생 Sn_IR : 0x08, Sn_SSR : 0x00
6. 2, 3, 4 수행 후 바로 Sn_SSR 레지스터를 읽었을때 값 0x00
7. 1~2초후 Sn_SSR 레지스터를 읽었을때 값 0x10
8. Sn_SSR 레지스터를 값 0x10을 확인 후 클로즈명령 수행 Sn_CR = 0x10
9. 6, 7, 8 무한 반복됨

8번을 수행하지 않고 대기하면 인터럽트가 발생을 안합니다. 계속 Sn_SSR 레지스터를 값이 0x10 입니다.
8번에서 칩을 리셋한 후 재접속을 시도하면 정상적으로 동작합니다.

이전 질문에서 소켓 클로즈명령을 수행할 경우 리셋과 같은 효과라고 하였는데 칩리셋 과 소켓 클로즈시에 각각 다른 현상이 나옵니다.
Sn_SSR값이 0x10일 경우가 확실히 발생합니다. Sn_SSR값이 0x10일 경우 처리 방법에 대해서 문의 드립니다.


#2

안녕하세요 고객님.

상기문제에 대해 상세히 검토해본 결과 W5300의 erratum중 하나였습니다.

https://www.wiznet.co.kr:8011/UpLoad_Files/ReferenceFiles/W5300_errata_kr_v1.2.1.pdf

위 링크는 W5300 errata이며 이 중 1번에 해당합니다.

간략하게 설명드리면, TCP 데이터 전송 과정이 완료되지 않은 상태, 즉 'send’명령 후 SEND_OK interrupt가 발생하지 않은 상태에서 사용자가 'close’나 'disconnect 명령으로 강제 종료를 하면 Sn_SSR이 0x10이나 0x11에서 변경되지 않아 TCP 연결이 설정 되지 않습니다.

해결방법은 errata에 있으며 추가코드를 삽입하면 문제가 해결 될 겁니다.

그래도 해결이 되지 않는다면 다시 질문 부탁드립니다.

감사합니다.