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

BLE performance suffers when a second peripheral is connected

Hi there,

We're using SDK 16.0.0_98a98e2.  Our setup is a PC running BLE Central connecting to 2 nRF 52840 running as BLE peripherals.  We use the provided BLE UART example as the basis of our code. 

                                             BLE Central on PC

                                                    /                \

                                                 /                     \

                                               /                         \

                                    (A) nRF52840           (B) nRF52840

                                   BLE Peripheral         BLE Peripheral


We need each BLE peripheral to stream about 50 Hz of 244 bytes per packet (ie the max packet size afaik).  So, per second: 50 * 244 bytes * 8 bits/bytes = 97.6 Kbps per nRF 52840.
When only 1 peripheral -say A- is connected, it can stream around 50 Hz as expected.  But, once the second peripheral -say, B- is connected, the performance of A's streaming slowly degrades down to 40 Hz or sometimes less than 40 Hz.  And, this is even before B starts any streaming.  

First question, why is that? Is it because B has some sort of continuous handshake transactions going on with the Central to maintain the connection? 

Second question, is it possible that Central talks to A in one set of BLE channels and Central talks to B in a different set of BLE channels? We're thinking it might reduce the interference and thus improve the streaming performance of both A & B.  

Or, please let us know if you have other suggestions to reach our desired throughput (max latency required is 100 ms).

By the way, on few occasions we can see both A & B streaming 'simultaneously' at 50 Hz.  But, it's not true simultaneity because they actually take turn in sending.  

Thanks,
Cecylia

Parents
  • Hi again Cecylia

    I agree that making a BLE central using an nRF52 DK will be easier to get up and running, so that should make things easier for you. There should not be any problems combining the BLE Multi-link and BLE Uart examples, so that seems logical.

    You can identify a specific peripheral by I.E. setting the scan filter to scan for addresses instead of names by calling SCAN_ADDR_FILTER in the nrf_ble_scan_filter_set() function to separate the names at least. How you handle this once the devices are connected is entirely up to you, whether you want them to do something different or not.

    Best regards,

    Simon

Reply
  • Hi again Cecylia

    I agree that making a BLE central using an nRF52 DK will be easier to get up and running, so that should make things easier for you. There should not be any problems combining the BLE Multi-link and BLE Uart examples, so that seems logical.

    You can identify a specific peripheral by I.E. setting the scan filter to scan for addresses instead of names by calling SCAN_ADDR_FILTER in the nrf_ble_scan_filter_set() function to separate the names at least. How you handle this once the devices are connected is entirely up to you, whether you want them to do something different or not.

    Best regards,

    Simon

Children
No Data
Related