拜读了某前辈的文章,看来我找到移植UIP0.9问题的关键了。
通常ENC28J60的驱动程序只考虑发送参数packet指针指向的数据区,在HTTP需要回应的数据的时候,没有将需要的数据(UIP处理后放在uip_appdata指针指向的数据区)发送出去,而是原样发送了接收时候的数据(网上有RTL8019AS驱动实现的UIP协议栈应用的有这个关键的处理)。
这是PC机发送的GET数据包
这是web实验板返回的数据包,可见数据部分和上一次接收到的数据包重复。
我想这也许是大多数想在ENC28J60上应用UIP的编程人员所遇到的问题,而在函数enc28j60WriteBuffer(len, packet);中当缓冲区字节数为40 + UIP_LLH_LEN时,将指针pda指向uip_appdata。
void enc28j60WriteBuffer(uint16_t len, uint8_t* pda)
{
uint16_t i=0;
CSACTIVE;
// issue write command
//SPDR = ENC28J60_WRITE_BUF_MEM;
//waitspi();
SPI_RW(ENC28J60_WRITE_BUF_MEM);
while(i<len)
{
// write data
if(i == 40 + UIP_LLH_LEN)
pda=uip_appdata;//从54字节开始填充需要返回的数据内容
SPI_RW(*pda);
pda++;i++;
}
/*
while(len)
{
len--;
// write data
SPI_RW(*pda);
pda++;
}
*/
CSPASSIVE;
}
结果能够正常访问UIP的前两个默认网页about和connections,而files和statistics的时候还是打不开。还请先驱指点啊!!!
这是网页截图。
这是ping包,速度比较慢。
这是晕来晕去整理的有关移植UIP0.9到51单片机的资料,里面有电路原理,源程序和说明文档。
这是做好的单片机以太网实验板:
用户439616 2013-6-28 08:57
用户439616 2013-6-28 08:48
用户274014 2011-9-1 21:22
用户1589960 2010-12-10 10:11