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.

AM4379: AM437xidk McSPI0 with single channel

Part Number: AM4379

Example Code: C:\ti\pdk_am437x_1_0_16\packages\MyExampleProjects\MCSPI_Loopback_idkAM437x_armExampleProject

Same code is running okay if i run in internal loopback mode. 

means : 

/* Modify the default SPI configurations if necessary */
spi_cfg.chnCfg[spi_cfg.chNum].dataLineCommMode =MCSPI_DATA_LINE_COMM_MODE_4;

Message receiving: 

McSPI Internal Loopback test app started
The Mode of transfer is Interrupt Mode
McSPI Data Transmission is successful

But I modified the code as below:

spi_cfg.chnCfg[spi_cfg.chNum].dataLineCommMode =MCSPI_DATA_LINE_COMM_MODE_1; and shorted the pins SPI0_DIN and SPI0_DOUT on TI IDK evaluation module as below

Then SPI communication fails as below: 

McSPI Internal Loopback test app started
The Mode of transfer is Interrupt Mode
McSPI Data Transmission is Failed

can you please suggest , what's mistake am i doing?

  • Hi, 

    MCSPI_DATA_LINE_COMM_MODE_4 is specifically used for loopback mode. Each mode configures different settings, but mode 4 is used for loopback.

    An example showing these different modes can be found within SPI_initConfig() in pdk/packages/ti/drv/spi/example/mcspi_slavemode/src/main_mcspi_slave_mode.c

    #ifdef MCSPI_MULT_CHANNEL
        switch(testId)
        {
        case (SPI_TEST_ID_TX_ONLY):
            spi_cfg.chnCfg[chn].trMode = MCSPI_TX_ONLY_MODE;
    #if defined (SOC_AM65XX) || defined(SOC_J721E) || defined(SOC_J7200)
            /* Data line 1 TX enabled, data line 0 RX enabled TX disabled */
            spi_cfg.chnCfg[chn].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_1;
    #else
            /* Data line 0 TX enabled, data line 1 RX enabled TX disabled */
            spi_cfg.chnCfg[chn].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_6;
    #endif
            break;
    
        case (SPI_TEST_ID_RX_ONLY):
            spi_cfg.chnCfg[chn].trMode = MCSPI_RX_ONLY_MODE;
    #if defined (SOC_AM65XX) || defined(SOC_J721E) || defined(SOC_J7200)
        /* Data line 1 TX disabled, data line 0 RX enabled TX disabled */
            spi_cfg.chnCfg[chn].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_3;
    #else
            /* Data line 0 TX disabled, data line 1 RX enabled TX disabled */
            spi_cfg.chnCfg[chn].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_7;
    #endif
            break;
    
        case (SPI_TEST_ID_TRIG_LVL):
            spi_cfg.rxTrigLvl = test->param;
            spi_cfg.txTrigLvl = test->param;
    
            /* enalbe loopback mode */
            spi_cfg.chnCfg[chn].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_4;
            break;
    
        case (SPI_TEST_ID_TCS):
            spi_cfg.chnCfg[chn].tcs = test->param;
    
            /* enalbe loopback mode */
            spi_cfg.chnCfg[chn].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_4;
            break;
    
        case (SPI_TEST_ID_INIT_DELAY):
            spi_cfg.initDelay = test->param;
    
            /* enalbe loopback mode */
            spi_cfg.chnCfg[chn].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_4;
            break;
    
        default:
            break;
        }
    
    #ifdef SPI_DMA_ENABLE
        if (spi_cfg.txTrigLvl != 0)
        {
            test->trigLvl = spi_cfg.txTrigLvl;
        }
        else
        {
            test->trigLvl = 0;
        }
    
        if (spi_cfg.txTrigLvl < spi_cfg.rxTrigLvl)
        {
            test->trigLvl = spi_cfg.rxTrigLvl;
        }
    #endif
    #endif
    
        if ((testId == SPI_TEST_ID_WORD_LEN) || (testId == SPI_TEST_ID_CB_CANCEL) || (testId == SPI_TEST_ID_DMA_CB_CANCEL))
        {
    #if defined(SOC_DRA78x) || defined(SOC_TDA3XX) || defined(SOC_TDA2XX) || defined(SOC_TDA2EX) || defined (SOC_DRA72x) || defined (SOC_DRA75x) || defined (SOC_AM572x) || defined (SOC_AM571x) || defined (SOC_AM574x) || defined (SOC_AM437x) || defined (SOC_AM335x) || defined (SOC_AM65XX) || defined(SOC_J721E) || defined(SOC_J7200)
            /* enalbe loopback mode */
            spi_cfg.chnCfg[chn].dataLineCommMode = MCSPI_DATA_LINE_COMM_MODE_4;
    #else
            /* enalbe loopback mode */
            spi_cfg.loopback = 1;
    #endif
        }

    Additionally, more info on each of the modes can be found within pdk/packages/ti/starterware/include/mcspi.h

    /**
     *  \brief    Enumerates the available modes for SPIDAT0 and SPIDAT1 pins of
     *            MCSPI module.
     */
    typedef enum mcspiDataLineCommMode
    {
        MCSPI_DATA_LINE_COMM_MODE_0 = (MCSPI_CHCONF_IS_LINE0 |
                                       MCSPI_CHCONF_DPE1_ENABLED |
                                       MCSPI_CHCONF_DPE0_ENABLED),
        /**< Pin mode 0 */
        MCSPI_DATA_LINE_COMM_MODE_1 = (MCSPI_CHCONF_IS_LINE0 |
                                       MCSPI_CHCONF_DPE1_ENABLED |
                                       MCSPI_CHCONF_DPE0_MASK),
        /**< Pin mode 1 */
        MCSPI_DATA_LINE_COMM_MODE_2 = (MCSPI_CHCONF_IS_LINE0 |
                                       MCSPI_CHCONF_DPE1_MASK |
                                       MCSPI_CHCONF_DPE0_ENABLED),
        /**< Pin mode 2 */
        MCSPI_DATA_LINE_COMM_MODE_3 = (MCSPI_CHCONF_IS_LINE0 |
                                       MCSPI_CHCONF_DPE1_MASK |
                                       MCSPI_CHCONF_DPE0_MASK),
        /**< Pin mode 3 */
        MCSPI_DATA_LINE_COMM_MODE_4 = (MCSPI_CHCONF_IS_MASK |
                                       MCSPI_CHCONF_DPE1_ENABLED |
                                       MCSPI_CHCONF_DPE0_ENABLED),
        /**< Pin mode 4 */
        MCSPI_DATA_LINE_COMM_MODE_5 = (MCSPI_CHCONF_IS_MASK |
                                       MCSPI_CHCONF_DPE1_ENABLED |
                                       MCSPI_CHCONF_DPE0_MASK),
        /**< Pin mode 5 */
        MCSPI_DATA_LINE_COMM_MODE_6 = (MCSPI_CHCONF_IS_MASK |
                                       MCSPI_CHCONF_DPE1_MASK |
                                       MCSPI_CHCONF_DPE0_ENABLED),
        /**< Pin mode 6 */
        MCSPI_DATA_LINE_COMM_MODE_7 = (MCSPI_CHCONF_IS_MASK |
                                       MCSPI_CHCONF_DPE1_MASK |
                                       MCSPI_CHCONF_DPE0_MASK)
        /**< Pin mode 7 */
    } mcspiDataLineCommMode_t;

    There is also some info found within pdk/packages/ti/csl/docs/doxygen/html/mcspi_8h.html

    Best regards,

    Dillon

  • Shorting link was not connected properly. After make proper correction , its working fine.  Thanks for your kindly support. 

    Regards,

    Anil