Skip to main content
Visitor II
September 16, 2025
Solved

SPI Tx stucks on 1MHz clock

  • September 16, 2025
  • 1 reply
  • 1476 views

Hello All,

I'm usin SR6P3 ARM mcu. I have to implement a simple SPI communication with StellarSDK.

When send/receive starts the communication stucks in a while cycle where the code checks Tx queue busyness.

while (queue->tx_busy == SPIQ_QUEUE_TX_BUSY) {
                ;
}
 
Never comes out from this while. The clock is 1MHz.
But if I set the clock lower like 50kHz, then the communication is good.
This is the pin configuration:
/*===========================================================================*/
/*                              SPIQ 0                                       */
/*===========================================================================*/

/* SPIQ0  CLK - PJ12 */
#define SPIQ0_CLK siul2_iopack(SIUL2_PORT_J, SIUL2_PAD_12)
#define SPIQ0_CLK_CFG (SIUL2_MSCR_IO_SSS(0x0B)          | \
                       SIUL2_MSCR_IO_OERC_STRONG        | \
                       SIUL2_MSCR_IO_ODC_PUSH_PULL      | \
                       SIUL2_MSCR_IO_SMC                | \
                       SIUL2_MSCR_IO_ILS_AUTO           | \
                       SIUL2_MSCR_IO_IBE)
/* SPIQ0  SOUT - PK13 */
#define SPIQ0_SOUT siul2_iopack(SIUL2_PORT_K, SIUL2_PAD_13)
#define SPIQ0_SOUT_CFG (SIUL2_MSCR_IO_SSS(0x0E)         | \
                        SIUL2_MSCR_IO_OERC_STRONG       | \
                        SIUL2_MSCR_IO_ODC_PUSH_PULL     | \
                        SIUL2_MSCR_IO_SMC               | \
                        SIUL2_MSCR_IO_ILS_AUTO          | \
                        SIUL2_MSCR_IO_IBE)
/* SPIQ0  SIN - PJ11 */
#define SPIQ0_SIN siul2_iopack(SIUL2_PORT_J, SIUL2_PAD_11)
#define SPIQ0_SIN_CFG (SIUL2_MSCR_IO_SSS(0x00)              | \
                       SIUL2_MSCR_IO_ILS_TTL                | \
                       SIUL2_MSCR_IO_OERC_STRONG            | \
                       SIUL2_MSCR_IO_FILBYPASS              | \
                       SIUL2_MSCR_IO_IBE)

#define SPIQ0_SIN_IOMUX 971u
/* SPIQ0  SIN MSCR.SSS = 0x00 - PJ11 (MSCR Register 971) */
#define SPIQ0_SIN_IOMUX_CFG 1u

/* SPIQ0  CS0 - PJ8 */
#define SPIQ0_CS0 siul2_iopack(SIUL2_PORT_J, SIUL2_PAD_8)
#define SPIQ0_CS0_CFG (SIUL2_MSCR_IO_SSS(0x08)         | \
                       SIUL2_MSCR_IO_OERC_STRONG       | \
                       SIUL2_MSCR_IO_ODC_PUSH_PULL     | \
                       SIUL2_MSCR_IO_SMC               | \
                       SIUL2_MSCR_IO_ILS_AUTO          | \
                       SIUL2_MSCR_IO_IBE)
#define SPIQ0_CS0_IOMUX 969u
#define SPIQ0_CS0_IOMUX_CFG 2u
 
And this is the SPI config:
    spiq_pcs_default_level(&spiqd_0, SPIQ_PCS_0, SPIQ_SIGNAL_LEVEL_HIGH);
    spiq_start(&spiqd_0);

    queue_SBC_PFS273 = spiq_queue_allocate(&spiqd_0);
    tac_SBC_PFS273 = spiq_tac_allocate(&spiqd_0);

    spiq_queue_mode(queue_SBC_PFS273, SPIQ_QUEUE_MODE_PRIO_5);
    spiq_queue_mode(queue_SBC_PFS273, SPIQ_QUEUE_MODE_TX_SYNCHRONOUS);
    spiq_queue_mode(queue_SBC_PFS273, SPIQ_QUEUE_MODE_TX_CPU);
    spiq_queue_mode(queue_SBC_PFS273, SPIQ_QUEUE_MODE_RX_SYNCHRONOUS);
    spiq_queue_mode(queue_SBC_PFS273, SPIQ_QUEUE_MODE_RX_CPU);

    /*Trasfer control registers setup*/
    uint32_t leading_delay = spiq_tac_mode_set_delay(tac_SBC_PFS273, SPIQ_TAC_LEADING_DELAY, 800UL);
    uint32_t trailing_delay = spiq_tac_mode_set_delay(tac_SBC_PFS273, SPIQ_TAC_TRAILING_DELAY, 800UL);
    uint32_t inter_word_delay = spiq_tac_mode_set_delay(tac_SBC_PFS273, SPIQ_TAC_INTER_WORD_DELAY, 200UL);
    uint32_t next_frame_delay = spiq_tac_mode_set_delay(tac_SBC_PFS273, SPIQ_TAC_NEXT_FRAME_DELAY, 200UL);
    effective_baud_rate = spiq_tac_mode_set_baud_rate(tac_SBC_PFS273, 50000UL, SPIQ_TAC_BAUD_DOUBLE_OFF);
    spiq_tac_mode(tac_SBC_PFS273, SPIQ_TAC_CLOCK_INACTIVE_LOW); //(CPOL = 0)
    spiq_tac_mode(tac_SBC_PFS273, SPIQ_TAC_CLOCK_PHASE_HIGH); // (CHPA = 1)
    spiq_tac_mode(tac_SBC_PFS273, SPIQ_TAC_SHIFT_MSB_FIRST);
    spiq_tac_mode(tac_SBC_PFS273, SPIQ_TAC_FRAME_SIZE_32_BITS);
    spiq_tac_mode(tac_SBC_PFS273, SPIQ_TAC_SW_TRIGGER_ENABLE);
    spiq_tac_mode(tac_SBC_PFS273, SPIQ_TAC_DATA_IN_RXFIFO);
    spiq_tac_mode(tac_SBC_PFS273, SPIQ_TAC_CRC_DISABLE);
    spiq_tac_set_pcs(tac_SBC_PFS273, SPIQ_PCS_0);
    spiq_tac_mode(tac_SBC_PFS273, SPIQ_TAC_CONT_PCS_DISABLED);
 
Does anybody know what should be the problem. Thanks.
Best answer by Erwan YVIN

Hello ,

Which version of StellarSSDK do you use ?

(the last one in 5.0.0)

SR6P7 is not Mass Market , i recommend to contact your FAE

         Best regards

                    Erwan

1 reply

Erwan YVIN
Erwan YVINBest answer
ST Technical Moderator
October 2, 2025

Hello ,

Which version of StellarSSDK do you use ?

(the last one in 5.0.0)

SR6P7 is not Mass Market , i recommend to contact your FAE

         Best regards

                    Erwan

In order to give better visibility on the answered topics, please click on 'Best answer' on the reply which solved your issue or answered your question.