WIZnet Developer Forum

W5300으로 udp 통신시 문의사항

안녕하세요…

W5300으로 UDP 통신을 하는데 이상한 점이 있어서 문의를 드립니다.

현상은 UDP로 송수신은 잘되는데
3~4회 서로 주고받다가는 W5300에서 계속 같은 데이터를 수신하고 송신하고 있습니다.
네트워크 케이블을 제거했는데도 recvfrom을 같은 데이터로 계속 수행을 하는 현상입니다.

switch(getSn_SSR(sock))
{
case SOCK_UDP:
	memset(data_buf, 0, 1024);
	len = recvfrom(sock, data_buf, len, destip, &destport);
	//DebugPrint("UDP_PORT: %ld\r\n", destport);
	if(destport == UDP_PORT2)
	{
		DebugPrint("UDP Recv: %d\r\n", len);
		//sendto(sock, data_buf, len, destip, destport);
		len = sendto(sock, buf, 4, destip, destport);
		DebugPrint("UDP Send: %d\r\n", len);
	}
	break;
case SOCK_CLOSED:
	DebugPrint("UDP Close..\r\n");
	close(sock);
	socket(sock, Sn_MR_UDP, UDP_PORT, 0);
	break;
}

상기는 소스입니다.

추가적으로 설정을 해야 하는 것이 있는건가요?

수고하세요…

ioLibrary_Driver를 다운로드 받아서
그걸 사용해 보려고 하는데 라이브러리 세팅 방법이 없네요.
혹시 예제는 없을까요?

안녕하세요.

질문하신 내용이 정확하게 이해는 가지 않습니다만…

일단 코드상으로 보면 switch ~ case 문이 while로 돌거 같은데 새로 들어온 데이터가 있는지 getSn_RX_RSR(sn)으로 확인하시고

recvfrom을 수행하시면 좋을 것 같습니다.

그리고 랜 케이블을 제거하셨다고 해도 소켓은 SOCK_CLOSE 상태로 변하지 않습니다.

별도로 Link led의 상태를 확인해서 랜선이 떨어졌는지 유무를 확인하셔야합니다.

참고로 ioLibrary driver에 W5300 driver가 통합되었습니다.

아래 링크에서 다운로드할 수 있습니다.
https://github.com/Wiznet/ioLibrary_Driver

감사합니다.

그곳에서 다운로드 받았는데
loopback 함수만 있고 라이브러리 초기세팅하는 부분이 없어서요…
ㅠㅠ…

W5300과 interface되어 있는 MCU 혹은 보드를 가르쳐 주시면

검토하여 회신드리겠습니다. e-mail을 주셔도 됩니다.

peter@wiznet.co.kr

감사합니다.

통신문제는 알켜주신 방법으로 해결했습니다.
감사합니다.

W5300과 연결된 MCU는 ATMEGA128입니다.
chip init 부분과 sysinit 이부분이 다른것 같은데요…

w5300을 initialization하는 부분은 동일할 거라고 생각됩니다.

먼저 wizchip_conf.h 중 4가지를 설정해주셔야 합니다.

WIZCHIP 5300 //W5300을 사용.

WIZCHIP_IO_MODE : direct 모드인지 indirect 모드인지.

WIZCHIP_IO_BUS_WIDTH: 8bit 주소인지 16bit 주소인지.

WIZCHIP_IO_BASE: W5300의 base address 주소(MCU에 맞게 설정하셔야 합니다.)

이 후 MCU에 맞는 bus call back 함수 작성하시고 reg_wizchip_bus_cbfunc()함수를 통해 물려주신 후

wizchip_init() 함수로 초기화 시키시고 사용하시면 될 것 같습니다.

iolibrary를 업데이트 한지 얼마 되지 않아서 아직 공식적인 예제는 없지만 필요하시다면 작성하여

공유하도록 하겠습니다.

감사합니다.

Copyright © 2017 WIZnet Co., Ltd. All Rights Reserved.