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

Samsung S10 Android 10 + BLE Error 8 (0x8): GATT CONN TIMEOUT

I am experiencing a GATT error 8(0x8) when connecting the Samsung S10 Android 10 to the nrfconnect app. This seems to be a Samsung issue as I do not experience this when connecting the Samsung S9 Android 10, Samsung J7 Prime android 8, Huawei P20 Android 10 and multiple iphones. To corroborate my statement, here's a link where many developers are experiencing the same problem : https://forum.developer.samsung.com/t/samsung-android-10-ble-connectivity-regression/509. I need a workaround to this issue as i do not see a fix coming to the mobile devices soon. 

I have a custom board running a custom firmware hosted by a nrf52832 SoC with a softdevice 6.0, using sdk 15. I have been reading through many other posts and have tried to make the following change :

from...
#define MIN_CONN_INTERVAL MSEC_TO_UNITS(15, UNIT_1_25_MS) 
#define MAX_CONN_INTERVAL MSEC_TO_UNITS(30, UNIT_1_25_MS)

to...
#define MIN_CONN_INTERVAL MSEC_TO_UNITS(50, UNIT_1_25_MS) 
#define MAX_CONN_INTERVAL MSEC_TO_UNITS(100, UNIT_1_25_MS) 

this did not work. I then came across posts that suggest that the issue has to do with "long MTU or DLE support" ....will removing DLE support fix my issue, is it worth the try ? 

In addition, Samsung made a security update recently and developer made a comment stating:

"Under Android 9 and 10 before Update June 2020 when you want use the BLE mode there was a warning message that the user must allow that the actual user position can be used by the app , that message is GONE AWAY in the latest update !
So now the good news … the data direction from the BLE Hardware to the Samsung Phone allows now full size MTUs of 180byte !
Bad news is that from the Phone to the BLE Hardware is still reduced data MTU of 20 byte !
So your bugfix was 50% successfully , now please do the rest 
Please tell them that they JUST only have to fix the problem with the data direction from the Samsung Phone to the BLE devices !"

With this being said , how do i go about implementing a fix with what the gentlemen said above?

Lastly, i can only provide a log of the connection issue which is attached to the post and i cannot provide a sniffer trace.
Help would be much appreciated. Thank you.

nRF Connect, 2020-07-02
RombotB_C520F1A0669B (C5:20:F1:A0:66:9B)
V	10:11:41.965	Connecting to C5:20:F1:A0:66:9B...
D	10:11:41.965	gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D	10:11:42.707	[Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
D	10:11:42.710	[Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I	10:11:42.710	Connected to C5:20:F1:A0:66:9B
V	10:11:42.737	Discovering services...
D	10:11:42.737	gatt.discoverServices()
I	10:11:43.266	Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
D	10:11:43.751	[Callback] Services discovered with status: 0
I	10:11:43.751	Services discovered
V	10:11:43.768	Generic Access (0x1800)
- Device Name [R W] (0x2A00)
- Appearance [R] (0x2A01)
- Peripheral Preferred Connection Parameters [R] (0x2A04)
- Central Address Resolution [R] (0x2AA6)
Generic Attribute (0x1801)
- Service Changed [I] (0x2A05)
   Client Characteristic Configuration (0x2902)
Secure DFU Service (0xFE59)
- Buttonless DFU [I W] (8ec90003-f315-4f60-9fb8-838830daea50)
   Client Characteristic Configuration (0x2902)
Device Information (0x180A)
- Manufacturer Name String [R] (0x2A29)
- Hardware Revision String [R] (0x2A27)
- Firmware Revision String [R] (0x2A26)
- Software Revision String [R] (0x2A28)
Battery Service (0x180F)
- Battery Level [N R] (0x2A19)
   Client Characteristic Configuration (0x2902)
Unknown Service (8b71a0c0-d50e-67b4-e811-0e2d1c4b0b8b)
- Unknown Characteristic [R W] (8b710000-d50e-67b4-e811-0e2d1c4b0b8b)
- Unknown Characteristic [N R W] (8b710001-d50e-67b4-e811-0e2d1c4b0b8b)
   Client Characteristic Configuration (0x2902)
- Unknown Characteristic [R W] (8b710002-d50e-67b4-e811-0e2d1c4b0b8b)
- Unknown Characteristic [N R W] (8b710003-d50e-67b4-e811-0e2d1c4b0b8b)
   Client Characteristic Configuration (0x2902)
- Unknown Characteristic [N R W] (8b710004-d50e-67b4-e811-0e2d1c4b0b8b)
   Client Characteristic Configuration (0x2902)
D	10:11:43.769	gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
D	10:11:43.770	gatt.setCharacteristicNotification(00002a19-0000-1000-8000-00805f9b34fb, true)
D	10:11:43.771	gatt.setCharacteristicNotification(8b710001-d50e-67b4-e811-0e2d1c4b0b8b, true)
D	10:11:43.772	gatt.setCharacteristicNotification(8b710003-d50e-67b4-e811-0e2d1c4b0b8b, true)
D	10:11:43.773	gatt.setCharacteristicNotification(8b710004-d50e-67b4-e811-0e2d1c4b0b8b, true)
I	10:11:43.817	Connection parameters updated (interval: 35.0ms, latency: 0, timeout: 5000ms)
I	10:11:48.001	Connection parameters updated (interval: 87.5ms, latency: 0, timeout: 4000ms)
D	10:11:53.348	[Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
E	10:11:53.348	Error 8 (0x8): GATT CONN TIMEOUT
I	10:11:53.348	Disconnected
D	10:11:53.433	[Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
D	10:12:04.283	gatt.close()
D	10:12:04.286	wait(200)
V	10:12:04.488	Connecting to C5:20:F1:A0:66:9B...
D	10:12:04.488	gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D	10:12:04.701	[Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
D	10:12:04.709	[Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I	10:12:04.709	Connected to C5:20:F1:A0:66:9B
V	10:12:04.723	Discovering services...
D	10:12:04.723	gatt.discoverServices()
I	10:12:05.261	Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
D	10:12:05.592	[Callback] Services discovered with status: 0
I	10:12:05.592	Services discovered
V	10:12:05.609	Generic Access (0x1800)
- Device Name [R W] (0x2A00)
- Appearance [R] (0x2A01)
- Peripheral Preferred Connection Parameters [R] (0x2A04)
- Central Address Resolution [R] (0x2AA6)
Generic Attribute (0x1801)
- Service Changed [I] (0x2A05)
   Client Characteristic Configuration (0x2902)
Secure DFU Service (0xFE59)
- Buttonless DFU [I W] (8ec90003-f315-4f60-9fb8-838830daea50)
   Client Characteristic Configuration (0x2902)
Device Information (0x180A)
- Manufacturer Name String [R] (0x2A29)
- Hardware Revision String [R] (0x2A27)
- Firmware Revision String [R] (0x2A26)
- Software Revision String [R] (0x2A28)
Battery Service (0x180F)
- Battery Level [N R] (0x2A19)
   Client Characteristic Configuration (0x2902)
Unknown Service (8b71a0c0-d50e-67b4-e811-0e2d1c4b0b8b)
- Unknown Characteristic [R W] (8b710000-d50e-67b4-e811-0e2d1c4b0b8b)
- Unknown Characteristic [N R W] (8b710001-d50e-67b4-e811-0e2d1c4b0b8b)
   Client Characteristic Configuration (0x2902)
- Unknown Characteristic [R W] (8b710002-d50e-67b4-e811-0e2d1c4b0b8b)
- Unknown Characteristic [N R W] (8b710003-d50e-67b4-e811-0e2d1c4b0b8b)
   Client Characteristic Configuration (0x2902)
- Unknown Characteristic [N R W] (8b710004-d50e-67b4-e811-0e2d1c4b0b8b)
   Client Characteristic Configuration (0x2902)
D	10:12:05.609	gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
D	10:12:05.610	gatt.setCharacteristicNotification(00002a19-0000-1000-8000-00805f9b34fb, true)
D	10:12:05.611	gatt.setCharacteristicNotification(8b710001-d50e-67b4-e811-0e2d1c4b0b8b, true)
D	10:12:05.612	gatt.setCharacteristicNotification(8b710003-d50e-67b4-e811-0e2d1c4b0b8b, true)
D	10:12:05.612	gatt.setCharacteristicNotification(8b710004-d50e-67b4-e811-0e2d1c4b0b8b, true)
I	10:12:05.657	Connection parameters updated (interval: 35.0ms, latency: 0, timeout: 5000ms)
D	10:12:12.280	[Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
E	10:12:12.280	Error 8 (0x8): GATT CONN TIMEOUT
I	10:12:12.280	Disconnected
D	10:12:12.363	[Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
D	10:12:19.204	gatt.close()
D	10:12:19.207	wait(200)
V	10:12:19.409	Connecting to C5:20:F1:A0:66:9B...
D	10:12:19.409	gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D	10:12:19.787	[Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I	10:12:19.787	Connected to C5:20:F1:A0:66:9B
D	10:12:19.806	[Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
V	10:12:19.808	Discovering services...
D	10:12:19.808	gatt.discoverServices()
I	10:12:20.344	Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
D	10:12:20.662	[Callback] Services discovered with status: 0
I	10:12:20.662	Services discovered
V	10:12:20.677	Generic Access (0x1800)
- Device Name [R W] (0x2A00)
- Appearance [R] (0x2A01)
- Peripheral Preferred Connection Parameters [R] (0x2A04)
- Central Address Resolution [R] (0x2AA6)
Generic Attribute (0x1801)
- Service Changed [I] (0x2A05)
   Client Characteristic Configuration (0x2902)
Secure DFU Service (0xFE59)
- Buttonless DFU [I W] (8ec90003-f315-4f60-9fb8-838830daea50)
   Client Characteristic Configuration (0x2902)
Device Information (0x180A)
- Manufacturer Name String [R] (0x2A29)
- Hardware Revision String [R] (0x2A27)
- Firmware Revision String [R] (0x2A26)
- Software Revision String [R] (0x2A28)
Battery Service (0x180F)
- Battery Level [N R] (0x2A19)
   Client Characteristic Configuration (0x2902)
Unknown Service (8b71a0c0-d50e-67b4-e811-0e2d1c4b0b8b)
- Unknown Characteristic [R W] (8b710000-d50e-67b4-e811-0e2d1c4b0b8b)
- Unknown Characteristic [N R W] (8b710001-d50e-67b4-e811-0e2d1c4b0b8b)
   Client Characteristic Configuration (0x2902)
- Unknown Characteristic [R W] (8b710002-d50e-67b4-e811-0e2d1c4b0b8b)
- Unknown Characteristic [N R W] (8b710003-d50e-67b4-e811-0e2d1c4b0b8b)
   Client Characteristic Configuration (0x2902)
- Unknown Characteristic [N R W] (8b710004-d50e-67b4-e811-0e2d1c4b0b8b)
   Client Characteristic Configuration (0x2902)
D	10:12:20.677	gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
D	10:12:20.679	gatt.setCharacteristicNotification(00002a19-0000-1000-8000-00805f9b34fb, true)
D	10:12:20.680	gatt.setCharacteristicNotification(8b710001-d50e-67b4-e811-0e2d1c4b0b8b, true)
D	10:12:20.680	gatt.setCharacteristicNotification(8b710003-d50e-67b4-e811-0e2d1c4b0b8b, true)
D	10:12:20.681	gatt.setCharacteristicNotification(8b710004-d50e-67b4-e811-0e2d1c4b0b8b, true)
I	10:12:20.725	Connection parameters updated (interval: 35.0ms, latency: 0, timeout: 5000ms)
D	10:12:28.324	[Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
E	10:12:28.324	Error 8 (0x8): GATT CONN TIMEOUT
I	10:12:28.324	Disconnected
D	10:12:28.388	[Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
D	10:12:36.257	gatt.close()
D	10:12:36.260	wait(200)
V	10:12:36.461	Connecting to C5:20:F1:A0:66:9B...
D	10:12:36.461	gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D	10:12:36.620	[Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I	10:12:36.620	Connected to C5:20:F1:A0:66:9B
D	10:12:36.622	[Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
V	10:12:36.644	Discovering services...
D	10:12:36.644	gatt.discoverServices()
I	10:12:37.180	Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
D	10:12:37.571	[Callback] Services discovered with status: 0
I	10:12:37.571	Services discovered
V	10:12:37.585	Generic Access (0x1800)
- Device Name [R W] (0x2A00)
- Appearance [R] (0x2A01)
- Peripheral Preferred Connection Parameters [R] (0x2A04)
- Central Address Resolution [R] (0x2AA6)
Generic Attribute (0x1801)
- Service Changed [I] (0x2A05)
   Client Characteristic Configuration (0x2902)
Secure DFU Service (0xFE59)
- Buttonless DFU [I W] (8ec90003-f315-4f60-9fb8-838830daea50)
   Client Characteristic Configuration (0x2902)
Device Information (0x180A)
- Manufacturer Name String [R] (0x2A29)
- Hardware Revision String [R] (0x2A27)
- Firmware Revision String [R] (0x2A26)
- Software Revision String [R] (0x2A28)
Battery Service (0x180F)
- Battery Level [N R] (0x2A19)
   Client Characteristic Configuration (0x2902)
Unknown Service (8b71a0c0-d50e-67b4-e811-0e2d1c4b0b8b)
- Unknown Characteristic [R W] (8b710000-d50e-67b4-e811-0e2d1c4b0b8b)
- Unknown Characteristic [N R W] (8b710001-d50e-67b4-e811-0e2d1c4b0b8b)
   Client Characteristic Configuration (0x2902)
- Unknown Characteristic [R W] (8b710002-d50e-67b4-e811-0e2d1c4b0b8b)
- Unknown Characteristic [N R W] (8b710003-d50e-67b4-e811-0e2d1c4b0b8b)
   Client Characteristic Configuration (0x2902)
- Unknown Characteristic [N R W] (8b710004-d50e-67b4-e811-0e2d1c4b0b8b)
   Client Characteristic Configuration (0x2902)
D	10:12:37.585	gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
D	10:12:37.586	gatt.setCharacteristicNotification(00002a19-0000-1000-8000-00805f9b34fb, true)
D	10:12:37.587	gatt.setCharacteristicNotification(8b710001-d50e-67b4-e811-0e2d1c4b0b8b, true)
D	10:12:37.588	gatt.setCharacteristicNotification(8b710003-d50e-67b4-e811-0e2d1c4b0b8b, true)
D	10:12:37.589	gatt.setCharacteristicNotification(8b710004-d50e-67b4-e811-0e2d1c4b0b8b, true)
I	10:12:37.683	Connection parameters updated (interval: 35.0ms, latency: 0, timeout: 5000ms)
D	10:12:42.973	[Callback] Connection state changed with status: 8 and new state: DISCONNECTED (0)
E	10:12:42.974	Error 8 (0x8): GATT CONN TIMEOUT
I	10:12:42.974	Disconnected
D	10:12:43.050	[Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED





  • If you want to do that, you need to set the MTU size to the default (23), and the softdevice will not request a higher MTU.

    /**@brief Function for initializing the GATT library. */
    void gatt_init(void)
    {
        ret_code_t err_code;
    
        err_code = nrf_ble_gatt_init(&m_gatt, gatt_evt_handler);
        APP_ERROR_CHECK(err_code);
    
        err_code = nrf_ble_gatt_att_mtu_periph_set(&m_gatt, NRF_SDH_BLE_GATT_MAX_MTU_SIZE);
        APP_ERROR_CHECK(err_code);
    }

    Change the NRF_SDH_BLE_GATT_MAX_MTU_SIZE with BLE_GATT_ATT_MTU_DEFAULT (which is 23).

    However, a certified BLE device should be able to handle MTU requests properly. If it doesn't support MTU > 23, it should just decline this request.

    If you are able to capture a sniffer trace, perhaps it reveals something.

    Best regards,

    Edvin

Related