Dhcp 및 tcp 관련 문의

안녕하세요. 지금 W5500을 STM32 205 MCU에 연동하여 TCP 통신을 구현 중에 있습니다.
관련하여 문의 사항이 있어서 메일 보내드립니다.

우선 저희는 공유기를 통하여 DHCP로 IP를 할당받아 외부 서버와 TCP/IP 를 통하여 통신을 하려고합니다. 1

  1. DHCP로 IP를 할당 받으려면 라이브러리 중 DHCP.c에 있는 DHCP_run 함수를 통하여 IP를 할당 받은 후 Socket.c 에 있는 socket 및 connect 등의 함수를 이용하여 TCP 접속을 하면 되는건지요??
    static mode 인경우 바로 socket 및 connect 등의 함수를 이용하여 TCP/IP 통신을 하면 되는것으로 알고있으며DHCP mode 인경우 DHCP_Run 함수를 이용하여 우선 IP및 정보를 할당 받고 socket 및 connect 등의 함수를이용하여 TCP/IP 통신을 하는게 맞는지 알고 싶습니다…

2.DHCP_run을 이용하여 IP를 할당 받으려고 하는데 getSn_RX_RSR 함수를 이용하여 Rx 버퍼 길이 체크하는 부분에서 계속 0바이트로 리턴이 되는데 혹시 이런 경우에는 어떠한 문제가 있는 경우 발생하는지 알고 싶습니다.

답변 부탁드립니다. 감사합니다

안녕하세요.
위즈네트 DHCP 라이브러리는 초기에 한 번 수행되어야 하는 DHCP_init() 함수와 메인 루틴에서 동작 되어야 하는 DHCP_run() 함수로 구성됩니다.

(1)번 문의의 경우, 기본적인 구성은 언급하신 내용이 맞습니다만, 상세 내용 중에 빠진 부분이 있을까 싶어 자세히 적습니다.

우선, DHCP용으로 사용할 socket 번호와 사용자가 DHCP용 버퍼로 사용할 배열 공간을 정의하여 DHCP_init 함수를 통해 설정하는 과정이 선행되어야 합니다. 그리고 DHCP를 통해 IP를 할당 받은 후, reg_dhcp_cbfunc() 함수에 ‘my_ip_assign()’ 과 같은 callback function이 등록되어 있다면 다음과 같은 동작이 수행되어 W5500 칩에 네트워크 정보가 설정됩니다. (다음 예제코드와 같은 동작 함수가 포함되어 있지 않은 경우, 직접 칩 register에 설정해주셔야 합니다)

// DHCP IP 할당 동작 성공 후, 
// W5500 chip register에 DHCP 서버로부터 할당받은 Network 정보를 설정

wiz_NetInfo gWIZNETINFO;

getIPfromDHCP(gWIZNETINFO.ip);
getGWfromDHCP(gWIZNETINFO.gw);
getSNfromDHCP(gWIZNETINFO.sn);
getDNSfromDHCP(gWIZNETINFO.dns);

ctlnetwork(CN_SET_NETINFO, (void*) &gWIZNETINFO);

자세한 동작 flow는 다음 페이지를 참고하시면 좋을 것 같습니다.
github.com/Wiznet/W5500_EVB/blo … src/main.c

(2)번 문의의 경우, DHCP를 위해 할당된 socket이 정상적으로 DHCP_init()함수를 통해 등록되었다면 해당하는 socket의 Sn_RX_RSR register의 값은 수신된 데이터가 있을 때 마다 그 길이를 알리게 됩니다. 그렇지 않은 경우라면 제품과 정상적으로 네트워킹 할 수 있는 DHCP 서버(공유기 등 )가 있는지 확인 부탁 드립니다.