cancel
Showing results for 
Search instead for 
Did you mean: 

What are the differences in SubGHz calibration processing between STOP2 mode and Sleep mode?

Zeepunt
Associate II

I found in my tests that for the same sequence of operations (Radio.SetChannel -> Radio.RadioSetTxGenericConfig -> Radio.Send), the time required differs significantly between waking up from STOP2 sleep mode and waking up from Sleep mode.

 

Here is Radio workflow:

Startup -> Sleep -> Calibration -> Standby

 

Here is the test code, with two additional modifications.

void app_fsk_send(void)
{
    if (!s_radio_init_flag) {
        Radio.Init(&s_radio_events);
        s_radio_init_flag = true;
    }

    TxConfigGeneric_t tx_config;

    uint8_t syncword[] = {0xC1, 0x94, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00};

    if (!s_radio_init_flag) {
        Radio.Init(&s_radio_events);
        s_radio_init_flag = true;
    }

    priv_prbs9_generator(s_payload, 16);

    tx_config.fsk.ModulationShaping = RADIO_FSK_MOD_SHAPING_G_BT_1;
    tx_config.fsk.FrequencyDeviation = 40000;
    tx_config.fsk.BitRate = 100000;                              /* BitRate */
    tx_config.fsk.PreambleLen = 4;                               /* in Byte */
    tx_config.fsk.SyncWordLength = 3;                            /* in Byte */
    tx_config.fsk.SyncWord = syncword;                           /* SyncWord Buffer */
    tx_config.fsk.whiteSeed = 0;                                 /* WhiteningSeed */
    tx_config.fsk.HeaderType = RADIO_FSK_PACKET_VARIABLE_LENGTH; /* If the header is explicit, it will be transmitted in the GFSK packet. If the header is implicit, it will not be transmitted */
    tx_config.fsk.CrcLength = RADIO_FSK_CRC_OFF;                 /* Size of the CRC block in the GFSK packet */
    tx_config.fsk.CrcPolynomial = 0;
    tx_config.fsk.Whitening = RADIO_FSK_DC_FREE_OFF;

    UTIL_TIMER_Time_t t1 = UTIL_TIMER_GetCurrentTime();

    Radio.SetChannel(868950000);
    Radio.RadioSetTxGenericConfig(GENERIC_FSK, &tx_config, 14, 5000);
    Radio.Send(s_payload, 16);

    UTIL_TIMER_Time_t t2 = UTIL_TIMER_GetCurrentTime();

    APP_PRINTF("cost %d ms\r\n", t2 - t1);

    UTIL_SEQ_WaitEvt(1 << CFG_SEQ_Evt_RadioOnTstRF);
    Radio.Sleep();

    if (s_tx_flag == 1) {
        APP_PRINTF("tx timeout\r\n");
    }
    s_tx_flag = 0;
}

different1.png

 

different2.png

 

Here is the test results:

1. Radio.Sleep with  STOP2 mode,each transmission test costs 36 ms.

radio sleep with STOP2radio sleep with STOP2

2. Radio.Sleep with  SLEEP mode,each transmission test costs 4-6 ms.

radio sleep with SLEEPradio sleep with SLEEP

3. Radio.Standby with  STOP2 mode,the first transmission test cost 35 ms, after that, each transmission test costs 5-6 ms.

radio standby with STOP2radio standby with STOP2

4. Radio.Standby with  SLEEP mode,the first transmission test cost 6 ms, after that, each transmission test costs 1 ms.

radio standby with SLEEPradio standby with SLEEP

 

 

1 REPLY 1
Zeepunt
Associate II

MCU:STM32WLE5CCU6 with SubGHz