This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

S112 v6.0.0 Connection Length Extension and LL_LENGTH_REQ

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);

  • Hello,

    Sorry for the late reply.

     

    The S112 SoftDevice does not support DLE, Data Length Extention, but it should support Connection Event Length Extention, meaning that you can have a larger PDU, so that you can send several packets on the same connection interval.

     

    The DLE part of S112 is mentioned in the release notes of the S112 softdevice, which you can download here.

     

    Best regards,

    Edvin

Related