[문의] W5100 TCP Client 사용시 접속안됨

이더넷 통신 제품 개발중 W5100을 이용하여 이더넷 통신부분 프로그램 작성중 막히는 부분이 있어 질문 드립니다.

현재 Driver나 예제등을 검토하여 SPI설정후

  1. 0x0000주소에 0x80을 Write하여 리셋

  2.  	setSHAR(MACAddress);//Write MAC Address     unsigned char MACAddress[6] = {0x00, 0x08, 0xdc, 0x01, 0x02, 0x03};
     	setGAR(GateWay);//unsigned char GateWay[4] = {192, 168, 0, 1};
     	setSUBR(SubnetMask);//unsigned char SubnetMask[4] = {255, 255, 255, 0};
     	setSIPR(MySourceIP);//unsigned char MySourceIP[4] = {192, 168, 0, 60};
     	sysinit(0x55, 0x55);	//
    

설정값 기록

  1. Socket if(socket(Socket, Sn_MR_TCP, Port,0X20) == 0) //Fail
    {

     	}	
     	else //OK
     	{
     		//진입 성공
     	}
    

4.접속 시도 if( connect(Socket, MyDestinationIP, Port) == 0) 해당 부분에서 문제 발생

uint8_t connect(SOCKET s, uint8_t * addr, uint16_t port)
{
uint8_t ret;
if( ((addr[0] == 0xFF) && (addr[1] == 0xFF) && (addr[2] == 0xFF) && (addr[3] == 0xFF)) ||
((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
(port == 0x00) )
{
ret = 0;
}
else
{
ret = 1;
// set destination IP
IINCHIP_WRITE(Sn_DIPR0(s),addr[0]);
IINCHIP_WRITE((Sn_DIPR0(s) + 1),addr[1]);
IINCHIP_WRITE((Sn_DIPR0(s) + 2),addr[2]);
IINCHIP_WRITE((Sn_DIPR0(s) + 3),addr[3]);
IINCHIP_WRITE(Sn_DPORT0(s),(uint8_t)((port & 0xff00) >> 8));
IINCHIP_WRITE((Sn_DPORT0(s) + 1),(uint8_t)(port & 0x00ff));

	// m2012.03.13 [ys]: set/clear subnet for ARP Errata
	clearSUBR();
	
	IINCHIP_WRITE(Sn_CR(s),Sn_CR_CONNECT);		
	
	/* m2008.01 [bj] :  wait for completion */
	
	while ( IINCHIP_READ(Sn_CR(s)) );

	
	// check the SYN packet sending...
	while (IINCHIP_READ(Sn_SR(s)) != SOCK_SYNSENT )
	{

////////////
///// Sn_SR을 읽어보면 SOCK_ARP후 0x00이 됨.
/////////////

		if(IINCHIP_READ(Sn_SR(s)) == SOCK_ESTABLISHED)
		{
			break;
		}			
		if (getSn_IR(s) & Sn_IR_TIMEOUT)
		{			
			setSn_IR(s,(Sn_IR_TIMEOUT ));  // clear TIMEOUT Interrupt
			ret = 0;
			break;
		}
	}
	
	
	applySUBR();	
}
return ret;

}

코드 루틴 에서 Sn_SR을 읽어보았더니 SOCK_ARP에서 0x00 으로 된후 connect 실패로 뜹니다.

어떤 상황일때 이 현상이 발생하며 어떻게 해결해야 할까요

connect 후 타임아웃 끝난뒤 확인차 W5100의 레지스터를 읽어보니 정상적으로 값이 들어있음을 확인했습니다.

해당 통신 LAN선으로 접속하려는 곳으로 접속하여 라인이 살아있음도 확인 했습니다.

MAC Address 와 Gateway 그리고 Source IP를 레지스터에 넣고나면
해당 sourceIP로 ping 을 해보면 핑 테스트가 되나요?

질문이 잘 파악이되지 않습니다.
정상적으로 값이 들어있고 라인이 살아있는데 connect 실패라는 말씀인가요?
접속이 되는데 connect 실패라는 말이 이해가 되지않습니다. 좀더 정확하게 말씀해주세요

MAC, IP, GW, SN MASK을 써주면 ping test가 가능합니다.
ping request가 오지 않으면 ping block mode가 되었을 가능성도 있으니 확인해 주시기 바랍니다.

W5100의 datasheet는 아래 링크에서 확인 가능합니다.

wiznet.co.kr/wp-content/uplo … v1.2.5.pdf

감사합니다. :slight_smile:

접속이 되었다는것이 아니라 해당 랜선을 빼서 TCPIP 통신 프로그램으로 타겟 PC에 접속한것을 잘못 말했네요.

일단 위 현상에서 ping이 되지 않고 접속도 되지 않는 상황인데요. TX LED는 주기적으로 점멸 하고 있습니다. (socket 이후 connect는 실패시 계속

재 시도하도록 software를 코딩해놓은 상태입니다.)

다른 LED는 모두 꺼져있는 상태입니다.

DHCP 서버로 IP를 받아야 할까요? 임의로 위처럼 정해놓고 사용해도 문제가 없는것처럼 예제들을 검토해보았을때 그리 생각됩니다만…

레지스터에 MAC과 IP SocketMode에 TCP등등은 설정한대로 다 들어있음을 확인했습니다.

안녕하세요.

일단 RJ-45(Ethernet connector)에서 LED가 주기적으로 점멸된다는 것은 Hardware phy 부분은 연결이 되었다는 것을

의미합니다. 거기에 ping이 안된다는 것은 Ethernet Frame 쪽 Data 전송이 안된 것으로 판단됩니다.

우선 가장 먼저 Local상에서 각 네트워크 정보를 Setting한 후 TCP 통신 Test를 해보시는 것을 추천드립니다.

Local에서 통신이 정상적으로 되신다면, 이 후에 DHCP를 사용하여 외부 네트워크망과 통신을 진행해보세요.

감사합니다.

답변 감사합니다.

RJ45에서 LED가 깜빡 거리진 않습니다.

W5100에 연결된 Status LED중 TX LED에 불이 깜빡입니다.

다른건 다 꺼져있습니다~

RJ45는 XMG-J1B121ZCCD 이 모델을 쓰구 있습니다

이더넷케이블과 W5100과 제대로 연결이 되었는지 확인하고 싶은데

ping 테스트를 진행하려면

W5100의 설정을 어디까지 확인되면 ping 테스트가 가능한가요?