I connected 2 IWR6843 EVM via SPI. My Master can receive data from Slave after SPI_transfer. But after I turned off power to the Slave, Master still not get 0 value. Besides, in Slave code, I set data sent out to 5, but Master always get 65535. Why? How to make Master get correct data from Slave?
Here's my Slave code to send data to Master
pTestMsgOut = (spiDataMsg*)&txBuf[0]; memset(pTestMsgOut, 0, 128); pTestMsgOut->msgId = 5; pTestMsgOut->dataLen = sizeof(MmwDemo_output_message_header); pTestMsgOut->seqNo = 5; for (i=0; i < sizeof(MmwDemo_output_message_header)/2;i++) { uint16_t *buf = (uint16_t *)&header; pTestMsgOut->data[i] = buf[i]; } spi_Write (spiHandle, (uint8_t*)pTestMsgOut, SPI_DATA_BLOCK_SIZE);
Here's my Master code to receive data
while(1) { spi_Read(handle, SPI_TEST_MSGLEN, (void *)rxBuf); spiMsg = (spiDataMsg *)&rxBuf[0]; /* Start Data Transfer */ if (spi_Read(handle, SPI_TEST_MSGLEN, (void *)rxBuf) == 0) { System_printf("SPI transfer OK\n"); System_printf("Header %d, Seq %d\n", spiMsg->msgId, spiMsg->seqNo); } else { System_printf("Unsuccessful SPI transfer"); } }
SPI transfer OK
Header 65535, Seq 65535
SPI transfer OK
Header 65535, Seq 65535
SPI transfer OK
Header 65535, Seq 65535
SPI transfer OK
Header 65535, Seq 65535
SPI transfer OK
Header 65535, Seq 65535
SPI transfer OK
Header 65535, Seq 65535
SPI transfer OK
.....
As u can see, spiMsg->msgId and spiMsg->seqNo received on Master are always 65525. I don't see its value as 5 even though I set spiMsg->msgId = 5 in Slave code. It seems that Master read size of
int
type instead of data.