ti dsp 28377 에다가 w5300칩을 16bit bus 붙였습니다.
W5300칩을 UDP와 TCP 슬레이브로 설정하면 접속 및 송수신이 잘 됩니다.
그런데, W5300칩을 TCP 서버로 설정하면 접속이 되지않고 10061에러가 발생합니다.
소켓 오픈하고, 리슨상태로 되었는데, 접속 거부가 되는 이유가 무었이 있을까요?
아이피 세팅은 잘 되어서 ping은 잘 옵니다. tcping 결과는 포트가 열려있지 않다고 나옵니다.
아래는 설정입니다.
wiz_NetInfo gWIZNETINFO = {
.mac = {0x00, 0x08, 0xdc, 0, 0, 0},
.ip = {192, 168, 0, 55},
.sn = {255, 255, 255, 0},
.gw = {192, 168, 0, 1},
.dns = {0, 0, 0, 0},
.dhcp = NETINFO_STATIC
};
uint32_t MR_addr;
uint16_t wiznetErr = 0;
uint16_t wiznet_memsize[2][8] = {{8,8,8,8,8,8,8,8}, {8,8,8,8,8,8,8,8}};
void tcp_Init(void)
{
reg_wizchip_bus_cbfunc(W5300_read, W5300_write);
MR_addr = getMR();
wiznetErr = ctlwizchip(CW_INIT_WIZCHIP, (void*)wiznet_memsize);
ctlnetwork(CN_SET_NETINFO, (void *)&gWIZNETINFO);
wizchip_getnetinfo(&gWIZNETINFO_CHK);
}
int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t port)
{
int32_t ret;
uint16_t size = 0, sentsize=0;
char txBuf[100];
#ifdef LOOPBACK_DEBUG
uint8_t destip[4];
uint16_t destport;
#endif
retSR = getSn_SR(sn);
switch(retSR)
{
case SOCK_ESTABLISHED :
if(getSn_IR(sn) & Sn_IR_CON)
{
#ifdef LOOPBACK_DEBUG
getSn_DIPR(sn, destip);
destport = getSn_DPORT(sn);
sprintf(txBuf, "%d:Connected - %d.%d.%d.%d : %d\r\n",sn, destip[0], destip[1], destip[2], destip[3], destport);
print485_1(txBuf,strlen(txBuf));
#endif
setSn_IR(sn,Sn_IR_CON);
}
if((size = getSn_RX_RSR(sn)) > 0) // Don’t need to check SOCKERR_BUSY because it doesn’t not occur.
{
if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
ret = recv(sn, buf, size);
if(ret <= 0) return ret; // check SOCKERR_BUSY & SOCKERR_XXX. For showing the occurrence of SOCKERR_BUSY.
size = (uint16_t) ret;
sentsize = 0;
while(size != sentsize)
{
ret = send(sn, buf+sentsize, size-sentsize);
if(ret < 0)
{
_close(sn);
return ret;
}
sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.
}
}
break;
case SOCK_CLOSE_WAIT :
#ifdef LOOPBACK_DEBUG
sprintf(txBuf, “%d:CloseWait\r\n”,sn);
print485_1(txBuf,strlen(txBuf));
#endif
if((ret = disconnect(sn)) != SOCK_OK) return ret;
#ifdef LOOPBACK_DEBUG
sprintf(txBuf,“%d:Socket Closed\r\n”, sn);
print485_1(txBuf,strlen(txBuf));
#endif
break;
case SOCK_INIT :
if( (ret = listen(sn)) != SOCK_OK) return ret;
#ifdef LOOPBACK_DEBUG
sprintf(txBuf, “%d:Listen, TCP server loopback, port [%d]\r\n”, sn, port);
print485_1(txBuf,strlen(txBuf));
#endif
break;
case SOCK_CLOSED:
if((ret = socket(sn, Sn_MR_TCP, port, 0x00)) != sn) return ret;
#ifdef LOOPBACK_DEBUG
sprintf(txBuf, “%d:Socket opened\r\n”,sn);
print485_1(txBuf,strlen(txBuf));
#endif
break;
default:
break;
}
return 1;
}