原创 单片机以太网-web网页问题

2010-12-3 07:58 4041 13 14 分类: MCU/ 嵌入式

uip协议栈,STC12LE58AD单片机。问题是得不到网页数据,10延迟后退出,发送无数据。


调试httpd部分串口输出如下:


ip: version4 header.
ip: POSSIBLE TCP RECEIVED.
tcp: checksum correct.
ip: version4 header.
ip: POSSIBLE TCP RECEIVED.
tcp: checksum correct.
tcp: goto found.
TCP: found 2.
TCP: found 3.
httpd_appcallTCP
HTTP_NOGET
TCP: found SYN_RCVD.
ip: version4 header.
ip: POSSIBLE TCP RECEIVED.
tcp: bad checksum.
ip: version4 header.
ip: POSSIBLE TCP RECEIVED.
tcp: checksum correct.
tcp: goto found.
TCP: found 1.
httpd_appcall
httpd_appcall
httpd_appcall
httpd_appcall
httpd_appcall
httpd_appcall
httpd_appcall
httpd_appcall
httpd_appcall
httpd_appcall
httpd_appcall
TCP: sending nodata
UIP_ABORT


wireshark抓捕如下:


(1.28 K)  该附件被下载次数 6 


主程序如下:



void main(void)
{
    u8_t arptimer;
 u8_t i;


 InitHardware();
    uip_init();


    httpd_init();


    //etherdev_init();
 //enc28j60Init(mymac);


    uip_arp_init();


    arptimer = 0;


    while(1)
    {
  WDT_CONTR=0x3C;//看门狗
  timer0();
//----------------------------------------//定时更新ARP  
  if(double_second)
  {
   double_second = 0;
   //SBUF=0XAA;
   for(i = 0; i < UIP_CONNS; i++)
   {
    uip_periodic(i);
    //If the above function invocation resulted in data that
    //should be sent out on the network, the global variable
    //uip_len is set to a value > 0.
    if(uip_len > 0)
    {
     uip_arp_out();
     enc28j60PacketSend(uip_len,uip_buf);
    }
   }
  }


//  uip_arp_timer();
//-----------------------------------------------------------------//检测数据接收
        //uip_len = etherdev_read();
  uip_len=enc28j60PacketReceive(UIP_BUFSIZE,uip_buf);


        if(uip_len == 0)
    continue;


  
        if(ETHBUF->type == htons(UIP_ETHTYPE_IP))//0x0800//IP协议族
  {
    if(BUF->proto==UIP_PROTO_TCP)//tcp
   {
    uip_process(UIP_DATA);
         if(uip_len > 0)
       enc28j60PacketSend(uip_len,uip_buf);//0x06
    continue;   
   }
   
   if(BUF->proto==UIP_PROTO_ICMP)//icmp//0x01
            {
   
             uip_arp_ipin();
             uip_input();


             if(uip_len > 0)
                {
                 uip_arp_out();
                 //etherdev_send();
     enc28j60PacketSend(uip_len,uip_buf);
     continue;
             }
            }
   if(BUF->proto==UIP_PROTO_UDP)//udp//17
   {
    continue;
   }


   }
        
   if(ETHBUF->type == htons(UIP_ETHTYPE_ARP))//0x0806
         {
    //UART1_PutStr(uip_buf,42);
             uip_arp_arpin();
 
             if(uip_len > 0)
                { 
                 //etherdev_send();
     enc28j60PacketSend(uip_len,uip_buf);
     continue;
             }
          }
/*
  if(BUF->proto==UIP_PROTO_TCP)
  {
   uip_process(UIP_DATA);
        if(uip_len > 0)
      enc28j60PacketSend(uip_len,uip_buf);
   continue;
  }
*/
    }//end while


 



    return;
}


 



<A class=ednchina_image title=点击查看 href="http://bbs.ednchina.com/downloadAttachment!attachment.jspa?attachmentId=10141652"  ><img style="CURSOR: hand" src="http://bbs.ednchina.com/downloadAttachment!attachment.jspa?attachmentId=10141652"   alt="" />



ping 都没问题



用wireshark查看,碎片传输的时候数据都已经填充进包了,但没有得到客户机的承认ACK。


 

文章评论1条评论)

登录后参与讨论

用户1270731 2010-12-10 20:06

已找到问题,数据没正确填充。

用户208467 2009-1-12 07:30

一定要技术结合市场,给别人做项目,累死也挣不了几个。
相关推荐阅读
用户1270731 2011-03-22 09:41
模拟外调制器偏置电压自动控制实现之软件部分
attachment download   模拟外调制器偏置电压自动控制实现之软件部分  三、偏置电压自动控制的实现 两路导频信号1.硬件组成部分单片机外调制器高精度DA转换正负电压调节电路CSO分量...
用户1270731 2010-12-10 19:53
STC90LE58AD ENC28J60 WEB
拜读了某前辈的文章,看来我找到移植UIP0.9问题的关键了。通常ENC28J60的驱动程序只考虑发送参数packet指针指向的数据区,在HTTP需要回应的数据的时候,没有将需要的数据(UIP处理后放在...
用户1270731 2010-12-10 19:29
ENC28J60提供的超小协议栈
ENC28J60提供的超小协议栈,它用一个全局的数组来做接收和发送缓冲。部分发送数据包从接收包中更改标志和校验和得到,最大化的减少内存拷贝。实现TCP/IP协议收发数据包的各个子功能,如校验和计算,标...
用户1270731 2010-06-13 15:03
VC++6.0做的 RS232 数据帧类
// ZBL232Frame1.h: interface for the CZBL232Frame class.////////////////////////////////////////////...
用户1270731 2010-06-03 16:34
铌酸锂晶体横向电光调制实验
实验六 铌酸锂晶体横向电光调制实验<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> ...
我要评论
1
13
关闭 站长推荐上一条 /2 下一条