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

SoftDevice configuration for greater throughput using notification and multiple connections

Hi!

We are using the nRF52840 and nRF52832 for a product for which good data throughput over BLE is required. (We have picked the S140 and S132).

We send these data using notification only (max 20 byets). (It is a two way data transfer)

We try not to use the ATT_MTU negotiation/feature or the DLE, since we aim for a solution that will work equally well for all devices regardless of stack implementation and DLE support.

  • we might be supporting old Androids and iOSs in the future that do not support these.

I have read that it is possible for a peer (both central and peripheral) to transmit several notifications during a single connection interval.

I have several questions regarding this behavior and for the correct configuration of the SoftDevice. (We will be using S140 and S132).

  • I have read that I must change the amount of BLE packet buffers in the stack to allow greater buffering of packet in stack, and thereby use of this feature.
    • Where can I find this config setting?
    • Is it possible that it is not included in my sdk_config.h file?
    • Can it be one of these?
      • NRF_SDH_BLE_GAP_DATA_LENGTH
      • NRF_SDH_BLE_GAP_EVENT_LENGTH
      • NRF_SDH_BLE_GATT_MAX_MTU_SIZE
  • We will be having several connections ongoing most of the time. How will the stack (softdevice) handle this situation?
    • Can the packets be send to the stack randomly by the different underlying services that send notification packets?
      • Or do we have to burst transmit like this:
        • (peer_1, peer_1, peer_1, peer_1, peer_1,    peer_2, peer_2, peer_2, peer_2, peer_2,    peer_1, peer_1, peer_1, peer_1, peer_1,    ...)
  • What will happen if all the buffered packet in stack is for peer_2, but the next upcoming connection event is for peer_1? (and we have packets to tx for both peers, but happen to buffer the wrong packets in the stack)
    • I expect that the stack wont' be able to send any packets!
      • Could the solution be just to avoid filling the stack buffers with the packets of just one connection.
  • How is this different for a peripheral relative to a central device?

    Our final goal is to send several notifications (6 or higher) in both directions (or just one direction) during a single connection interval with each notification being max 20 bytes in length.

    I understand that indications cannot be buffered like this and needs to be send one-by-one for every other connection interval.

    I have read this, but can't tell how to set the buffer size for how many packets the softdevice should be able to accept.

    https://devzone.nordicsemi.com/f/nordic-q-a/34192/how-to-calculate-nrf_sdh_ble_gap_event_length-in-sdk15-for-determinded-nrf_sdh_ble_gatt_max_mtu_size

    https://devzone.nordicsemi.com/f/nordic-q-a/32581/questions-regarding-ble-throughput

    Great thanks. Your time is highly appreciated.

    Best regards

    Related