WIZnet Developer Forum

W5300으로 udp통신 관련 문의드려요

안녕하세요.

예전 TCP 통신에 이어서 UDP로 통신해야하는 오더가 와서 진행하고 있습니다.

구성된 W5300보드와 PC와 1:1 크로스 케이블로 연결후에

제공된 loopback 함수를 실행하였습니다.

Sn_SSR의 값이 0x22로 UDP 사용 준비가 되었음을 확인하였습니다.

그리고 수신된 데이터 길이를 확인하는데, 저는 분명 10바이트를 전송하였는데, Received data의 Byte size를 확인해보면

22바이트 수신됨으로 잘못된 갯수가 뜹니다.

그리고 AX 프로그램에서도 전송로스가 발생되었고 재전송된다고 하는 메세지가 뜹니다.

어느 부분부터 확인을 하면 될까요?

recvfrom이라는 함수의 내용을 16비트로 처리하면 DSP가 에러를 내면서

부적절한 사용의 인터럽트에 걸립니다.

그래서 다음처럼 8비트로 수정하였습니다.
(이전 게시판의 UDP내용을 참고)

uint8 head[8];
uint16 data_len=0;

if ( len > 0 )
{
switch (IINCHIP_READ(Sn_MR(s)) & 0x07)
            {
                           case Sn_MR_UDP :
                                        wiz_read_buf(s, head, 0x08);
                                      // read peer's IP address, port number.
                                      addr[0] = head[0];
                                      addr[1] = head[1];
                                      addr[2] = head[2];
                                      addr[3] = head[3];
                                      *port = head[4];
                                      *port = (*port << 8) + head[5];
                                      data_len = (uint16)head[6];
                                      data_len = (data_len << 8) + (uint16)head[7];
 
                                      break;
=========================================================

수정한 후에는 DSP의 에러는 사라졌습니다. 

하지만, AX 프로그램으로 부터의 UDP 데이터가 정확하지 않습니다.

그래서 일단은 wiz_read_buf에서 수신되는 head의 내용을 살펴 보기로 하였습니다.

그랬더니, PC의 AX프로그램이 UDP 데이터를 전송 할때마다 head의 IP주소가 변경이 되었고(데이터는 잘못되더라도 IP주소는 고정이라고 생각하였습니다)

데이터의 길이 또한 가변됩니다.

참고로 wiz_read_buf함수는 TCP통신에서 잘사용되고 있습니다.

어떻게 하면 이문제를 해결 할 수 있을까요? 조언 부탁드립니다.

메일 주셨더군요.

답변이 늦어 죄송합니다.

해결하셨다니 다행입니다. 다른 문제가 있으면 언제든 메일 주세요. ^^

수고하세요.

참고로 ioLibrary driver에 5300도 통합되었습니다. 해당 드라이버를 사용하시면

조금 더 수월하게 코딩하실 수 있을 것으로 기대됩니다.

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

감사합니다.

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