Other Parts Discussed in Thread: CC3120
Dear Support:
I am using the CC3120 booster pack (BP) with an MSP432E4 launch pad (LP) and trying to move video at upwards of 2 Mbps. Per the datasheet of the CC3120, this should be no problem since it indicates that it can support a UDP throughput of 16 Mbps. However I am noticing that when I do back-to-back UDP transfers, the CC3120 will accept up to 37 packets (packet size doesn't seem to matter since I tried 512 bytes/packet and 1356 bytes/packet) and then it stops transfers for some period of time and then restarts transfers and then stops and continues on like this until the complete transfer is completed.
To test this, I sent out 100 UDP packets back-to-back and spaced the interval between packets at 0 msec, 20 msec and 70 msec. At 0 msec, there was a 2.5 second interval between the bursting of 37 more packets and then another 2.5 second interval and then the remaining packets were transmitted for a total time of 4.9 seconds. For a 20 msec interval spacing between UDP packets, this interval was around 2 seconds of dead time where the UDP transfer blocks and a total time of 5.4 seconds to complete the 100 packet transfer. And for 70 msec interval spacing between UDP packets, there was no dead time between packets and no blocking of the UDP packet, but the complete transfer time was 7.1 seconds.
I am attaching a .pdf of a logic analyzer capture these different transfers for the different cases and the results. The top signal in the trace is the time for the complete transfer and the bottom signal is the individual packet transfers where the signal is high during the transfer and low when the transfer is complete and starting the next UDP transfer.
Below is the code that was used for this test:
GPIO_write( Board_GPIO_GP1, Board_GPIO_LED_ON );
for( Index = 0; Index < 100; Index++ )
{
GPIO_write( Board_GPIO_GP2, Board_GPIO_LED_ON );
if( UDPClientInfoPtr != NULL )
BytesSent = SendUDPData( UDPClientInfoPtr, ( char * )PacketPtr, BytesToSend );
GPIO_write( Board_GPIO_GP2, Board_GPIO_LED_OFF );
// Task_sleep( 20 );
}
GPIO_write( Board_GPIO_GP1, Board_GPIO_LED_OFF );
and below is the SendUDPData(...) function call:
int SendUDPData( struct NET_INFO *UDPInfoPtr, uchar *DataPtr, uint Size )
{
int NumberOfBytes;
NumberOfBytes = sendto( UDPInfoPtr->RemoteSocket, DataPtr, Size, 0, ( struct sockaddr *)&UDPInfoPtr->RemoteIPAddress, UDPInfoPtr->AddressSize );
return NumberOfBytes;
}
where a simple UDP sendto call was made to perform the UDP transfer. The issue is that after 37 UDP packet transfers, the UDP sendto blocks for a long time (several seconds) before relinquishing control back to the processor. Can you let me know what is going on here and why is the UDP transfers blocking after 37 UDP packets and unable to sustain much of a data rate beyond 200ish Kbps?
Thanks,
Tim