Galaxy Tab A8 fails to connect properly, while Galaxy Phone S10 works fine

Galaxy Tab A8 connects, but then disconnects after a burst of approx 600 "Central_0x2a208f55 Peripheral_0x2a208f55 ATT 37 Sent Read By Group Type Request, Primary Service, Handles: 0x0001..0xffff"

Galaxy S10 works fine

Bot are running the same mobile app.

I have attached 2 Wireshark capture files, one for Samsung Galaxy Tab A8, the other for Samsung Galaxy S10 

We use ncs 2.6.1 on our nRF52840 hardware

SamsungS10.pcapngsamsungA8.pcapng

  • Hi

    At least in the nRF Connect for Android app you can set the supported PHYs in the settings of the app (Settings -> Scanner -> Physical layer) to 1MBPS if you'd like.

    Best regards,

    Simon

  • That does not help, as we anyhow end up in 2MBPS as soon as connection is done

    I also tried this macro, but still end up in 2MBPS  

    <!-- 
    	Transmitter and Receiver PHY attributes accept the fofflowing values and logical OR operator ('|'):
        - LE_1M - legacy LE 1M PHY (default), 
        - LE_2M - double speed, Bluetooth 5 feature,
        - LE_CODED - long range, Bluetooth 5 feature.
    
        The options for the Transmitter LE Coded PHY are:
        - NO_PREFERRED - No preferred coding when transmitting on the LE Coded PHY (default),
        - S2 - Prefer the S=2 coding to be used when transmitting on the LE Coded PHY,
        - S8 - Prefer the S=8 coding to be used when transmitting on the LE Coded PHY. 
    
        Example: <set-preferred-phy tx="LE_2M | LE_CODED" rx="LE_1M" />
     -->
    <macro name="SetPreferredPhy_1M" icon="PLAY">
        <set-preferred-phy tx="LE_1M" rx="LE_1M" />
    </macro>
    

    nRFConnect log: 

    nRF Connect, 2024-10-07
    99 (DB:22:BE:33:59:30)
    D	11:14:09.205	gatt.close()
    D	11:14:09.209	wait(200)
    V	11:14:09.410	Connecting to DB:22:BE:33:59:30...
    D	11:14:09.411	gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
    D	11:14:10.240	[Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
    I	11:14:10.240	Connected to DB:22:BE:33:59:30
    D	11:14:10.246	[Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
    V	11:14:10.252	Discovering services...
    D	11:14:10.252	gatt.discoverServices()
    D	11:14:10.361	[Callback] Services discovered with status: 0
    I	11:14:10.361	Services discovered
    V	11:14:10.368	Generic Attribute (0x1801)
    - Service Changed [I] (0x2A05)
       Client Characteristic Configuration (0x2902)
    - Client Supported Features [R W] (0x2B29)
    - Database Hash [R] (0x2B2A)
    Generic Access (0x1800)
    - Device Name [R W] (0x2A00)
    - Appearance [R] (0x2A01)
    - Peripheral Preferred Connection Parameters [R] (0x2A04)
    Battery Service (0x180F)
    - Battery Level [N R] (0x2A19)
       Client Characteristic Configuration (0x2902)
    Device Information (0x180A)
    - Model Number String [R] (0x2A24)
    - Manufacturer Name String [R] (0x2A29)
    - Serial Number String [R] (0x2A25)
    - Firmware Revision String [R] (0x2A26)
    - Hardware Revision String [R] (0x2A27)
    XXXX Service (000001b0-d746-4092-84e7-dad34863fe4a)
    - Status [N R] (000001b2-d746-4092-84e7-dad34863fe4a)
       Client Characteristic Configuration (0x2902)
    - AAAA [W] (000001b1-d746-4092-84e7-dad34863fe4a)
    YYYY Service (000001e0-d746-4092-84e7-dad34863fe4a)
    - BBBB [R W] (000001e1-d746-4092-84e7-dad34863fe4a)
    - Unknown Characteristic [R] (000001ec-d746-4092-84e7-dad34863fe4a)
    Nordic UART Service (6e400001-b5a3-f393-e0a9-e50e24dcca9e)
    - TX Characteristic [N] (6e400003-b5a3-f393-e0a9-e50e24dcca9e)
       Client Characteristic Configuration (0x2902)
    - RX Characteristic [W WNR] (6e400002-b5a3-f393-e0a9-e50e24dcca9e)
    SMP Service (8d53dc1d-1db7-4cd3-868b-8a527460aa84)
    - SMP Characteristic [N WNR] (da2e7828-fbce-4e01-ae9e-261174997c48)
       Client Characteristic Configuration (0x2902)
    D	11:14:10.369	gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
    D	11:14:10.371	gatt.setCharacteristicNotification(00002a19-0000-1000-8000-00805f9b34fb, true)
    D	11:14:10.373	gatt.setCharacteristicNotification(000001b2-d746-4092-84e7-dad34863fe4a, true)
    D	11:14:10.375	gatt.setCharacteristicNotification(6e400003-b5a3-f393-e0a9-e50e24dcca9e, true)
    I	11:14:10.628	PHY updated (TX: LE 2M, RX: LE 2M)
    V	11:14:14.558	Requesting preferred PHYs...
    D	11:14:14.558	gatt.setPreferredPhy(LE 1M, LE 1M, coding option = No preferred)
    I	11:14:14.723	PHY updated (TX: LE 2M, RX: LE 2M)
    I	11:14:15.127	Connection parameters updated (interval: 37.5ms, latency: 0, timeout: 420ms)
    

    Seems like setPreferredPhy is just a recommendation, and depends on local and remote controllers behaviour

    https://developer.android.com/reference/android/bluetooth/BluetoothGatt#setPreferredPhy(int,%20int,%20int) 

  • Hi

    Ah, of course. Sorry about that. The preferred PHY is indeed only a suggestion and will be negotiated upon a connection. AFAIK there is no way to hard set the used PHY to automatically set o 1MBPS, but you can change the PHY manually after connecting to the device by going to the connection settings and changing it from there.

    Best regards,

    Simon

  • That doesn't work, as the peripheral sets it back to 2MBPS, due to CONFIG_BT_AUTO_PHY_UPDATE as default,

    which is 'y'

    Sniffer log attached try-1mbit-phy-from-nrfconnect.pcapng

  • After a quick chat with one of our Android developers there is nothing we can do in the Android BLE library to ignore this auto PHY updates, as the Android stack will adhere to these if 2MBPS is supported.

    Best regards,

    Simon

Related