The reasons for BLE_HCI_INSTANT_PASSED occurring on a peripheral and the corresponding countermeasures.

I using XIAO nrf52840.
https://wiki.seeedstudio.com/XIAO_BLE/

I am developing a BLE peripheral device using the nRF52840.
This device is designed to connect with a specific central device.
The peripheral detects disconnect events, which can be attributed to two main factors:

  • BLE_HCI_CONNECTION_TIMEOUT
  • BLE_HCI_INSTANT_PASSED

For BLE_HCI_CONNECTION_TIMEOUT, I believe the cause is the distance between the BLE devices or the presence of many 2.4 GHz frequency devices in the area.
If this issue occurs frequently, I am considering advising users to reduce the distance between the devices.

As for BLE_HCI_INSTANT_PASSED, what would be the best approach to handle this issue?

I looked at https://devzone.nordicsemi.com/f/nordic-q-a/67703/ble_hci_instant_passed-disconnection-reason.
but I’m still not entirely sure I understand it.
Does it mean that the LFCLK source settings are incorrect?
I'll include the sdk_config settings below.

//==========================================================

// <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 1
#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 0
#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 0
#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 7
#endif

thank you for reading my question.

Parents
  • Hi

    BLE_HCI_INSTANT_PASSED means that an instant was passed, and could be due to the LF crystal clock not being tuned correctly so that the device misses the HCI instant due to the clock being off by too much to catch it. I'm not 100% sure this is the error, but it's a good first step at least, as this has been seen as the cause of this error message for this.

    Best regards,

    Simon

Reply
  • Hi

    BLE_HCI_INSTANT_PASSED means that an instant was passed, and could be due to the LF crystal clock not being tuned correctly so that the device misses the HCI instant due to the clock being off by too much to catch it. I'm not 100% sure this is the error, but it's a good first step at least, as this has been seen as the cause of this error message for this.

    Best regards,

    Simon

Children
No Data
Related