Tool/software: Code Composer Studio
hi
I want to connect 3 devices to SPI_Bport and switch control with ChipSelect[0/1/2].
I tried SPI Read while switching ChipSelect CS0/CS1/CS2, but CS0 is always enabled. CS1 and CS2 doesnot work.
Steps
1. Enable SPIB pin settings
refer : [Pin_Map] and [Pin_MuxSetting]
2. Set SPI parameters.
refer : [Parameter_Setting]
3. Try to access CS0/CS1/CS2 with SPI_Read command
a. SPI_Read with CS=0
b. SPI_Read with CS=1
c. SPI_Read with CS=2
Repeat a>b>c.
refer : [TestCode]
4. As a result of checking the waveform, CS0 is always enabled. Even if it accessed CS1/CS2.
----------------------------------------------------
Pin_Map
----------------------------------------------------
SPIB-CLK : F14 SPIB-CS0 : H14 SPIB-CS1 : P13 SPIB-CS2 : J13 SPIB-MOSI : F13 SPIB-MISO : G14
----------------------------------------------------
Pinmux_Setting
----------------------------------------------------
//SPIBCLK Pinmux_Set_OverrideCtrl(SOC_XWR18XX_PINF14_PADAJ, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR18XX_PINF14_PADAJ, SOC_XWR18XX_PINF14_PADAJ_SPIB_CLK); //SPIB CS0 Pinmux_Set_OverrideCtrl(SOC_XWR18XX_PINH14_PADAK, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR18XX_PINH14_PADAK, SOC_XWR18XX_PINH14_PADAK_SPIB_CSN); //SPIB CS1 Pinmux_Set_OverrideCtrl(SOC_XWR18XX_PINP13_PADAA, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR18XX_PINP13_PADAA, SOC_XWR18XX_PINP13_PADAA_SPIB_CSN1); //SPIB CS2 Pinmux_Set_OverrideCtrl(SOC_XWR18XX_PINJ13_PADAC, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL); Pinmux_Set_FuncSel(SOC_XWR18XX_PINJ13_PADAC, SOC_XWR18XX_PINJ13_PADAC_SPIB_CSN2); // SPIB MISO Pinmux_Set_OverrideCtrl( SOC_XWR18XX_PING14_PADAI, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL ); Pinmux_Set_FuncSel( SOC_XWR18XX_PING14_PADAI, SOC_XWR18XX_PING14_PADAI_SPIB_MISO ); // SPIB MOSI Pinmux_Set_OverrideCtrl( SOC_XWR18XX_PINF13_PADAH, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL ); Pinmux_Set_FuncSel( SOC_XWR18XX_PINF13_PADAH, SOC_XWR18XX_PINF13_PADAH_SPIB_MOSI );
----------------------------------------------------
Parameter_Setting
----------------------------------------------------
void spi_init(void)
{
DMA_Params DmaParams;
SPI_Params params;
int32_t errCode = 0;
uint8_t inst = 1;
DMA_Params_init( &DmaParams );
gDmaHandle = DMA_open( 0, &DmaParams, &errCode );
if( gDmaHandle == NULL )
{
System_printf( "Open DMA driver failed with error=%d\n", errCode );
return;
}
SPI_init();
SPI_Params_init( ¶ms );
params.frameFormat = SPI_POL0_PHA0;
params.dmaEnable = 1;
params.dmaHandle = gDmaHandle;
params.eccEnable = 1;
params.mode = SPI_MASTER;
params.u.masterParams.bitRate = 1000000; (1MHz)
memset((void *)¶ms.u.masterParams.slaveProf[0], 0, sizeof(params.u.masterParams.slaveProf));
params.u.masterParams.numSlaves = 3;
params.u.masterParams.slaveProf[0].chipSelect = 0;
params.u.masterParams.slaveProf[0].ramBufLen = MIBSPI_RAM_MAX_ELEM/2;
params.u.masterParams.slaveProf[0].dmaCfg.txDmaChanNum =0U;
params.u.masterParams.slaveProf[0].dmaCfg.rxDmaChanNum =1U;
params.u.masterParams.slaveProf[1].chipSelect = 1;
params.u.masterParams.slaveProf[1].ramBufLen = MIBSPI_RAM_MAX_ELEM/4;
params.u.masterParams.slaveProf[1].dmaCfg.txDmaChanNum =2U;
params.u.masterParams.slaveProf[1].dmaCfg.rxDmaChanNum =3U;
params.u.masterParams.slaveProf[2].chipSelect = 2;
params.u.masterParams.slaveProf[2].ramBufLen = MIBSPI_RAM_MAX_ELEM/4;
params.u.masterParams.slaveProf[2].dmaCfg.txDmaChanNum =4U;
params.u.masterParams.slaveProf[2].dmaCfg.rxDmaChanNum =5U;
Spihandle = SPI_open( inst, ¶ms );
if( Spihandle == NULL )
{
System_printf("Error: Unable to open the SPI Instance\n");
}
}
----------------------------------------------------
TestCode :
----------------------------------------------------
int main()
{
...
SPI_Transaction transaction;
transaction.count = 2;
transaction.txBuf = outBuffer;
transaction.rxBuf = inBuffer;
transaction.slaveIndex = 0 or 1 or 2;
SPI_transfer( Spihandle, &transaction )
}