This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/AWR1843BOOST: SPIB ChipSelect[0/1/2] switching dosenot work

Part Number: AWR1843BOOST

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.

Are there any problems with the procedure for test steps?
or Is there any other root cause?

----------------------------------------------------
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( &params );
    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 *)&params.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, &params );
    
    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 )
}