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) 
Parents
  • Yes, the parameters should be the same:

    #define SCAN_INTERVAL           0x0C80                          /**< Determines scan interval in units of 0.625 millisecond. */
    #define SCAN_WINDOW             0x0050                          /**< Determines scan window in units of 0.625 millisecond. */
    #define SCAN_ACTIVE             1                               /**< If 1, performe active scanning (scan requests). */
    #define SCAN_SELECTIVE          0                               /**< If 1, ignore unknown devices (non whitelisted). */
    #define SCAN_TIMEOUT            0x0000                          /**< Timout when scanning. 0x0000 disables timeout. */
    
    #define MIN_CONNECTION_INTERVAL MSEC_TO_UNITS(7.5, UNIT_1_25_MS) /**< Determines minimum connection interval in millisecond. */
    #define MAX_CONNECTION_INTERVAL MSEC_TO_UNITS(100, UNIT_1_25_MS) /**< Determines maximum connection interval in millisecond. */
    #define SLAVE_LATENCY           0                               /**< Determines slave latency in counts of connection events. */
    #define SUPERVISION_TIMEOUT     MSEC_TO_UNITS(6000, UNIT_10_MS) /**< Determines supervision time-out in units of 10 millisecond. */
    

    The phone is a Galaxy S7 running Android 7.0

Reply
  • Yes, the parameters should be the same:

    #define SCAN_INTERVAL           0x0C80                          /**< Determines scan interval in units of 0.625 millisecond. */
    #define SCAN_WINDOW             0x0050                          /**< Determines scan window in units of 0.625 millisecond. */
    #define SCAN_ACTIVE             1                               /**< If 1, performe active scanning (scan requests). */
    #define SCAN_SELECTIVE          0                               /**< If 1, ignore unknown devices (non whitelisted). */
    #define SCAN_TIMEOUT            0x0000                          /**< Timout when scanning. 0x0000 disables timeout. */
    
    #define MIN_CONNECTION_INTERVAL MSEC_TO_UNITS(7.5, UNIT_1_25_MS) /**< Determines minimum connection interval in millisecond. */
    #define MAX_CONNECTION_INTERVAL MSEC_TO_UNITS(100, UNIT_1_25_MS) /**< Determines maximum connection interval in millisecond. */
    #define SLAVE_LATENCY           0                               /**< Determines slave latency in counts of connection events. */
    #define SUPERVISION_TIMEOUT     MSEC_TO_UNITS(6000, UNIT_10_MS) /**< Determines supervision time-out in units of 10 millisecond. */
    

    The phone is a Galaxy S7 running Android 7.0

Children
No Data
Related