先说配置环境:
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协议包。这又是什么原因呢?请大家帮忙看看,谢谢!
Jian Zhou:
开发板用的是TI AM335x GPEVM?
Wei Gao11:
回复 Jian Zhou:
不是,使用的米尔科技的开发板,但已经做了bootloader移植,DDR3内存配置应该没有问题(303Mhz,256MB),因为程序都已经跑起来了。
Bootloader中去掉了PMIC的配置(TPS65217),因为我发现不去配置PMIC也能正常跑起来。
RGMII接口与evmAM335x开发板没有区别,唯一不同的可能是PHY芯片,TI官方使用的AR8031,米尔科技使用的AR8035,但我估计差别也不大,因为Auto-Negotiation Successful,无论与100M还是千兆计算机相连,Auto-Negotiation 总能成功,且识别了正确的速率与全/半双工状态。
Jian Zhou:
回复 Wei Gao11:
感觉应该是PHY驱动的问题,8035和8031印象里还是有些区别的。
Wei Gao11:
回复 Jian Zhou:
应该不是PHY芯片的问题。AR8031与AR8035属于同一个系列,只不过8031支持GMII接口,并且支持PTP(IEEE1588);8035更简单一些。我将8035的寄存器全部读出来一个一个核对了,并没有发现异常的地方。
一个奇怪的地方是:为什么AM335x发出的ARP包最后会有4个字节的校验值?我以前使用其他处理器(比如NIOS或STM32)均没有发现这个现象。这是AM335x的一个特殊功能吗?如何关闭?
fa linag:
回复 Wei Gao11:
你好!请教你一个问题,我现在也在移植Starterware 的BootLoader,但是移植不成功。
现在我怀疑出现的问题就是在配置SetVdd1OpVoltage(oppTable[oppMaxIdx].pmicVolt) 这个里面或者是在DDR的配置这两个地方。
我想问下你移植的时候修改了哪些方面的参数,或者我需要注意那几个方面参数的设置?
fa linag:
你好!请问你的问题解决了么? 我貌似也出现了这样的问题,ping不同我的开发板。