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

Instability of BLE connection due to BLE_HCI_CONNECTION_TIMEOUT

Hello,

may I ask you for help with instability of BLE connection? We use nRF52840 and SD 6.0.0. The issue is that our device is being disconnected with reason BLE_HCI_CONNECTION_TIMEOUT and we do not know why. We suppose to received this reason only when device is disconnected due to out of BLE range but not when it is in the range, e.g. we received this reason when the device is less than 1 m far away from cell phone. Another points is that we are not able to reproduce it, we can observed this issue several times per day....

We connected our device to various cell phone, e.g. iPhone SE iOS 13.6.

Parameters of BLE connection is:

#define REQUESTED_CONN_INTERVAL 180 /**< Connection interval requested by the watch (milliseconds). @hideinitializer */
#define REQUESTED_SLAVE_LATENCY 1 /**< Slave latency requested by the watch. @hideinitializer */
#define REQUESTED_CONN_SUP_TOUT 2000 /**< Connection supervision timeout requested by the watch (milliseconds). @hideinitializer */

and

#define NRF_SDH_CLOCK_LF_ACCURACY 5 /**< @brief External clock accuracy used in the LL to compute timing.*/

Do you have any idea what should be behind? 

Thanks

Vaclav

Parents
  • Hello Vidar,

    we are using crystal oscillator with 20PPM precision. We also try to change  NRF_SDH_CLOCK_LF_ACCURACY  setting for 500PPM. If the value 0 is for 500PPM because the comments of values is weird, see the comments of 500PPM and 250PPM:

    // <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 
    

    Is really 0 for 250PPM and 1 for 500PPM or it should be viseversa?

    Do you have another ideal what could cause this timetout?

    Thanks

    Vaclav

  • Hello Vaclav,

    Thanks for confirming. I  agree that the assigned values look suspicious, but they are correct (250 ppm used to be the default setting). Maybe you could try to see if you get the same disconnect problem if you try with an unmodified SDK example (eg ble_app_hrs or ble_app_uart)?

    Best regards,

    Vidar

Reply Children
No Data
Related