通过结合TCP和SPI例程结合,发现TCP收到的数据不正确
我用两台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,应该这个逻辑有问题,应该只发当前接收的字符过去吧
是的,这个问题已经解决了~谢谢回答。