WIZnet Developer Forum

W5100 소켓 사용 문의

안녕하세요
STM32F4 시리즈와 W5100을 쓰고있습니다.

다름이 아니라 W5100의 소켓이 총 4개까지 지원되는걸로 알고있는데

제가 코드상에서

소켓을 총 0, 1, 2, 3을 사용하려고 합니다.

이 중에서 2번 소켓과 3번 소켓을 사용하니 데이터가 이상하게 들어와서
혹시 0, 1번 소켓을 사용하니 잘됩니다.

제가 소켓 번호를
#define UDP_SOCKET 0
#define UDP1_SOCKET 1
#define TCP_SOCKET 2
#define TCP1_SOCKET 3

으로 정의하고 사용중인데 이 값이 맞나요?

그리고 한가지 더 궁금한게
W5500을 사용할 때, 일반 SPI 속도에 대해서 나와있었던것 같은데

W5100 데이터시트를 제가 잘 못찾아서 그런지 SPI 최대 속도를 못찾았습니다.

혹시 죄송한데요 알려주실 수 있을까요?

안녕하세요.

소켓을 열려면 Sn_CR 레지스터를 통해 열 수 있습니다.
image

아래 데이터 시트를 참고하여 확인부탁드리겠습니다.

추가로 W5100 의 최대 속도를 기록해 둔 것은 없으나 W5500과 거의 비슷한 속도를 유지하며 데이터를 송수신합니다.

감사합니다.

안녕하세요 답변 감사합니다.
당연히 소켓을 열었습니다.
통신이 안되는 것이 아닌 데이터가 이상하게 들어옵니다.
앞서 말한대로 0번과 1번 소켓은 정상 작동합니다.
2번과 3번 소켓이 이상한 데이터가 들어와서 문의 드린겁니다. (송신도 마찬가지)
아래 udps_rx 함수를 첨부합니다.
위즈넷의 loopback 함수를 변형하여 사용하고 있습니다.

혹시 다른 부분을 살필게 있는지 확인 부탁드립니다.

int32_t udps_rx(uint8_t sn, uint8_t *buf, uint16_t port)

{

int32_t ret;

uint16_t size;

uint8_t destip[4];

uint16_t destport = port;

switch (getSn_SR(sn))

{

case SOCK_UDP:

    if ((size = getSn_RX_RSR(sn)) > 0)

    {

        if (size > UDP_DATA_BUF_SIZE)

            size = UDP_DATA_BUF_SIZE;

        ret = recvfrom(sn, buf, size, destip, (uint16_t *)&destport); 

        if (ret <= 0)

        {

            return ret;

        }

        return ret;

    }

    break;

case SOCK_CLOSED:

    if ((ret = socket(sn, Sn_MR_UDP, destport, 0x00)) != sn) //소켓이 닫혀있으면 다시 열어

        return ret;

    break;

default:

    break;

}

return 1;

}

해결하였습니다. 무슨 문제인지 감은 안잡히는데요…
W5100에 기본 함수 셋팅(SPI 셋팅) 한 후에
원래 없었던
wizchip_sw_reset(); 함수를 사용하니 잘 됩니다.

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