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.

CC3200 SPI DMA做主机传输大量数据给TCP时,返回值错误是什么原因造成

Other Parts Discussed in Thread: CC3200

想请问一下TI的工程师,我知道如果数据发送给TCP后,返回值如果是正值代表发送字节数,负值代表的是错误。

现在我就出现了这种情况,当我发送大量数据给TCP的时候,会出现返回值是错误的现象,但是我不明白是什么原因造成的?

请指点一下应该如何修改?

以下这段程序是基于例程修改的,放于BsdTcpClient()中。实现数据传输。

int WSPITransfer(unsigned long ulBase, int iSockID)
{
int iStatus;
while(1)
{
iStatus=sl_Recv(iSockID,rebuff,100,0);
GPIO_IF_LedOff(MCU_ALL_LED_IND);
if(iStatus >0)
{
GPIO_IF_LedOn(MCU_ALL_LED_IND);
while(1)
{
MAP_UtilsDelay(40000);
UDMASetupTransfer(UDMA_CH31_GSPI_TX,UDMA_MODE_BASIC,1024,
UDMA_SIZE_8,UDMA_ARB_1,
(void *)g_ucTxBuff,UDMA_SRC_INC_8,(void *)(GSPI_BASE + MCSPI_O_TX0),
UDMA_DST_INC_NONE);

UDMASetupTransfer(UDMA_CH30_GSPI_RX,UDMA_MODE_BASIC,1024,
UDMA_SIZE_8,UDMA_ARB_1,
(void *)(GSPI_BASE + MCSPI_O_RX0),UDMA_SRC_INC_NONE,
(void *)g_ucRxBuff,UDMA_DST_INC_8);
iStatus=sl_Send(iSockID,g_ucRxBuff,1024,0);
if(iStatus < 0)
{
// ASSERT_ON_ERROR(sl_Close(iSockID));
break;
}
MAP_SPIEnable(GSPI_BASE);
g_cDummy = 0;
MAP_SPIIntEnable(GSPI_BASE, SPI_INT_EOW);
MAP_IntEnable(INT_GSPI);
}
}
}
}

  • 1. 确认数据发送的量有多大,CC3200的TCP的吞吐量大约在10Mbs/S左右,如果采集的数据大约这个数据理论上是无法进行有效发送的

    2. 确认发送数据使用的模式,是查询模式还是阻塞模式,在查询模式下需要MCU自己查询数据是否发送完成,完成之后才进行下次数据发送,如果是阻塞模式,则MCU会等待数据发送完成后进行下一包数据的发送

  • 1.当我的SPI速度设置为10Mbs/S时,发送给TCP上位机的速度大概有6Mbs/S左右。

    2.我看数据手册上写的,阻塞模式和非阻塞模式,不是按照有无操作系统来进行区分的吗?

    3.如果我想设置为查询模式,需要如何判断是否发送完成呢?

  • 有人可以帮助我解答这些问题吗?求救