w5100 전송이 끊기는 경우...

안녕하세요.
5100을 잘 쓰구 있읍니다.
그런데 프로토콜을 바꾸면서…
데이타를 전송하던중 새로운 패킷을 받으면 전송을 못하네요…

패킷1을 받아서 연속적으로 1초에 60회 데이타 전송하는 1회 전송시 대략 5msec걸립니다.
패킷1의 응답으로 1초 데이타 보내고 소켓루프 돌고 다시 1초 보내고…반복합니다.
반복 도중 패킷2를 받으면 전송이 홀딩됩니다.

그런데…패킷1+패킷2를 받아서 처리하게 되면 문제없이 동작합니다.

패킷1처리끝난후 패킷2를 처리후 다시 패킷1에 대한 연속 전송이 이뤄집니다.

서버로 설정해서 소켓8개 열어서 사용합니다.

w5100이 전송도중 패킷을 수신하게 되면 문제가 되는 것인가요?

                       민순.

안녕하세요.

Socekt을 UDP로 사용하고 계시는건가요??

말씀하신 ‘전송도중 패킷을 수신하게 되면 문제가 되는 것인가요??’

위 질문의 답은 상관없다. 입니다…

칩 내부에서 Data를 전송하는 TX memory와 data를 받는 RX memory가 분리되어 있기 때문에

전송도중 패킷을 수신하는건 상관없습니다.

감사합니다.

감사합니다.

사용하는 함수는 loopback_tcps()를 사용하고 있읍니다.

while(1) {
loopback_tcps(0,PORT_NUM,data_buf,0);
loopback_tcps(1,PORT_NUM,data_buf,0);
loopback_tcps(2,PORT_NUM,data_buf,0);
loopback_tcps(3,PORT_NUM,data_buf,0);
loopback_tcps(4,PORT_NUM,data_buf,0);
loopback_tcps(5,PORT_NUM,data_buf,0);
loopback_tcps(6,PORT_NUM,data_buf,0);
loopback_tcps(7,PORT_NUM,data_buf,0);

그리고…함수내에서는

void loopback_tcps(SOCKET s, uint16 port, uint8* buf, uint16 mode)
{
uint32 len;

switch(getSn_SSR(s)) // check SOCKET status
{ // ------------
case SOCK_ESTABLISHED: // ESTABLISHED?
if(getSn_IR(s) & Sn_IR_CON) // check Sn_IR_CON bit
{
printf2(PORT_DEBUG,“%d : Connect OK\r\n”,s);
setSn_IR(s,Sn_IR_CON); // clear Sn_IR_CON
LcdPrintf2L(4,“S%d Cli.Connected OK.”,s);
}
if((len=getSn_RX_RSR(s)) > 0) // check the size of received data
{
len = recv(s,buf,len); // recv
if(len) {
/// debug socket
//printf2(PORT_DEBUG,“sock/len : [%d]/[%d],”,s,len);
buf[len] = 0;
//printf2(PORT_DEBUG,“data : [%s]\r\n”,buf);

           // call
           GsParsing(s,buf,len);


        }
        //if(len !=send(s,buf,len))  // send
        //{
        //   printf2(PORT_DEBUG,"%d : Send Fail.len=%d\r\n",s,len);
        //}
     }

     GsSendReq128DataSend(s,buf);
     break;

위와 같이 파싱함수와 전송함수 두개를 추가하여 보내고 있읍니다.

클라이언트는 다른분이 PC에서 프로그래밍하고 있는데…

GsSendReq128DataSend() 이 함수가 실행되면 1초간 데이타를 계속 보냅니다.

데이타를 보내던중에 패킷을 클라이언트로부터 수신하게 되면 전송이 홀딩이 됩니다.

PC측에서도 원인을 몰라서 보드쪽을 의심하는데…

W5100은 송수신 무관하다는 것이죠??

전 PC측에서 이더넷측 에서 수신을 안하기에 보내질 못해서 멈추는 것으로 보고 있읍니다.

PC측에서는 버퍼 리드 타임아웃이 걸려 루틴을 빠져나왔다고 하네요…

어떤 문제 일까요? ^^

                                 민순.

안녕하세요 :slight_smile:

알려주신 정보로만으로는 문제를 파악하기 어렵습니다.

와이어 샤크 같은 패킷 캡쳐 프로그램을 통해 해당 패킷이 나가지않는 것인지 도달하지 못하는 것인지를 캡쳐 해보시기 바랍니다.

감사합니다.