Hello,
I'm attempting to test the maximum throughput of the nRF52810 using S112 v6.0.0.
The Soft Device Spec v2.0 for S112 implies in Section 15.7 that there is a mechanism for changing the event length of a connection in order to increase the PDU size to 251 bytes. And section 10.4 states:
The SoftDevice supports per connection bandwidth configuration by giving the application control over
the connection interval and the length of the connection event. By default, connections are set to have an
event length of 3.75 ms. This is sufficient for three packet pairs in a connection event with the default 27
octet-long Link Layer payload for Data Channel PDUs.
The connection bandwidth can be increased by enabling Connection Event Length Extension. See
Connection timing with Connection Event Length Extension on page 60 for more information. Enabling
Connection Event Length Extension does not increase the size of the SoftDevice memory pools.
However, I do not see any mechanism for enabling Connection Event Length Extension or changing the PDU size. For example, S132 has the Data Length Update procedure timing diagram and the functions and events required to support this: sd_ble_gap_data_length_update(), BLE_GAP_EVT_DATA_LENGTH_UPDATE, BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST. But S112 v6.0.0 has no timing diagram and none of these events/functions.
In soft device initialization, I configure the Soft Device to change the Max MTU size and to increase the connection event length:
// Configure the maximum ATT MTU size memset(&ble_cfg, 0, sizeof(ble_cfg)); ble_cfg.conn_cfg.conn_cfg_tag = 1; ble_cfg.conn_cfg.params.gatt_conn_cfg.att_mtu = 247; errorCode = sd_ble_cfg_set(BLE_CONN_CFG_GATT, &ble_cfg, ram_start); APP_ERROR_CHECK(errorCode); // Configure the maximum event length memset(&ble_cfg, 0x00, sizeof(ble_cfg)); ble_cfg.conn_cfg.conn_cfg_tag = 1; ble_cfg.conn_cfg.params.gap_conn_cfg.event_length = MSEC_TO_UNITS(15, UNIT_1_25_MS); ble_cfg.conn_cfg.params.gap_conn_cfg.conn_count = 1; errorCode = sd_ble_cfg_set(BLE_CONN_CFG_GAP, &ble_cfg, ram_start); APP_ERROR_CHECK(errorCode);
But when my central issues the LL_LENGTH_REQ command, the S112 peripheral responds with LL_UNKNOWN_RSP and all communication packets are the base PDU size of 27.
Is there some other setting I'm missing in order to turn on the Connection Length Extension or allow the S112 to respond to the LL_UNKNOWN_RSP request?
edit:
I was able to enable connection event extension, but it does not appear to have any affect on the PDU size
// Enable connection event extension
ble_opt_t opt;
memset(&opt, 0x00, sizeof(opt));
opt.common_opt.conn_evt_ext.enable = true;
errorCode = sd_ble_opt_set(BLE_COMMON_OPT_CONN_EVT_EXT, &opt);
APP_ERROR_CHECK(errorCode);