Hi there
After initializing the SoftDevice S132 V6.1.0, I request the HF crystal by calling the function sd_clock_hfclk_request():
uint32 SD_HF_crystal_start(void)
{
uint32 sd_stat;
uint32 running;
// Request the start of the HF crystal oscillator
sd_stat = sd_clock_hfclk_request();
if (sd_stat) {return sd_stat;}
// Workaround for errata 68 of nRF52832 rev. 1
QT_wait_us(HFXO_STABLE_TIME_US);
// Wait until the HF crystal has started
running = 0;
while (running == 0)
{
sd_stat = sd_clock_hfclk_is_running(&running);
if (sd_stat) {return sd_stat;}
}
return NRF_SUCCESS;
}
Later in the code, after a BLE connection has been established (nRF being in peripheral role), I'm calling sd_app_evt_wait() in a loop to save power until the connection has been terminated again.
Now, the problem occurred that the function sd_app_evt_wait() returns immediately at every call. But when I clear the SD_EVT_IRQn after the HF crystal has been started, the function sd_app_evt_wait() remains sleeping as expected.
// Enable the HF crystal
sd_stat = SD_HF_crystal_start();
if (sd_stat) {return sd_stat;}
// Clear the SoftDevice event IRQ
NVIC_ClearPendingIRQ(SD_EVT_IRQn);
I've read that sd_app_evt_wait() returns immediately when an event is pending, but I would have expected that the nRF enters the low power mode at the next call of this function. Did I get this wrong? Why does starting the HF crystal prevent the nRF from entering System ON low power mode? Do you know this behavior?
Many thanks in advance.
Best regards