Hello-
Recently, we optimized our BLE4 transfer settings. With the same device, firmware, and payload, we get better transfer rates on iPhone5,6,7 than iPhone 8/X. On all systems the parameter settings requested by peripheral are accepted by iPhone.
Has anyone seen this problem? I am aware that BLE5 supports "data length extension" and is capable of potentially much higher transfer rates, but this would require (for us) an SDK upgrade and some re-architecting, so I wanted to exhaust the BLE4 options first.
On iPhone5S,6, and 7 we get 6-7KB/s.
On iPhone8/X and variants we max out at ~2.7KB/s.
The relevant current transfer speed settings are as follows:
nr52
SDK is 14.2.0, SD132
gap_conn_params.min_conn_interval = MSEC_TO_UNITS(15, UNIT_1_25_MS); /**< Minimum acceptable connection interval - how fast peripheral/central exchange data.*/;
gap_conn_params.max_conn_interval = MSEC_TO_UNITS(15, UNIT_1_25_MS); /**< Maximum acceptable connection interval (1 second). */
NRF_SDH_BLE_GAP_EVENT_LENGTH 24 //this is 30ms
I believe the GAP param change request is acknowledged on both sets of phones because in all cases my BLE handler hits this event:
case BLE_GAP_EVT_CONN_PARAM_UPDATE:
//and in this message I check (and report over UART) this result:
p_ble_evt->evt.gap_evt.params.conn_param_update.conn_params.max_conn_interval * 125 / 100);
This reports as 15ms for both iPhone5/6/7 where I see the speedboost and on 8/X, where I do not.