링크 off 상태로 전원 on 후 나중에 링크 on 시 에러

w5100 mega128 데모 보드 프로그램으로 테스트 중 네트워크 연결관련 문제가 발생했습니다.
네트워크 선을 연결한 상태에서 전원을 넣으면 dhcp도 잘 받아오고 tcp 통신도 문제없이 잘 동작합니다.
또한 위 상태에서 네트워크 선을 뺐다가 다시 연결해도 이상없이 동작을 합니다.

그런데 네트워크 선 연결을 제거하고 보드에 전원을 인가하고 기본 동작을 하다가 네트워크 선이 연결되면
ev보드 main 프로그램 아래 renet 부분부터 다시한번 네트워크 init 하는 동작을 실행 하도록 프로그램 했습니다.
이때는 dhcp를 받아오지 못해 tcp 동작이 하지 않습니다.

어떻게해야 되는지 확인 부탁 드립니다.

renet:
for (i = 0; i < MAX_SOCK_NUM; i++)
{
switch(ChConf.ch[i].type)
{
case NOTUSE: unregister_channel_handler(i);
break;

	case DHCP_CLIENT: PRINTLN1("%d : DHCP Client Start.",i);


case LB_UDP:
register_channel_handler(i,loopback_udp);
break;
case WEB_SERVER:
register_channel_handler(i,web_server);
break;
}
}

net_init();

안녕하세요 :slight_smile:

phy link 연결이 되기전에 이미 DHCP discover 패킷이 나간것이 아닌가 의심이 됩니다…

dhcp 패킷 나가기전에 delay를 어느정도 주고 해보시기 바랍니다.

안녕하세요.

일단 LAN 케이블을 연결하면, Peer와 peer사이에는 PHY를 이용하여 연결하게 됩니다.

따라서, renet부분에 PHY가 연결되면 initialize를 할 수 있게 동작하시면 될 것 같습니다.

소켓은 문제가 안되고 ioLibrary 코드를 살펴보시면 PHY initial 과정의 코드가 있습니다.

그 부분을 추가하셔서 테스트 해보세요…

감사합니다.

답변 감사합니다.

소켓은 문제가 안되고 ioLibrary 코드를 살펴보시면 PHY initial 과정의 코드가 있습니다.
그 부분을 추가하셔서 테스트 해보세요…

혹시 말씀하신 위 PHY initial 코드가 어느 부분에 있는지 위치 좀 알려주세요.

감사합니다.

안녕하세요.

아래 링크를 참조해주세요.

github.com/Wiznet/WIZ550web/blo … iHandler.c

위 링크는 WIZ550web(W5500)에 사용된 코드입니다.
위 코드 중에서 void W5500_Init(void) 부분을 살펴보시면, 각각의 chip의 initial 과정을 나타냅니다.

여기서 아래 2개의 함수로 실제 칩과의 통신이 이루어 지게 됩니다.

reg_wizchip_cs_cbfunc(wizchip_select, wizchip_deselect);
reg_wizchip_spi_cbfunc(wizchip_read, wizchip_write);

그리고 그 아래 코드를 이용해서 메모리 사이즈를 결정하게 됩니다.

if(ctlwizchip(CW_INIT_WIZCHIP,(void*)memsize) == -1) {
	myprintf("WIZCHIP Initialized fail.\r\n");
	return;
}

위 부분을 이용하여 initial 과정을 거치게 되므로 위 부분을 살펴보시면 될 것 같습니다.

감사합니다.