主题中讨论的其他器件:CC3120
尊敬的支持:
我将 CC3120 Booster Pack (BP)与 MSP432E4 LaunchPad (LP)搭配使用、并尝试以2Mbps 以上的速率移动视频。 根据 CC3120的数据表、这应该不是问题、因为它表明它可以支持16Mbps 的 UDP 吞吐量。 但是、我注意到、当我进行背靠背 UDP 传输时、CC3120将接受多达37个数据包(数据包大小似乎无关紧要、因为我尝试了512字节/数据包和1356字节/数据包) 然后、它会在一段时间内停止传输、然后重新启动传输、然后停止并继续执行此操作、直到完成传输。
为了测试这一点、我背对背地发送了100个 UDP 数据包 、并将数据包之间的间隔间隔间隔间隔设置为0ms、20ms 和70ms。 在0msec 时、在突发37个数据包之间有2.5秒的间隔、然后是另一个2.5秒的间隔、剩余的数据包被传输的总时间为4.9秒。 对于 UDP 数据包之间的间隔为20毫秒、此间隔约为 UDP 传输块的死区时间2秒、以及完成100个数据包传输的总时间5.4秒。 对于 UDP 数据包之间的间隔为70毫秒、数据包之间没有死区时间、也没有阻止 UDP 数据包、但完整传输时间为7.1秒。
我随附一个.pdf 的逻辑分析仪、可针对不同的情况和结果捕获这些不同的传输。 跟踪中的顶部信号是完成传输的时间、底部信号是单个数据包传输、其中传输过程中信号为高电平、传输完成后信号为低电平、然后开始下一个 UDP 传输。
以下是用于此测试的代码:
GPIO_write (Board_GPIO_GP1、Board_GPIO_LED_ON);
for (索引= 0;索引< 100;索引++)
{
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 );
下面是 SendUDPData(...) 函数调用:
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);
返回 NumberOfBytes;
}
其中进行了简单的 UDP sendto 调用以执行 UDP 传输。 问题是、在37个 UDP 数据包传输后、UDP sendto 会在将控制权移交给处理器之前长时间(几秒)阻止。 您能告诉我这里发生了什么情况、为什么 UDP 传输在37个 UDP 数据包之后被阻止、并且无法维持超过200Kbps 的大部分数据速率?
谢谢、
Tim