你们好!现在我在用K2_STK_DSP里的GE例程调试K2E开发板和PC之间的通信,现在我用网线连着开发板上的网口0和PC,其他7个口我均设为GE_PORT_NOT_USED,0口模式为ETHERNET_AUTO_NEGOTIAT_SLAVE, GE_PORT_CABLE_CONNECT, ETHERNET_LOOPBACK_DISABLE,运行程序之后在PC上用wireshark抓包,除了8192巨型帧被丢弃(CCS上console显示发送成功,但wireshark里面没有抓到),其余的帧都能成功被抓取,但是帧的内容除了数据链路层的帧头被设置之外,其余都是随机乱码的。现在我想修改这里面的内容,我看了一眼程序,我想应该是在文件GE_packets_process.c里ConstructPacket这一函数里面的InitPayload函数修改的,函数如下:
void InitPayload(Uint8 * ucpBuffer, Uint32 uiNumBytes, Uint8 uiPortNum)
{
int i;
GE_Test_Packet_Header *test_header;
unsigned long long * ullpData;
if(ucpBuffer)
{
test_header= (GE_Test_Packet_Header *)ucpBuffer;
test_header->payloadNumBytes= uiNumBytes;
test_header->portNum= uiPortNum;
WritebackCache((void *)ucpBuffer, sizeof(GE_Test_Packet_Header));
#if NUM_BYTES_VERIFY
//fill the rest of the data with fixed value
ullpData = (unsigned long long *)(((Uint32)ucpBuffer +sizeof(GE_Test_Packet_Header)+7)&0xFFFFFFF8); //round up
uiNumBytes = (uiNumBytes-sizeof(GE_Test_Packet_Header)-16)&0xFFFFFFF8; //round down
if(uiNumBytes>NUM_BYTES_VERIFY)
uiNumBytes= NUM_BYTES_VERIFY;
for(i=0; i<uiNumBytes/8; i++)
{
ullpData[i]= ullTestID;
}
WritebackCache((void *)ullpData, uiNumBytes);
#endif
ullTestID++;
}
}
我看函数的意思应该是如果定义NUM_BYTES_VERIFY为1,则把数据帧里的内容全部修改为固定值,但我把NUM_BYTES_VERIFY置1后wireshark抓到的包的内容还是随机的,这时为什么呢?
Thomas Yang1:
建议在push 包描述符进入netcp时,先把data payload的内容检查下,另外你抓到的包长度是对的吗?