微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > 通过结合TCP和SPI例程结合,发现TCP收到的数据不正确

通过结合TCP和SPI例程结合,发现TCP收到的数据不正确

时间:10-02 整理:3721RD 点击:

我用两台SPI进行通信,其中从机收到主机发来的数据后会将数据发给TCP服务器,TCP服务器发送给从机的数据也会经过SPI发送给主机。

但是我发现从机发给TCP的数据不对,无论发送什么字符,TCP显示的都是“TiCoIsAio”这样的字符。请问这会是什么原因?

还有一个问题是服务器发送给从机的数据收不到,这又是什么原因?

希望能够解决我这个问题,万分感谢。

下面是我的从机TCP传输数据代码:

int SpiTransfer(unsigned long ulBase, int iSockID)
{
// unsigned long ulUserData;
unsigned long ulDummy;
char cTxBuf[100],i;
char cRxBuf[100];
// char cGetChar;
int iStatus;
int iCounter=0;
while(1)
{//SPI接收的数据
MAP_SPIDataGet(ulBase,&ulDummy);
MAP_UARTCharPut(UARTA0_BASE,ulDummy);//显示字符
cTxBuf[iCounter++]=ulDummy;
iStatus=sl_Send(iSockID,cTxBuf,iCounter,0);//将字符发送给TCP服务器
if(iStatus<=0)
{//错误处理
ASSERT_ON_ERROR(sl_Close(iSockID));
UART_PRINT("发送数据失败\n\r");
break;
}

//recv tcp
iStatus = sl_Recv(iSockID,cRxBuf,100,0);
if(iStatus > 0)
{
//iStatusRecv = sl_Send(iSockID, cRxBuf, iStatus, 0);
MAP_SPIDataPut(ulBase,iStatus);
MAP_UARTCharPut(UARTA0_BASE,iStatus);
for(i = 0; i < iStatus; i++ )
{
UART_PRINT("%2c \n\r", cRxBuf[i]);
//UART_PRINT("202 \n\r");
}
}
}
return(iStatus);
}

应该不会,你有没有用例程里面的spi_demo测试一下,主机发送到丛机的数据打印出来是对的吗?

有试过了,主机从机的数据是没问题的。并且在我这个程序中,从机串口还是能显示正确的数据,就是TCP的数据错误的

有没有单独测试TCP通信的数据是否正确,TCP的数据错误是发送之前出现错误还是接收解码部分出现错误,

之前用串口跟TCP通信的时候是没问题的。数据的传输都是正确没问题的。

这次用SPI,我能够在从机的串口看到主机发送给从机的内容是正确的。

所以我认为TCP的数据错误应该是发生在接收解码部分。或者是否是我发送数据的函数格式不正确?

这是我的源代码~试了许久还是发现TCP的数据不对。

cTxBuf[iCounter++]=ulDummy;
iStatus=sl_Send(iSockID,cTxBuf,iCounter,0);//将字符发送给TCP服务器

每新接收一个字符,就把所有已经接收的字符都发往sever,应该这个逻辑有问题,应该只发当前接收的字符过去吧

是的,这个问题已经解决了~谢谢回答。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top