안녕하세요. 일단 w5200 tcp server로 동작하여 pc쪽에서 연결을하고 데이터를 보내면 잘 받아집니다.
문제는 w5200을 client로 놓고 데이터를 특정 ip대상으로 보낸후, 다시 그쪽에서 보낸 데이터를 받아야하는데
여기서 잘 받아지지가 않습니다…자꾸 엉뚱한 값이 나오는데 아래는 받는 부분 소스 입니다…
제가 뭘 놓치고 있는지 자꾸 0값만 돌아오네요…조언 좀 부탁 드리겠습니다…
void TCP_client_con_one()
{
uint8 cmd_uart[4]={0xf1,MSB,LSB,0xf2};
int chk;
chk = 1;
while(chk == 1)
{
socket(s,Sn_MR_TCP,port,mode); // open the SOCKET
switch(getSn_SR(s))
{
case SOCK_INIT: // The SOCKET opened with TCP mode
if(MSB!=B9){
switch(LSB){ //LSB는 UART에서 수신된 명령어 입니다..
case 0x01:connect(s, addr0, port);break; //커넥션을 하구요..
default: break;
}
}
wait_1ms(10);
if(getSn_SR(s)==SOCK_ESTABLISHED) // connected
{
if (getSn_IR(s) & Sn_IR_CON) // Confirm if received the data
{
send(s, cmd_uart, 4, 0); //DATA SEND..잘 보내집니다..
IINCHIP_WRITE(Sn_IR(s),Sn_IR_CON); // clear Sn_IR_CON
chk=0;
wait_1ms(5);
//이 부분이 문제 같은데 SERVER모드에서 데이터수신할때 쓰던 소스입니다..
if( (len=getSn_RX_RSR(s)) > 0 ) // check the size of received data
{
if(len > MAX_BUF_SIZE) len = MAX_BUF_SIZE; //MAX_BUF_SIZE = 2048
recv_len = recv(s, data_buf, len); //수신함수 입니다..
for(i=0;i<4;i++){
P(data_buf[i]); //받은 데이터를 UART로 뿌려주는 겁니다.
}
}
}
}
break;
default:
break;
} //switch
if (chk != 0)
close(s); // close the SOCKET
} //while
}