Hi,
I find the smallest connection interval I can set on 52840 (and 832 as peer) is 8 units (10ms), and I am not sure if that is reasonable.
My configuration:
52832 as peripheral, 52840 as central. Both ends using same version of SDK(15.2).
PHY: 1Mbps
LF Clock: RC, 16, 2, 500ppm (for both ends)
Connection params initial setup:
#define MIN_CONN_INTERVAL MSEC_TO_UNITS(8, UNIT_1_25_MS) #define MAX_CONN_INTERVAL MSEC_TO_UNITS(12, UNIT_1_25_MS) #define SLAVE_LATENCY 0 #define CONN_SUP_TIMEOUT MSEC_TO_UNITS(1000, UNIT_10_MS)
BLE gap event length setup 52840
#ifndef NRF_SDH_BLE_GAP_DATA_LENGTH #define NRF_SDH_BLE_GAP_DATA_LENGTH 112 #endif // <o> NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. #ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT #define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 2 #endif // <o> NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. #ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT #define NRF_SDH_BLE_CENTRAL_LINK_COUNT 1 #endif // <o> NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. // <i> Maximum number of total concurrent connections using the default configuration. #ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT #define NRF_SDH_BLE_TOTAL_LINK_COUNT 3 #endif // <o> NRF_SDH_BLE_GAP_EVENT_LENGTH - GAP event length. // <i> The time set aside for this connection on every connection interval in 1.25 ms units. #ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH #define NRF_SDH_BLE_GAP_EVENT_LENGTH 2 //4 #endif // <o> NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. #ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE #define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 112 #endif
BLE gap event length setup 52832
#ifndef NRF_SDH_BLE_GAP_DATA_LENGTH
#define NRF_SDH_BLE_GAP_DATA_LENGTH 112
#endif
// <o> NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links.
#ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT
#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 2
#endif
// <o> NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links.
#ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT
#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 0
#endif
// <o> NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count.
// <i> Maximum number of total concurrent connections using the default configuration.
#ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT
#define NRF_SDH_BLE_TOTAL_LINK_COUNT 2
#endif
// <o> NRF_SDH_BLE_GAP_EVENT_LENGTH - GAP event length.
// <i> The time set aside for this connection on every connection interval in 1.25 ms units.
#ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH
#define NRF_SDH_BLE_GAP_EVENT_LENGTH 2 //4
#endif
// <o> NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size.
#ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE
#define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 112
#endif
And I set GAP event length extension using:
sd_ble_opt_set (BLE_COMMON_OPT_CONN_EVT_EXT, &ext_t);
So in real run, when 840 and 832 are connected, param updated to :
BLE_GAP_EVT_CONN_PARAM_UPDATE: min_intval: 9, max_interval: 9,
slave_latency: 0, sup_timeout: 40
I was trying to get shorter connection interval, however I found that 8 unit (10ms) is the shortest I can use. If I set min_interval to 6 or 7 units, then when init gap params sd_ble_gap_ppcp_set(&gap_conn_params) will return error code 7(invalid param), until I change min_interval back to 8 units. And even I set min_interval to 8, the actually interval connected is 9 (11.25ms).
I did some manually calculation, seems 7.5ms should be fine with above param setting. But why I can not set to it in real run?
Thanks.