Hi,
The final design we are working on is composed of 8 peripherals notifying (every 80ms or 160ms) to 1 central.
Packet data size is 141 bytes and depending on rate configured by application these packets are output at 80 or 160 ms.
Often, we compare information from sniffer nRF v2.01 wireshark file and from output of Central device, and some packets are lost from several peripherals.
We supposed, the configuration values are not properly tuned to these requirements, mainly connection interval and event length for both rates.
Below are listed current configuration we have applied to devices.
All devices are NRF52832 with S132 v5.0 SDK14.2 (based on mBed v5.12.4).
Central Connection parameters for final design
===================================
Data Packet Length Extension enabled
Connection Event Extension enabled
PHY 2M
ATT MTU = 144 bytes
NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 0
NRF_SDH_BLE_CENTRAL_LINK_COUNT 8 // n
NRF_SDH_BLE_GAP_EVENT_LENGTH 6 // 7.5ms
scan interval = 140 ms
scan window = 90 ms
scan timeout = 3000 ms
After connection, update conn parameters to:
min Connection Interval = 80 ms or 160 ms // 10 * n + scan window or 20 * n + scan window;
max Connection Interval = 80 ms or 160 ms // scan window = 0, no scan after all devices connected
slave latency = 0ms
supervision timeout = 6000 ms
Central enable notification at once for all peripherals simultaneously.
Central only receive packets from peripherals, not sending (almost) any data to them
Central LL_LENGTH_REQ (from sniffer, confirmed 2M PHY and MTU size is 148 bytes)
=====================
Max Tx/Rx octets : 148
Max Tx/Rx time : 1296us (at 2M PHY should be 648us, it isn't ?!)
Peripheral Connection parameters (same for all) for final design
================================================
Data Packet Length Extension enabled
Connection Event Extension enabled
ATT MTU = 144 bytes
NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 1
NRF_SDH_BLE_CENTRAL_LINK_COUNT 0
NRF_SDH_BLE_GAP_EVENT_LENGTH 6 // 7.5ms
PPCP (0x2A04)
min Connection Interval = 100 ms
max Connection Interval = 100 ms
slave latency = 0ms
supervision timeout = 6000 ms
For this request, we changed configuration to work with only 2 peripherals and 1 central although the results are very similar to the final design.
For 2 peripherals and 1 central, see files attached.
Configuration has been changed following parameters:
Central Connection parameters
========================
Data Packet Length Extension enabled
Connection Event Extension enabled
PHY 2M
ATT MTU = 42 bytes
NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 0
NRF_SDH_BLE_CENTRAL_LINK_COUNT 2 // n
NRF_SDH_BLE_GAP_EVENT_LENGTH 2 // 2.5ms
scan interval = 140 ms
scan window = 90 ms
scan timeout = 3000 ms
After connection, update conn parameters to:
min Connection Interval = 10 ms or 20 ms // 10 * n + scan window or 20 * n + scan window;
max Connection Interval = 10 ms or 20 ms // scan window = 0, no scan after all devices connected
slave latency = 0ms
supervision timeout = 6000 ms
Central enable notification at once for all peripherals simultaneously.
Central only receive packets from peripherals, not sending (almost) any data to them
Central LL_LENGTH_REQ (from sniffer, confirmed 2M PHY and MTU size is 46 bytes)
=====================
Max Tx/Rx octets : 46
Max Tx/Rx time : 480us (at 2M PHY should be 240us, it isn't ?!)
Peripheral Connection parameters (same for both)
======================================
Data Packet Length Extension enabled
Connection Event Extension enabled
ATT MTU = 46 bytes
NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 1
NRF_SDH_BLE_CENTRAL_LINK_COUNT 0
NRF_SDH_BLE_GAP_EVENT_LENGTH 2 // 2.5ms
Looking at wireshark files, we see sometimes that master send several empty packets and there is a lack of data from peripherals.
Any help with this issue will be very appreciated.
Thank you very much for your time.