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

Samsung Galaxy S8 cannot find nRF52 after Directed Advertisement

We have a discovery issue that seemingly only happens with the Samsung Galaxy S8.

We are using the nRF52832 with SoftDevice S132 v2.0.1, and do directed advertisements to the last connected peer when disconnecting. We do not use pairing or bonding. If we connect to a second device, such as an iPhone, and disconnect from the iPhone, the radio goes into fast directed advertising, and if it doesn't find the last connected peer, it goes to fast undirected advertising.

Our problem is that the Samsung Galaxy S8 does not discover the nRF52 after the fast directed advertising mode is over and undirected advertisements starts. We have tried having 4 different brand phones running in parallel with the nRF Go scanner app open, and only on the Galaxy S8 it cannot discover the nRF. If we restart the nRF and start immediately in fast undirected advertisement, the S8 finds the nRF instantly. Also disabling directed advertisements altogether seem to resolve the connectivity issues with the S8, but this seems like a non-solution to me as we are giving up the fast reconnect feature of having directed advertisements.

The problem appears not only with the scanner app, but also when using our own BLE Android application.

Below is the config we are currently passing to the advertising module (SDK 12.3)

#define APP_ADV_INTERVAL_FAST            20 // ms
#define APP_ADV_TIMEOUT_FAST_IN_SECONDS  30 // s

#define APP_ADV_INTERVAL_SLOW            1285 // ms
#define APP_ADV_TIMEOUT_SLOW_IN_SECONDS  BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED

static const ble_adv_modes_config_t options = {
    .ble_adv_whitelist_enabled = false,
    .ble_adv_directed_enabled  = true, // Disable this due to Samsung S8
    .ble_adv_directed_slow_enabled = false,
    .ble_adv_fast_enabled = true,
    .ble_adv_slow_enabled = true,
    .ble_adv_directed_slow_interval = 0,
    .ble_adv_directed_slow_timeout = 0,
    .ble_adv_fast_interval = (uint32_t) MSEC_TO_UNITS(APP_ADV_INTERVAL_FAST, UNIT_0_625_MS),
    .ble_adv_fast_timeout = APP_ADV_TIMEOUT_FAST_IN_SECONDS,
    .ble_adv_slow_interval = (uint32_t) MSEC_TO_UNITS(APP_ADV_INTERVAL_SLOW, UNIT_0_625_MS),
    .ble_adv_slow_timeout = APP_ADV_TIMEOUT_SLOW_IN_SECONDS
};

Are we doing anything wrong from our side, or is this most likely an issue with the BLE stack on the Samsung S8? Regardless, any ideas for fixes or workarounds would be appreciated

Related