안녕하세요
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)
소켓생성에 필요한 다른 절차가 필요한가요??