This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
最近在调试DSP6678千兆以太网通信,希望实现500Mbps的通信速率;
采用两种方法进行了测试,结果发现通信速率都不高:
1. 采用NDK UDP发送,软件架构是开辟一个UDP_send任务线程while(1)循环sendto发送1024个字节到PC:
while(1) { nLen = 0; I = sendto(sudp, (char *)dataNet, PACK_LEN, 0, (PSA)&sin1, m_nAddrLen); TaskSleep(1); //TaskSleep(1); //asm(" NOP 5"); // uCounter = 0; // while(uCounter<100000000) // { // uCounter++; // } }
为了调节发送速度,修改TaskSleep()的时间,最小设置为1,在PC端显示的接受速度为几十Mbps,然而改用自己设置的延时,发现根本就发送不出去,有些时候即使是使用TaskSleep(1),有些时候好像也会出现数据发送不出去的现象。
我想问一下,为何只能使用TaskSleep进行延时,而且延时时间短了,还会出现发送不出去的现象?
那么NDK发送数据到PC,最快的速度能到多少Mbps?
2. 使用PAexample中的配置如下:
Int32 SendPacket (Void) { Cppi_Desc* pCppiDesc; UInt32 dataBufferSize; char psFlags = (cpswSimTest)?pa_EMAC_PORT_0:pa_EMAC_PORT_1; /* pa_EMAC_PORT_1上挂的有RJ45 */ /* Get a free descriptor from the global free queue we setup * during initialization. */ if ((pCppiDesc = Qmss_queuePop (gTxFreeQHnd)) == NULL) /* 从发送free queues中pop出一个descriptors出来 */ { System_printf ("No Tx free descriptor. Cant run send/rcv test \n"); return -1; } /* The descriptor address returned from the hardware has the * descriptor size appended to the address in the last 4 bits. * * To get the true descriptor size, always mask off the last * 4 bits of the address. */ pCppiDesc = (Ptr) ((UInt32) pCppiDesc & 0xFFFFFFF0); dataBufferSize = sizeof (pktMatch); /* 给 descriptors 设置数据,也就是要发送的数据pktMatch,UDP数据源包 */ Cppi_setData ( Cppi_DescType_HOST, (Cppi_Desc *) pCppiDesc, (UInt8 *) Convert_CoreLocal2GlobalAddr((UInt32)pktMatch), dataBufferSize ); /* 设置packet length */ Cppi_setPacketLen (Cppi_DescType_HOST, (Cppi_Desc *)pCppiDesc, dataBufferSize); if (cpswLpbkMode != CPSW_LOOPBACK_NONE) { /* Force the packet to the specific EMAC port if loopback is enabled */ Cppi_setPSFlags(Cppi_DescType_HOST, (Cppi_Desc *)pCppiDesc, psFlags); } else { /* 这样去设置PS flags */ Cppi_setPSFlags(Cppi_DescType_HOST, (Cppi_Desc *)pCppiDesc, 0); } /* Send the packet out the mac. It will loop back to PA if the mac/switch * have been configured properly */ /* 将这个描述符descriptor压入到PA的Tx queue中,这里选择的是queue 648 SwTx0, 送入到队列尾部 */ Qmss_queuePush (gPaTxQHnd[8], pCppiDesc, dataBufferSize, SIZE_HOST_DESC, Qmss_Location_TAIL); /* Increment the application transmit counter */ gTxCounter ++; /* Give some time for the PA to process the packet */ CycleDelay (200000); // 1ms // 试试能不能回收 Qmss_queuePush (gTxFreeQHnd, pCppiDesc, dataBufferSize, SIZE_HOST_DESC, Qmss_Location_TAIL); return 0; }
这里面发送最后也要进行延时等待,等待PA处理完毕,我想知道PA处理得多快?我设置延时时间稍微短一下,就出现数据没有发送出去的现象,感觉GbE千兆以太网只有百兆以太网的效果,根本达不到我想要实现的高速接口的作用。
想问一下,TI有没有相关的测试文档说明GbE究竟能够实现多少通信速率?