Hi,
I've install the throughput example (examples/ble_central_and_peripheral/experimental/ble_app_att_mtu_throughput) on an nRF52840-DK and I test it against all kind of phones to make sure the possible throughput is enough for my purposes.
I works fine against almost every Android phone except Samsung devices.
Works on:
- OnePlus 5T
- Xiaomi RedMi 8
Doesnt work against the following devices:
- Samsung Galaxy S6
- Samsung Galaxy Note 9
- Samsung Galaxy S10
Here is how I perform the test:
- I press "reset" button on the board and I get:
[00:00:00.000,061] <info> app: ATT MTU example started. [00:00:00.000,061] <info> app: Press button 3 on the board connected to the PC. [00:00:00.000,061] <info> app: Press button 4 on other board.
- I click button 3 on the board and I get:
[00:00:03.129,638] <info> app: This board will act as tester. [00:00:03.129,638] <info> app: Type 'config' to change the configuration parameters. [00:00:03.129,638] <info> app: You can use the Tab key to autocomplete your input. [00:00:03.129,638] <info> app: Type 'run' when you are ready to run the test.
- I write "run" and I get the following:
[00:00:05.399,291] <info> app: Preparing the test. [00:00:05.399,291] <info> app: Starting advertising. [00:00:05.399,475] <info> app: Starting scanning.
- I open nRF Connect on a phone and I attempt connecting to "NORDIC_ATT_MTU" .. the following happens:
a. On Samsung phones it opens a new tab on the app and fails to connect after a while ("disconnect" on upper right changes to "connect") and nRF Connect log says:
Error 8 (0x8): GATT CONN TIMEOUT
The board log shows the following:
[00:00:24.527,038] <info> app: Connected as a peripheral. [00:00:24.527,099] <info> app: Discovering GATT database... [00:00:24.527,160] <info> app: Sending PHY Update, 2 Mbps. [00:00:24.584,472] <info> app: ATT MTU exchange completed. MTU set to 247 bytes. [00:00:24.714,965] <info> app: PHY update rejected. PHY set to 1 Mbps.
b. On other devices it opens a new tab, connects to the board successfully and lets me enable notification to the proprietary service thus starting the test.
The board log shows the following:
[00:00:38.663,330] <info> app: Connected as a peripheral. [00:00:38.663,391] <info> app: Discovering GATT database... [00:00:38.663,452] <info> app: Sending PHY Update, 2 Mbps. [00:00:38.750,305] <info> app: ATT MTU exchange completed. MTU set to 247 bytes. [00:00:38.885,192] <info> app: Data length updated to 27 bytes. [00:00:39.285,766] <info> app: PHY update accepted. PHY set to 2 Mbps. [00:00:39.466,674] <info> app: PHY update accepted. PHY set to 2 Mbps. [00:00:39.825,012] <info> app: Connection interval updated: 0x6, 0x6. [00:00:39.973,876] <info> app: Connection interval updated: 0x24, 0x24.
What is causing the problem with Samsung devices ?
Is this fixable on the board side ? on the Samsung phone side ?
Is this a matter of changing settings in the Android ?
I've tested this with SDK 15.3.0 and SDK 16.0.0.
Got same results.
Thanks