Hello,
Is that true I only need the HFXO to be on right before issuing NRF_RADIO->TASKS_START = 1?
As long as the radio is not in TX/RX status, the HFXO can be turned off?
Thanks!
Hello,
Is that true I only need the HFXO to be on right before issuing NRF_RADIO->TASKS_START = 1?
As long as the radio is not in TX/RX status, the HFXO can be turned off?
Thanks!
Hi Vidar, Thanks for the figure, which is helpful!
Currently, I am having an issue that when I am turning on/off the HFXO (using hfxo_start and hfxo_stop function shown below) according to the usage of radio, at some point, the HFCLK stopped running, i.e. the running bit o HFCLKSTAT is 0 all times after issuing the HFCLKSTARTED task.
void clocks_hfxo_start(void){
// Start HFCLK and wait for it to start.
if (NRF_CLOCK->HFCLKSTAT != 0x00010001) {
NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;NRF_CLOCK->TASKS_HFCLKSTART = 1;
while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0); // blocked at herewhile (NRF_CLOCK->HFCLKSTAT != 0x00010001);}}
void clocks_hfxo_stop(void){
// make sure the clock source is xtalif((NRF_CLOCK->HFCLKSTAT & 0x00000001) != 0) {
// make sure the clock is runningif((NRF_CLOCK->HFCLKSTAT & 0x00010000) != 0) {
NRF_CLOCK->TASKS_HFCLKSTOP = 1;while((NRF_CLOCK->HFCLKSTAT & 0x00000001) != 0);}}}
How should I debug this?
Hi Vidar, Thanks for the figure, which is helpful!
Currently, I am having an issue that when I am turning on/off the HFXO (using hfxo_start and hfxo_stop function shown below) according to the usage of radio, at some point, the HFCLK stopped running, i.e. the running bit o HFCLKSTAT is 0 all times after issuing the HFCLKSTARTED task.
void clocks_hfxo_start(void){
// Start HFCLK and wait for it to start.
if (NRF_CLOCK->HFCLKSTAT != 0x00010001) {
NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;NRF_CLOCK->TASKS_HFCLKSTART = 1;
while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0); // blocked at herewhile (NRF_CLOCK->HFCLKSTAT != 0x00010001);}}
void clocks_hfxo_stop(void){
// make sure the clock source is xtalif((NRF_CLOCK->HFCLKSTAT & 0x00000001) != 0) {
// make sure the clock is runningif((NRF_CLOCK->HFCLKSTAT & 0x00010000) != 0) {
NRF_CLOCK->TASKS_HFCLKSTOP = 1;while((NRF_CLOCK->HFCLKSTAT & 0x00000001) != 0);}}}
How should I debug this?
Hi,
I'm not sure why it gets stuck in that state. Is this easy to replicate on your board, and have you tried it on a nordic DK? I used your code in the SDK blinky example, but did not manage to replicate the issue on my end.

It should be sufficient to just wait for the EVENTS_HFCLKSTARTED event when starting the crystal and it usually shouldn't be neccessary to a wait function after the clock stop task either.
Best regards,
Vidar