W7500p 네트워크 연결끊김

귀사의 W7500P를 사용하여 프로그램을 하고 있는 중입니다.
현재 저희는 W7500P로 서버프로그램을 6000번 포트에 만들어 클라이언트가 6000번 포트를 열어 receive상태가 되도록 한 후
서버에서는 연결된 클라이언트에게 데이터가 발생하는대로 계속 데이터를 보내주는 방식을 사용하고 있습니다. 중간 중간 데이터는 불규칙적으로 발생할 수 있고 클라이언트 PC는 다른 네트워크 장비 없이 바로 W7500P에 연결되어 있습니다.
W7500P는 192.168.1.98이라는 고정 IP를 가지고 있고 접속된 PC는 고정 IP를 192.168.1.XXX로 세팅하여 사용하고 있습니다.
저희가 알기로는 대부분의 칩들이 direct와 cross를 자동으로 세팅하기 때문에 크로스 케이블은 사용하지 않았습니다.
그런데 이 경우에 클라이언트에서는 서버가 connect되었다고 하는데 데이터가 도착하지 않습니다. 확인을 해보니
connect는 되었는데 getSn_SR(s)을 해보면 SOCK_ESTABLISHED 가 되어 있지 않다는 것입니다.
이러한 상황이 나타나는데 어떻게 해야 할까요?

안녕하세요.

W7500P를 사용하셔서 자체적으로 모듈을 제작하신건가요??

아니면 저희 WIZwiki-W7500P 보드를 구매하셔서 테스트를 진행하신건가요??

세팅을 정확하게 시도하셨다면 하드웨어일 가능성이 있습니다. 확인 부탁드립니다.

그리고 어떤 코드를 참조하여 구성하셨는지도 확인 부탁드립니다.

기본적으로 말씀하신 상황을 고려해보았을 때 Loopback 예제만 이용한다면 쉽게 사용이 가능합니다.

그리고 저희 W7500P는 AutoMDIX를 지원하지 않기 때문에, cross cable을 사용하기 위해서는 상대방 peer에 AutoMDIX가 지원되는 매개체가 있어야 합니다.

PC는 AutoMDIX를 지원하기 때문에 Cross든 direct든 자동으로 세팅이 가능한것이지요.

참고 부탁드립니다.

감사합니다.

안녕하세요 :slight_smile:

먼저 W7500P는 AutoMDIX를 지원한다는 말씀을 드려야 겠네요 ㅎㅎ W7500P에 들어간 PHY IC+(IP101G)은 Auto MDIX가 되는 PHY입니다.

그리고 보내주신 코드에서 Task가 계속 돌고 있는데 ESTABLISHED 상태일 때 하는 동작이 없는 것 같은데요…
Socket 상태가 ESTABLISHED 상태일때 Send하는 부분을 넣으시면 될 것 같습니다 아래는 저희가 제공해드리는 Loopback 예제의 Loopback Server가 ESTABLISHED 상태일때 동작하는 코드입니다. 참고하시기 바랍니다.

  case SOCK_ESTABLISHED :
     if(getSn_IR(sn) & Sn_IR_CON)
     {
		setSn_IR(sn,Sn_IR_CON);
     }
	 if((size = getSn_RX_RSR(sn)) > 0) // Don't need to check SOCKERR_BUSY because it doesn't not occur.
     {
		if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
		ret = recv(sn, buf, size);

		if(ret <= 0) return ret;      // check SOCKERR_BUSY & SOCKERR_XXX. For showing the occurrence of SOCKERR_BUSY.
		sentsize = 0;

		while(size != sentsize)
		{
			ret = send(sn, buf+sentsize, size-sentsize);
			if(ret < 0)
			{
				close(sn);
				return ret;
			}
			sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.
		}
     }
     break;

감사합니다 ^^