先说配置环境:
win7 64bit+AM335X_StarterWare_02_00_01_01+CCS6.2.0.00050+XDS100V3仿真器。
再说操作步骤:
1、使用CCS6导入AM335X_StarterWare_02_00_01_01\build\armv7a\cgt_ccs\am335x\evmAM335x\enet_echo下的工程;全部采用默认配置,比如linker用的enetEcho.cmd,编译器版本:TI v5.0.4 [TI V15.12.3.LTS]。如图所示:(这些都是默认配置,感觉应该没有问题)
2、修改必要的参数:
lwipIfPort1.instNum = 0;
lwipIfPort1.slvPortNum = 1;
lwipIfPort1.ipAddr = STATIC_IP_ADDRESS_PORT1;//(0xC0A80063)
lwipIfPort1.netMask = 0xFFFFFF00;
lwipIfPort1.gwAddr = 0xC0A80001;
lwipIfPort1.ipMode = IPADDR_USE_STATIC;
同时将MAC地址设置成:01-e4-2a-85-03-7d
编译通过,将生成的_t.bin文件改名为app通过SD卡启动,运行如下:
StarterWare Ethernet Echo Application.
Acquiring IP Address for Port 1...
PHY found at address 4 for Port 1 of Instance 0.
Performing Auto-Negotiation...
Auto-Negotiation Successful.
Transfer Mode : 1000 Mbps.
PHY link verified for Port 1 of Instance 0.
Port 1 IP Address Assigned: 192.168.0.99
问题现象:
1、PC与开发板均接至千兆交换机,PC端配置IP为192.168.0.11,无法ping通开发板,通过wireshark抓包发现PC端发送的arp请求无任何回复导致无法ping通开发板;
2、用网线直接将PC机与开发板连接,不再通过交换机,继续在PC端ping开发板,通过wireshark抓包如下图:
可以看到,开发板其实回复了PC的ARP请求,只不过是ETHERNET FRAME CHECK SEQUENCE INCORRECT!仔细检查这个ARP回复包,发现是回复包最后面多出来4个字节的校验值,而这个校验值不正确。估计之前通过交换机后使用wireshark无法抓到这个包是因为交换机的纠错机制将其视为无效数据包直接丢弃了。这个回复包的内容具体如下图:
可以看到,这个报文是符合ARP报文格式要求且内容正确,只是最后面居然多出来4个字节的校验值(7d 6c ce 26),而wireshark提示这个校验值应该是3d 95 80 37!这是什么原因引起的?并且,开发板回复了ARP请求后,为什么没有继续回复ICMP包?追踪发现感觉是程序将其识别成了一个IP包交给ip_input()去处理了,而没有把它识别成ICMP协议包。这又是什么原因呢?请大家帮忙看看,谢谢!
