Hi Diego,
Here is from my pin_mux for SPI0:
If I am using the following sample code, I can't receive the data properly. But if I change the PCS0 and PCS1 as GPIO, Set to LOW before transfer and Set to HIGH after transfer, everythinh is working fine.
1) I tried on several devices, SPI flash, SPI SRAM, and FXOS8700, they are the same result...
2) I checked PCS0 and PCS1, LOW and HIGH changes look fine as well even if I use PCS0 or PCS1...
Regards,
Christie
......
//-----*****Configure SPI0 for SPI devices*****-----
PORT_SetPinMux(PORTC, PIN3_IDX, kPORT_MuxAlt2); /* V5.1(IS62_CS) & V5.0(RX1)---PORTC3 (pin 106) is configured as SPI0_PCS1 */
//PORT_SetPinMux(PORTC, PIN3_IDX, kPORT_MuxAsGpio); /* V5.1(IS62_CS) & V5.0(RX1)---PORTC3 (pin 106) is configured as SPI0_PCS1 */
PORT_SetPinMux(PORTC, PIN4_IDX, kPORT_MuxAlt2); /* V5.1(IS25_CS) & V5.0(TX1)---PORTC4 (pin 109) is configured as SPI0_PCS0 */
//PORT_SetPinMux(PORTC, PIN4_IDX, kPORT_MuxAsGpio); /* V5.1(IS25_CS) & V5.0(TX1)---PORTC4 (pin 109) is configured as SPI0_PCS0 */
PORT_SetPinMux(PORTC, PIN5_IDX, kPORT_MuxAlt2); /* V5.1(DCLK) & V5.0(INX2)---PORTC5 (pin 110) is configured as SPI0_SCK */
PORT_SetPinMux(PORTC, PIN6_IDX, kPORT_MuxAlt2); /* V5.1(DATA_OUT) & V5.0(INX3)---PORTC6 (pin 111) is configured as SPI0_SOUT */
PORT_SetPinMux(PORTC, PIN7_IDX, kPORT_MuxAlt2); /* V5.1(DATA_IN) & V5.0(INX4)---PORTC7 (pin 112) is configured as SPI0_SIN */
.....
Here is the code from sample code:
// Master config
masterConfig.whichCtar = kDSPI_Ctar0;
masterConfig.ctarConfig.baudRate = FLASH_RAM_TRANSFER_BAUDRATE;
masterConfig.ctarConfig.bitsPerFrame = 8U;
masterConfig.ctarConfig.cpol = kDSPI_ClockPolarityActiveHigh;
masterConfig.ctarConfig.cpha = kDSPI_ClockPhaseFirstEdge;
masterConfig.ctarConfig.direction = kDSPI_MsbFirst;
masterConfig.ctarConfig.pcsToSckDelayInNanoSec = 1000000000U / FLASH_RAM_TRANSFER_BAUDRATE;
masterConfig.ctarConfig.lastSckToPcsDelayInNanoSec = 1000000000U / FLASH_RAM_TRANSFER_BAUDRATE;
masterConfig.ctarConfig.betweenTransferDelayInNanoSec = 1000000000U / FLASH_RAM_TRANSFER_BAUDRATE;
// masterConfig.whichPcs = kDSPI_Pcs0; // FOX8700//EXAMPLE_DSPI_MASTER_PCS_FOR_INIT;
// masterConfig.whichPcs = kDSPI_Pcs1; // IS62/65 SRAM---PCS1//EXAMPLE_DSPI_MASTER_PCS_FOR_INIT;
masterConfig.whichPcs = kDSPI_Pcs0; // IS25W Flash---PCS0//EXAMPLE_DSPI_MASTER_PCS_FOR_INIT;
masterConfig.whichPcs = FLASH_DSPI0_MASTER_PCS_FOR_INIT;
masterConfig.whichPcs |= 0x3F; // I have to add this to keep other PCS1 HIGH???
masterConfig.pcsActiveHighOrLow = kDSPI_PcsActiveLow; // ==1
masterConfig.enableContinuousSCK = false;
masterConfig.enableRxFifoOverWrite = false;
masterConfig.enableModifiedTimingFormat = false;
masterConfig.samplePoint = kDSPI_SckToSin0Clock;
srcClock_Hz = unint32_temp0 = FLASH_RAM_DSPI0_MASTER_CLK_FREQ;;
//PRINTF("\r\n\r\nDSPI board to board polling example=%d_%d_%d_%d\r\n", FLASH_RAM_DSPI0_MASTER_CLK_FREQ, unint32_temp0, FLASH_RAM_TRANSFER_BAUDRATE, (1000000000U / FLASH_RAM_TRANSFER_BAUDRATE));
DSPI_MasterInit(EXAMPLE_DSPI_MASTER_BASEADDR, &masterConfig, srcClock_Hz);
masterTxData[0] = 0x05; // Read Mode Register
masterTxData[1] = DSPI_DUMMY_DATA; //0x00; // Read Mode Register
masterTxData[2] = DSPI_DUMMY_DATA; //0x00; // Read Mode Register
masterTxData[3] = DSPI_DUMMY_DATA; //0x00; // Read Mode Register
masterRxData[0] = 0xa5;
masterRxData[1] = 0xa5;
masterRxData[2] = 0xa5;
masterRxData[3] = 0xa5;
// // Print out transmit buffer
PRINTF("\r\nFLASH_TX0:%02X_%02X_%02X_%02X_%02X", masterTxData[0], masterTxData[1], masterTxData[2], masterTxData[3], masterRxData[0]);
// // Start master transfer, send data to slave
masterXfer.txData = masterTxData;
masterXfer.rxData = NULL;
masterXfer.dataSize = 1; // TRANSFER_SIZE;
masterXfer.configFlags = kDSPI_MasterCtar0 | EXAMPLE_DSPI_MASTER_PCS_FOR_TRANSFER | kDSPI_MasterPcsContinuous;
// Start SPI operation
DSPI_MasterTransferBlocking(EXAMPLE_DSPI_MASTER_BASEADDR, &masterXfer);
// Delay to wait slave is ready
for (i = 0U; i < EXAMPLE_DSPI_DEALY_COUNT; i++)
{
__NOP();
}
// Start master transfer, receive data from slave
masterXfer.txData = NULL;
masterXfer.rxData = masterRxData;
masterXfer.dataSize = 1; // TRANSFER_SIZE;
masterXfer.configFlags = kDSPI_MasterCtar0 | EXAMPLE_DSPI_MASTER_PCS_FOR_TRANSFER | kDSPI_MasterPcsContinuous;
DSPI_MasterTransferBlocking(EXAMPLE_DSPI_MASTER_BASEADDR, &masterXfer);
....