Question: How to force the tolerance of the low frequency clock in the absence of 32kHz xtal in central role so that during connection request the sleep clock accuracy is reported as 20ppm?
When central device is using the 32.768 kHz synthesized from HFCLK the softdevice reports worst possible tolerance.
This is seen by sniffer at connection request: 000. .... = Sleep Clock Accuracy: 251 ppm to 500 ppm (0))
According to the datasheet " Frequency tolerance will be derived from the HFCLK source clock plus the LFSYNT tolerance ". Here the HF=10ppm; LF=8ppm so overall should be within 20ppm.
The definition is set as below:
#define NRF_CLOCK_LFCLKSRC {.source = NRF_CLOCK_LF_SRC_SYNTH, \
.rc_ctiv = 0, \
.rc_temp_ctiv = 0, \
.xtal_accuracy = NRF_CLOCK_LF_XTAL_ACCURACY_20_PPM}
If the source above is set to below then the sniffer reports tolerance correctly
.source = NRF_CLOCK_LF_SRC_XTAL,
The LFXTAL is not present on the central board to save BOM. 20ppm is required to save power at long connection intervals.
Configuration on both sides: nRF52 SDK12.1.0 s132_nrf52_3.0.0_softdevice Peripheral device uses both slow and fast XTALS, central device uses only 32MHz.