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

NRF52 Running S132V3.0 Soft Device as a Central can't maintain a connection with a Samsung Galaxy S7 peripheral

Hardware: I have an nRF52 device running the S132 running as a Central. I have 6 iOS/Android devices running as peripherals.

Background: I am attempting to have my central device maintain a connection with a variety of devices. My phone app is running the Uart Service following the Nordic Uart Service example. I've extended the UART Central Service on my hardware to accept multiple concurrent UART channels.

I am successfully able to connect and maintain a connections with: Samsung Galaxy S6, Note5 (devices running Android 6.0.1) iPhone 5S, iPhone6, and iPhone7 Nexus/Pixel running Android 7.1.1

I am, however, having trouble maintaining a connection with anything that is running Android 7.0.

Question: On the Galaxy S7 (Android 7.0) I'm seeing that a valid Bluetooth connection is established, my UART service discovery is successful (I get valid looking UART handles), and before I'm able to send anything to the phone the connection is dropped. This issue seems to affect the Android 7.0 phone I have for testing, but I'm not sure if it is an issue with Android 7.0 specifically or it is an issue with my Central code.

In the Multi-Connection Central example the Central continues to scan for peripherals after the first connection is made. During the Scanning window I'm seeing that no other Central bluetooth actions can take place. Is it possible that if my peripheral device has a 20 ms connection interval but my scan window is 200 ms that my peripherals would be disconnected during my scan window, since I could miss 10 connection intervals? Does the Soft Device have a way to guard against this?

For reference, this is how I have my scanning and connection intervals setup for my Central device.

SCAN_INTERVAL_SLOW             MSEC_TO_UNITS(2000, UNIT_0_625_MS) 
SCAN_WINDOW_SLOW               MSEC_TO_UNITS(200, UNIT_0_625_MS) 
SCAN_TIMEOUT_SLOW              MSEC_TO_UNITS(0, UNIT_0_625_MS)  

MIN_CONNECTION_INTERVAL   MSEC_TO_UNITS(7.5, UNIT_1_25_MS)  
MAX_CONNECTION_INTERVAL   MSEC_TO_UNITS(100, UNIT_1_25_MS) 
SLAVE_LATENCY             4  
SUPERVISION_TIMEOUT       MSEC_TO_UNITS(6000, UNIT_10_MS) 
Related