#include "fsl_spi.h"
#include "fsl_gpio.h"
#include "fsl_port.h"
#include "pin_mux.h"
#include "clock_config.h"
#include "board.h"
#include "fsl_debug_console.h"
#include <string.h>
#define EXAMPLE_SPI_MASTER SPI1
#define EXAMPLE_SPI_MASTER_CLK_FREQ CLOCK_GetFreq(kCLOCK_BusClk)
#define SPI_CS_PORT PORTD
#define SPI_CS_GPIO GPIOD
#define SPI_CS_PIN 4U
void spi_cs_init(void)
{
CLOCK_EnableClock(kCLOCK_PortD);
PORT_SetPinMux(SPI_CS_PORT, SPI_CS_PIN, kPORT_MuxAsGpio);
gpio_pin_config_t cs_config = {kGPIO_DigitalOutput, 1};
GPIO_PinInit(SPI_CS_GPIO, SPI_CS_PIN, &cs_config);
GPIO_PinWrite(SPI_CS_GPIO, SPI_CS_PIN, 1); // CS High (idle)
}
void spi_cs_low(void) { GPIO_PinWrite(SPI_CS_GPIO, SPI_CS_PIN, 0); }
void spi_cs_high(void) { GPIO_PinWrite(SPI_CS_GPIO, SPI_CS_PIN, 1); }
int main(void)
{
BOARD_InitBootPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
spi_cs_init();
PRINTF("SPI Master Full-Duplex Transfer\n");
spi_master_config_t masterConfig;
SPI_MasterGetDefaultConfig(&masterConfig);
SPI_MasterInit(EXAMPLE_SPI_MASTER, &masterConfig, EXAMPLE_SPI_MASTER_CLK_FREQ);
uint8_t txData[2] = {0x0A, 0x0B};
uint8_t rxData[2] = {0};
spi_transfer_t xfer = {
.txData = txData,
.rxData = rxData,
.dataSize = 2
};
spi_cs_low();
SPI_MasterTransferBlocking(EXAMPLE_SPI_MASTER, &xfer);
spi_cs_high();
PRINTF("Sent to slave: ");
for (int i = 0; i < 2; i++) PRINTF("%02X ", txData[i]);
PRINTF("\n");
PRINTF("Received from slave: ");
for (int i = 0; i < 2; i++) PRINTF("%02X ", rxData[i]);
PRINTF("\n");
while (1);
}
slave code :
#include "fsl_spi.h"
#include "pin_mux.h"
#include "clock_config.h"
#include "board.h"
#include "fsl_debug_console.h"
#include <string.h>
#define EXAMPLE_SPI_SLAVE SPI1
#define TRANSFER_SIZE 2
int main(void)
{
BOARD_InitBootPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
PRINTF("SPI Slave Ready\n");
spi_slave_config_t slaveConfig;
SPI_SlaveGetDefaultConfig(&slaveConfig);
SPI_SlaveInit(EXAMPLE_SPI_SLAVE, &slaveConfig);
uint8_t txData[TRANSFER_SIZE] = {0xAA, 0xBB};
uint8_t rxData[TRANSFER_SIZE] = {0};
// preload response into TX FIFO
for (int i = 0; i < TRANSFER_SIZE; i++) {
while (!(SPI_GetStatusFlags(EXAMPLE_SPI_SLAVE) & kSPI_TxBufferEmptyFlag)) {}
SPI_WriteData(EXAMPLE_SPI_SLAVE, txData[i]);
}
// wait and read incoming data
for (int i = 0; i < TRANSFER_SIZE; i++) {
while (!(SPI_GetStatusFlags(EXAMPLE_SPI_SLAVE) & kSPI_RxBufferFullFlag)) {}
rxData[i] = SPI_ReadData(EXAMPLE_SPI_SLAVE);
}
PRINTF("Received from master: ");
for (int i = 0; i < TRANSFER_SIZE; i++) PRINTF("%02X ", rxData[i]);
PRINTF("\n");
while (1);
}

here i am trying to send two byte from master to slave and want slave respond two byte back but
master send proper two byte but slave didnt recieve anything and from slave side master able to
get one byte only.