[W5500] 소켓 생성 문의

안녕하세요
W5500을 이용하여 TCP 통신을 하고자 합니다.

우선 ioLibrary를 DSP28335에 포팅하여 ping 테스트까지 확인 하였습니다.

제공한 loopback_tcps or loopback_tcpc를 실행하면 socket함수의 while 구문에서 빠져나오지 못하고 있습니다. socket.c의 socket함수 "while(getSn_SR(sn) == SOCK_CLOSED); "

wiz_NetInfo WIZNETINFO = { .mac = {0x00, 0x08, 0xdc,0x00, 0xab, 0xcd},
.ip = {192, 168, 1, 200},
.sn = {255,255,255,0},
.gw = {192, 168, 1, 1},
.dns = {8,8,8,8},
.dhcp = NETINFO_STATIC };

wiz_NetInfo getINFO = { .mac = {0x00, 0x00, 0x00,0x00, 0x00, 0x00},
.ip = {0x00, 0x00, 0x00, 0x00},
.sn = {0x00,0x00,0x00,0},
.gw = {0x00, 0x00, 0x00, 0x00},
.dns = {0,0,0,0},
.dhcp = NETINFO_STATIC };

ctlnetwork(CN_SET_NETINFO, (void*)&WIZNETINFO);
ctlnetwork(CN_GET_NETINFO, (void*)&getINFO);

getINFO 구조체를 확인하면 WIZNETINFO의 값과 같습니다.

이상태에서 PC에서 ping 수행시 정상 동작합니다.

아래 코드 실행
setSn_MR(0, Sn_MR_TCP);
setSn_PORT(0,3000);
setSn_CR(0,Sn_CR_OPEN);
while(getSn_CR(0));
while(getSn_SR(0) == SOCK_CLOSED); ==>> 여기 루프에서 빠져나오지 못함

참고로 아래 코드는 정상 동작함
Data1 = getVERSIONR(); // Data1 값 : 0x04
Data2 = getSn_TTL(0); // Data2 값 : 0x80
Data3 = getRTR(); // Data3 값 : 2000

소스 포트가 3000으로 설정된 상태에서
getSn_PORT(0) 실행 후 5 BYTE 수신됨
[0] 0x01, [1] 0x02, [2] 0x03, [3] 0x0B, [4] 0xB8 로 수신됨
더미 데이터(0~2), 결과(3~4) 값이 0x0BB8 (d 3000)

setSn_CR(0, Sn_CR_OPEN) 으로 설정 후 getSn_SR(0) 값 확인 시 0x13 이 아닌 0x00로 수신됨
getSn_SR(0) 실행 후 4 BYTE 수신됨
현재 - [0] 0x01, [1] 0x00, [2] 0x06, [3] 0x00
예상 - [0] 0x01, [1] 0x02, [2] 0x03, [3] 0x13(SOCK_INIT)

소켓생성에 필요한 다른 절차가 필요한가요??

필요한 다른 절차는 없습니다.
우선 ioLibrary를 업데이트하여 한번더 테스트 해보시길 바랍니다.
이전에 이와 비슷한 증상이 있었던 고객은 자삽 불량으로 확인되었습니다.
해당 고객도 PING은 전송되었지만 SOCKET 상태가 CLOSED에서 변하지 않았습니다.
한번 더 확인해보시길 바랍니다.

"자삽 불량"이 뭔가요?

getSn_SR(0) 실행 후 4 BYTE 수신됨
현재 - [0] 0x01, [1] 0x00, [2] 0x06, [3] 0x00
예상 - [0] 0x01, [1] 0x02, [2] 0x03, [3] 0x13(SOCK_INIT)

getSn_SR 만 실행하면 왜 수신되는 더미 값이 [1][2][3][xx] 아니고 [1][0][6][xx] 인가요?
이전에도 이런 문의가 있었나요?

다른 모든 get 함수 실행 후 수신되는 더미값은 [1][2][3][xx] 형태입니다.

자삽은 PCB 생산과정에서 기계를이용하여 부품을 삽입하는것을 말합니다.
PCB불량으로 추측됩니다.

비슷한 증상을 겪으신 고객 문의글입니다.

getSn_SR 만 실행하면 왜 수신되는 값이 [1][2][3][xx] 아니고 [1][0][6][xx] 인가요?

다른 모든 get 함수 실행 후 수신되는 값은 [1][2][3][xx] 형태입니다.

DGND 연결이 잘못되어 발생한 문제입니다.

네 해결하셨다니 다행입니다.
감사합니다