W5500使用问题求帮助

W5500的sendto出现问题

uint16_t sendto(SOCKET s, const uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t port)
{
    uint16_t ret=0;
    static uint8_t flag=0;

   if (len > getIINCHIP_TxMAX(s))
   ret = getIINCHIP_TxMAX(s); // check size not to exceed MAX size.
   else ret = len;

   if( ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) || ((port == 0x00)) )//||(ret == 0) )
   {
      /* added return value */
      ret = 0;
   }
   else
   {
         //if(flag==0)
         //{
                IINCHIP_WRITE( Sn_DIPR0(s), addr[0]);
                IINCHIP_WRITE( Sn_DIPR1(s), addr[1]);
                IINCHIP_WRITE( Sn_DIPR2(s), addr[2]);
                IINCHIP_WRITE( Sn_DIPR3(s), addr[3]);
                IINCHIP_WRITE( Sn_DPORT0(s),(uint8_t)((port & 0xff00) >> 8));
                IINCHIP_WRITE( Sn_DPORT1(s),(uint8_t)(port & 0x00ff));
             //flag=1;
         //}

      // copy data
      send_data_processing(s, (uint8_t *)buf, ret);
      IINCHIP_WRITE( Sn_CR(s) ,Sn_CR_SEND);
      /* wait to process the command... */

      while( IINCHIP_READ( Sn_CR(s) ) )
      ;
      /* ------- */
     while( (IINCHIP_READ( Sn_IR(s) ) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK )
     {
      if (IINCHIP_READ( Sn_IR(s) ) & Sn_IR_TIMEOUT)
      {
            /* clear interrupt */
      IINCHIP_WRITE( Sn_IR(s) , (Sn_IR_SEND_OK | Sn_IR_TIMEOUT)); /* clear SEND_OK & TIMEOUT */
     printf("ooo\r\n");-------------------------------------------------------------------------------这里出现问题
      return 0;
      }
     }
      IINCHIP_WRITE( Sn_IR(s) , Sn_IR_SEND_OK);
   }
   return ret;
}

一直返回0,应该是一直TIME_OUT状态,我实在无法解决,请帮帮我

网络问题,最好结合抓包数据分析。光看代码很难分析。