A BLE disconnection issue occurred randomly after the device had been functioning without any problems for many hours

Hi everyone,

We have devices using the BLE module (nRF52) deployed in clinics for testing. They have been functioning without issues until recently when we noticed occasional BLE disconnections. The following image shows data from one of the affected devices. Its RSSI value dropped significantly to -90 dBm, indicating weak BLE signal strength that could explain the disconnect. However, the device was positioned close to a tablet running the application connected to it, where the BLE signal strength should have remained strong. This inconsistency is what we find puzzling.

In another case, the RSSI value was within acceptable range (-68dBm), which couldn't lead to the BLE disconnection. 

We're thinking of if any issue with code optimization. Any suggestions to further investigate this issue would be greatly appreciated. Thanks!

Parents
  • We had a similar issue with a disconnect due to RSSI when the sensor was supposed to be next to a tablet/gateway and it turned out to be a large body of water placed in close proximity to the tablet ie someone picked the tablet up and turned away from the sensor to better read the data and the human body blocked the 2.4GHz signal pretty well. 2nd case looks odd though unless a local microwave got switched on .. SDK or nRFConnect?

  • Thanks for the reply,  ! We're using the latest SDK 17.1.0.

    Since deploying it in the clinics, people being around the device might be inevitable. Moreover, some other equipment that have interference might be introduced in the room as well. In this situation, it'd be great if you can suggest any solutions to protect the device from being disrupted by human body or other sources of interference! Thanks!

  • Maybe post the settings you have; these can be tweaked to reduce disconnection likelihood by delaying as long as possible a disconnect due to loss of signal. Other options are coded PHY or increased Tx power, but the issue may also be with the tablet. Changing orientation or raising height of either device or tablet or both can help, a lot depends on multipath signals so room size and wall coatings.

  • The following is the setting I have. A patient on the bed which is around 2.5 feet from the floor. Our device is worn in the patient's foot. The tablet location is a subject of change, meaning it can be held by someone or put on a table. Some people walked between the device and the tablet. Some other equipment was also in the room as well.

  • With that setup good quality antennas should work well, but for example a low-cost nRF52840 Dongle would not work well as that printed circuit antenna is not effective with personnel in close proximity. I prefer chip antennas. Here are a couple of discussions on maintaining connection stability; a lot depends on whether the streaming has to be live with no lag or you can accept some delay in updating (say) a scrolling live display. Also some tablets are better than others, and there are differences in what parameter ranges are allowed.

    effect-of-connection-interval-on-connection-stability

    throughput-and-long-range-demo

    ble-connection-stability

    There are lots on the devzone, these just happen to be a couple of links I have to hand

    Edit: Orientation of the foot antenna matters; you might consider specifying a solid angle of best performance for the position of the tablet, or change the foot antenna alignment if that position happens to be inconvenient.

  • Thanks for the suggestion! I forgot to mention about the settings. Blankets and surgical drapes are also used, covering entire patient and the BLE device. However, I don't think it would affect the BLE signal. Please give your thoughts!

    I'm using the BLE module with chip antennas as well. Regarding the data streaming, it's real-time with no lag. The following picture is a closer look of the device worn on the foot. The device's antenna is placed on the left side of the device. Any suggestions for the tablet location in this case would greatly appreciate.

    I read some posts you shared which I noticed that changing to 1M PHY could mitigate the BLE disconnection. In our case, since the distance between the tablet and the device is very short. Any thoughts if this change would help?

    Last thing, by looking at those posts, I checked again our schematic and found that our Xtal capacitors (C3, C4) doesn't seem correct.

    Please correct me if I calculated this correctly or not.

    • The load capacitance (Cload) for our crystal is 9pF
    • The input pin capacitance (Cpin) for the BLE chip (nRF52833) is 3pF.
    • I'd pick the PCB capacitance (Cpcb) of 1pF.
    • C3 = C4 = 2*Cload - Cpin - Cpcb = 18 - 3 - 1 = 14pF

    Will this affect the crystal stability, potentially posing the BLE disconnection issue?

Reply
  • Thanks for the suggestion! I forgot to mention about the settings. Blankets and surgical drapes are also used, covering entire patient and the BLE device. However, I don't think it would affect the BLE signal. Please give your thoughts!

    I'm using the BLE module with chip antennas as well. Regarding the data streaming, it's real-time with no lag. The following picture is a closer look of the device worn on the foot. The device's antenna is placed on the left side of the device. Any suggestions for the tablet location in this case would greatly appreciate.

    I read some posts you shared which I noticed that changing to 1M PHY could mitigate the BLE disconnection. In our case, since the distance between the tablet and the device is very short. Any thoughts if this change would help?

    Last thing, by looking at those posts, I checked again our schematic and found that our Xtal capacitors (C3, C4) doesn't seem correct.

    Please correct me if I calculated this correctly or not.

    • The load capacitance (Cload) for our crystal is 9pF
    • The input pin capacitance (Cpin) for the BLE chip (nRF52833) is 3pF.
    • I'd pick the PCB capacitance (Cpcb) of 1pF.
    • C3 = C4 = 2*Cload - Cpin - Cpcb = 18 - 3 - 1 = 14pF

    Will this affect the crystal stability, potentially posing the BLE disconnection issue?

Children
  • Coded PHY is more resilient than 1M or 2M PHY, but of course the on-air packet time increases. Forward Error Correction (FEC) with coded PHY helps with that. Regarding location and orientation, it has to be tested to get the optimum result as all antennas have directional variations; some orientations will rely on reflections (multipath) from walls, floor and ceiling. Any covering degrades performance, but not by much; worse case is usually adjacent humans blocking the direct line-of-sight; worth testing that with different device orientations.

    Load capacitance is slightly arguable, given board capacitance is distributed and hard to quantify. Pin capacitance adds directly to the two individual load capacitors:

    CL = (CaCb)/(Ca+Cb) + Cstray where Ca=Cb=9pF+Cpin=12pF and Cstray (not pins) say 1 or 2pF = net CL of 7 or 8pF
    Yes that could be improved, but no I would argue it doesn't matter that much. Too large a value slows down the crystal, too small speeds up (pulls) but by very little. The actual frequency is more affected by temperature; on the covered foot will be higher temperature than in free air and this may compensate for the load capacitance, best to accurately measure a long time interval derived from the 32kHz crystal.

  • Unfortunately, I'm using iPad Pro right now to test, but it doesn't equip Code PHY.

    Thanks a lot for giving me insightful thoughts for this issue,  !

    My last thought of avoiding the BLE disconnection is to boost the TX power using PL/LNA. Not sure if it'd be an overkill approach. Moreover, it requires a major update on our device. 

  • I wouldn't bother, just boost to max Tx +4dB. What are these set to? They will affect the reliability.

    // Connection interval: Determines how often the Central queries data from the Peripheral.
    //   Peripheral may request an update between between minimum 7.5 ms and maximum 4 sec
    // Slave latency: A Non-zero slave latency allows the Peripheral to not answer when the
    //   Central asks for data up to the slave latency number of times. However if the Peripheral
    //   has data to send it can send data at any time. This enables a peripheral to stay sleeping
    //   for a longer time, if it doesn't have data to send, but still send data fast if needed
    // Connection Supervision Timeout: Determines the timeout from the last data exchange untill
    //   a link is considered lost. A Central will not start trying to reconnect before the timeout
    //   has passed, so a short timeout is preferred for devices often going out of range
    
        gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL;
        gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL;
        gap_conn_params.slave_latency     = SLAVE_LATENCY;
        gap_conn_params.conn_sup_timeout  = CONN_SUP_TIMEOUT;
    

Related