nRF52805 LFRC frequency tolerance exceeding ±2% on multiple devices

We are operating the 32.768 kHz low-frequency clock of the nRF52805 using the internal RC oscillator (LFRC).

We measured the LFCLK frequency of 100 devices, and the observed frequency tolerance relative to 32.768 kHz ranged from −0.2% to +2.7%.
As a result, some devices exceeded the ±2% frequency tolerance stated in the datasheet.

This result seems worse than expected based on the datasheet specification.

  • Is this level of frequency tolerance considered normal behavior for the LFRC on the nRF52805?
  • Could this be related to firmware configuration, such as LFRC calibration settings (RC_CTIV / TEMP_CTIV), SoftDevice usage, or clock initialization?
  • Are there any known conditions (temperature, startup behavior, calibration timing, etc.) that could cause the LFRC frequency tolerance to exceed ±2%?

For reference:

  • LFCLK source: LFRC (internal RC oscillator)
  • Measurements were performed under identical conditions for all devices.
  • SoftDevice is used, with LFRC calibration enabled.

Any guidance on expected LFRC frequency tolerance, recommended settings, or additional checks would be greatly appreciated.

Thank you.

  • Hi

    As you understood correctly, the SoftDevice is programmed into Flash, but it is used only for another feature.
    For the 32.768 kHz frequency output processing, the SoftDevice is not enabled from the application side.

    In this case, is it necessary to enable the SoftDevice for this operation?

    If enabling the SoftDevice is required, is my understanding correct that simply adding the following SoftDevice enable sequence is sufficient?

     

    err_code = nrf_sdh_enable_request();

    APP_ERROR_CHECK(err_code);

     

    // Configure the BLE stack using the default settings.

    // Fetch the start address of the application RAM.

    uint32_t ram_start = 0;

    err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &ram_start);

    APP_ERROR_CHECK(err_code);

     

    // Enable BLE stack.

    err_code = nrf_sdh_ble_enable(&ram_start);

    APP_ERROR_CHECK(err_code);

     

    If there are any additional steps required, please let us know.

  • Hi

    Sorry about the late reply here. I have been indisposed for the last week, so I'm only getting back to attending my case queue now. What do you mean by thee SoftDevice being used for another feature?

    Do you specifically disable the SoftDevice in your application somewhere while the LF RC oscillator is running? If so, I believe calibration will stop as well, and that would result in drift on the clock if it assumes it's being calibrated by the SoftDevice every 4 seconds.

    Best regards,

    Simon

Related