This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Measuring 32 kHz Crystal Accuracy - Test Software does only use RC Oscillator not XTAL

Hello,

I want to measure the 32 kHz XTAL frequency by toggling a GPIO and measuring the frequency by a frequency counter. The nRF52 has got an external crystal connected. But if I measure the frequency, I get around 34 kHz and I noticed that this frequency is there, although I remove the 32 kHz crystal. So the frequency must be created by the internal RC or derived from the 32 MHz crystal. I checked the SDK config but it is correct:

// <e> NRFX_CLOCK_ENABLED - nrfx_clock - CLOCK peripheral driver
//==========================================================
#ifndef NRFX_CLOCK_ENABLED
#define NRFX_CLOCK_ENABLED 1
#endif
// <o> NRFX_CLOCK_CONFIG_LF_SRC  - LF Clock Source

// <0=> RC
// <1=> XTAL
// <2=> Synth
// <131073=> External Low Swing
// <196609=> External Full Swing

#ifndef NRFX_CLOCK_CONFIG_LF_SRC
#define NRFX_CLOCK_CONFIG_LF_SRC 1
#endif

And here is my code to toggle the pin:

static void rtc_evt_handler(nrfx_rtc_int_type_t event)
{
  if(event == NRFX_RTC_INT_TICK)
  {
    /* Set GPIO high */
    GPIO_pin_set(TX_TEST, GPIO_state_high);

    /* Wait some time */
    nrf_delay_us(10);

    /* Set GPIO low */
    GPIO_pin_set(TX_TEST, GPIO_state_low);
  }
}

/* Public functions ----------------------------------------------------------*/
void Test_crystal_32khz_start(void)
{
  nrfx_rtc_config_t       rtc_config  = NRFX_RTC_DEFAULT_CONFIG;

  /* Set RTC prescaler */
  rtc_config.prescaler                = 0;

  /* Start internal LFCLK XTAL oscillator */
  nrfx_clock_init(clock_evt_handler);
  nrfx_clock_lfclk_start();

  /* Initialize RTC instance */
  nrfx_rtc_init(&rtc_instance, &rtc_config, rtc_evt_handler);

  /* Power on RTC */
  nrfx_rtc_enable(&rtc_instance);

  /* Enable tick event interrupt */
  nrfx_rtc_tick_enable(&rtc_instance, true);

  Log_print("[OK] %s: Init successful", __FILE__);

  while(1)
  {
    Log_process_single();
  }
}

I use the same SDK config for our ongoing project and there I can measure a sine wave on the 32 kHz crystal. But there is a Softdevice running, maybe it is controling the LFCLK sources?

What should I configurate, to force the chip to use the 32 kHz crystal?

Thank you!

Regards.

Parents Reply Children
No Data
Related