1、背景描述:用瑞萨的E2 studio 编译器编写RA6M4通SPI协议操控enc28j60,能够实现ping功能(SPI用的是模拟SPI),我的电脑的IP地址为:192.168.2.57。开发板的IP地址为192.168.2.123 (使用Wireshark分析ping 192.168.2.123为一片空白)。
2、错误描述:代码能够运行,ping 192.168.2.123 -t(无法访问目标主机),一直卡在
if(eth_type_is_ip_and_my_ip(buf,plen)==0)//过不去,
{
continue;
}
这个函数作用是:检查ip数据包是否是给我们的:判断是否接收到目的地址为本机IP的合法的IP包
在这个函数内部:
unsigned char eth_type_is_ip_and_my_ip(unsigned char *buf,unsigned int len)
{
unsigned char i=0;
//eth+ip+udp header is 42
if (len<42)
{
return(0);
}
if(buf[ETH_TYPE_H_P]!=ETHTYPE_IP_H_V || buf[ETH_TYPE_L_P]!=ETHTYPE_IP_L_V)//在这里返回0
{
return(0);
}
if (buf[IP_HEADER_LEN_VER_P]!=0x45)
{
// must be IP V4 and 20 byte header
return(0);
}
while(i<4)
{
if(buf[IP_DST_P+i]!=ipaddr[i])
{
return(0);
}
i++}
return(1);}
在这里返回0:if(buf[ETH_TYPE_H_P]!=ETHTYPE_IP_H_V || buf[ETH_TYPE_L_P]!=ETHTYPE_IP_L_V)
3.1我的思考1:SPI读取有问题
但使用SPI读取ENC28J60的控制寄存器(ERDPTL,该寄存器在BANK0内,地址为0x00,复位返回值为:0xFA),再使用逻辑分析仪分析可以读出0xFA。
3.2我的思考2:接收到的数据包不对
这个我用逻辑分析仪分析时SPI时,SPI有写有读(但有多段接收全为0,接收到一些数据后又为0)。