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

How to achieve higher throughput in Piconet using Nordic UART Service?

I have created a Piconet using nrf52840(s140). The 'Central' application was built on ble_app_uart_c example, which is now successfully connecting up to 7 peripherals. The Peripherals are also using NUS service to send data with(ble_nus_string_send) to Central.

I am generating some random data in peripherals. Data ranges are from 12kB/s to 10B/s in different peripheral device. I want to send total 15kB/s of data from 7 peripherals to Central.

My problem is- ALL the peripherals are only successfully sending data while I am sending limited amount of data. The central can receive upto 1kB/s in total, but the connection drops while I want to introduce a peripheral with a higher data rate(more than 1kB/s).The Central cannot maintain that connection in that case any longer.

I kept all the Connection Parameters same as examples. My question is- How I can achieve higher throughput in that system? Please feel free to ask additional questions. Thanks in advance.

PS: I am not sending/receiving any data via UART.

Parents
  • No, I don't want to increase throughput. Even my total requirement is only 125 kbps from seven peripherals in total.But each peripheral should have different data-rate. They are: 96 kbps, 16 kbps, 6 kbps, 4 kbps, 2 kbps, 600 bps, 400 bps(total 125 kbps). And I need very fixed amount of data to be sent.

    What I meant by 'control data-rate' that, I want very specific data-rate. Currently... the data-rate is fluctuating a lot, because it is always waiting for the queue to be free in cases of multiple connection. Specially the peripheral with highest data-rate is never stable(always fluctuating between 70-110 kbps). Since I could already send data with a lot higher-rate in single connection. I am not sure why it is not possible to queue more notification with lower rates? The problem is because I am not choosing the right connection interval? Or I should change the way I am using the function to send data?

    FYI: For sending data, I am calling this function with a delay. For and example, for sending 96 kbps( 12 bytes/s): there is a 10ms delay and data length is 120 bytes(char array).

Reply
  • No, I don't want to increase throughput. Even my total requirement is only 125 kbps from seven peripherals in total.But each peripheral should have different data-rate. They are: 96 kbps, 16 kbps, 6 kbps, 4 kbps, 2 kbps, 600 bps, 400 bps(total 125 kbps). And I need very fixed amount of data to be sent.

    What I meant by 'control data-rate' that, I want very specific data-rate. Currently... the data-rate is fluctuating a lot, because it is always waiting for the queue to be free in cases of multiple connection. Specially the peripheral with highest data-rate is never stable(always fluctuating between 70-110 kbps). Since I could already send data with a lot higher-rate in single connection. I am not sure why it is not possible to queue more notification with lower rates? The problem is because I am not choosing the right connection interval? Or I should change the way I am using the function to send data?

    FYI: For sending data, I am calling this function with a delay. For and example, for sending 96 kbps( 12 bytes/s): there is a 10ms delay and data length is 120 bytes(char array).

Children
No Data
Related