안녕하세요…
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를 다운로드 받아서
그걸 사용해 보려고 하는데 라이브러리 세팅 방법이 없네요.
혹시 예제는 없을까요?
bangbh
3
안녕하세요.
질문하신 내용이 정확하게 이해는 가지 않습니다만…
일단 코드상으로 보면 switch ~ case 문이 while로 돌거 같은데 새로 들어온 데이터가 있는지 getSn_RX_RSR(sn)으로 확인하시고
recvfrom을 수행하시면 좋을 것 같습니다.
그리고 랜 케이블을 제거하셨다고 해도 소켓은 SOCK_CLOSE 상태로 변하지 않습니다.
별도로 Link led의 상태를 확인해서 랜선이 떨어졌는지 유무를 확인하셔야합니다.
참고로 ioLibrary driver에 W5300 driver가 통합되었습니다.
아래 링크에서 다운로드할 수 있습니다.
[url]https://github.com/Wiznet/ioLibrary_Driver[/url]
감사합니다.
그곳에서 다운로드 받았는데
loopback 함수만 있고 라이브러리 초기세팅하는 부분이 없어서요…
ㅠㅠ…
bangbh
5
W5300과 interface되어 있는 MCU 혹은 보드를 가르쳐 주시면
검토하여 회신드리겠습니다. e-mail을 주셔도 됩니다.
peter@wiznet.co.kr
감사합니다.
통신문제는 알켜주신 방법으로 해결했습니다.
감사합니다.
W5300과 연결된 MCU는 ATMEGA128입니다.
chip init 부분과 sysinit 이부분이 다른것 같은데요…
bangbh
8
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를 업데이트 한지 얼마 되지 않아서 아직 공식적인 예제는 없지만 필요하시다면 작성하여
공유하도록 하겠습니다.
감사합니다.