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

Can't change clock source from NRF_LF_SRC_XTAL to NRF_LF_SRC_RC

Hi

I changed the clock source from NRF_LF_SRC_XTAL to NRF_LF_SRC_RC, but it dit not work.

In the migration guide(Migration Guide)
I found out, that the method SOFTDEVICE_HANDLER_INIT was replaced by nrf_sdh_enable_request().
The SOFTDEVICE_HANDLER_INIT  had as argument the clock source but the nrf_sdh_enable_request() method does not have any arguments.

How can I set the clock source?

Thanks,

Werner

Parents
  • Hi, 

    nrf_sdh_enable_request() will apply the clock settings from sdk_config.h. Here's an example: 

    // <h> Clock - SoftDevice clock configuration
    
    //==========================================================
    // <o> NRF_SDH_CLOCK_LF_SRC  - SoftDevice clock source.
     
    // <0=> NRF_CLOCK_LF_SRC_RC 
    // <1=> NRF_CLOCK_LF_SRC_XTAL 
    // <2=> NRF_CLOCK_LF_SRC_SYNTH 
    
    #ifndef NRF_SDH_CLOCK_LF_SRC
    #define NRF_SDH_CLOCK_LF_SRC 0
    #endif
    
    // <o> NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. 
    #ifndef NRF_SDH_CLOCK_LF_RC_CTIV
    #define NRF_SDH_CLOCK_LF_RC_CTIV 16
    #endif
    
    // <o> NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. 
    // <i> How often (in number of calibration intervals) the RC oscillator shall be calibrated
    // <i>  if the temperature has not changed.
    
    #ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV
    #define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 2
    #endif
    
    // <o> NRF_SDH_CLOCK_LF_ACCURACY  - External clock accuracy used in the LL to compute timing.
     
    // <0=> NRF_CLOCK_LF_ACCURACY_250_PPM 
    // <1=> NRF_CLOCK_LF_ACCURACY_500_PPM 
    // <2=> NRF_CLOCK_LF_ACCURACY_150_PPM 
    // <3=> NRF_CLOCK_LF_ACCURACY_100_PPM 
    // <4=> NRF_CLOCK_LF_ACCURACY_75_PPM 
    // <5=> NRF_CLOCK_LF_ACCURACY_50_PPM 
    // <6=> NRF_CLOCK_LF_ACCURACY_30_PPM 
    // <7=> NRF_CLOCK_LF_ACCURACY_20_PPM 
    // <8=> NRF_CLOCK_LF_ACCURACY_10_PPM 
    // <9=> NRF_CLOCK_LF_ACCURACY_5_PPM 
    // <10=> NRF_CLOCK_LF_ACCURACY_2_PPM 
    // <11=> NRF_CLOCK_LF_ACCURACY_1_PPM 
    
    #ifndef NRF_SDH_CLOCK_LF_ACCURACY
    #define NRF_SDH_CLOCK_LF_ACCURACY 1
    #endif

    Note that the accuracy must be set to 500 ppm when using the internal RC oscillator. You may refer to the nrf_clock_lf_cfg_t structure for more details around the clock configuration parameters. 

  • , where did you get "500 ppm" as the required accuracy hen using internal RC? I looked at the link  but it only gives recommendation for NRF_SDH_CLOCK_LF_RC_CTIV and NRF_SDH_CLOCK_LF_RC_TEMP_CTIV.  

  • The API documentation suggests calibration intervals to achieve the 500 ppm clock tolerance, but it could probably have been more clear. 

    "For nRF52, the application must ensure calibration at least once every 8 seconds to ensure +/-500 ppm clock stability."

    500 ppm is the tolerance for the RCOSC on 52840: https://infocenter.nordicsemi.com/topic/ps_nrf52840/clock.html?cp=3_0_0_4_3_3_3#unique_1494269344 

Reply Children
No Data
Related