Other Parts Discussed in Thread: DCA1000EVM
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 ) }