How to send multiple packets per connection interval in BLE connection?

Hi,
I want to know about the subject.
I have two RSL10. One is implemented “ble_central_client_bond”, the other is implemented “ble_peripheral_server_bond”.
I changed connection interval to 100 ms, CS_VALUE_MAX_LENGTH to 512 and added MTU exchange to 512.
I captured notification of custom service which defined in “app_customss.c” using a sniffer.
A notification is sent in three packets.
But according to captured data, only one packet was sent in a connection interval.
When I used Android BLE app as central, three packets were send in a connection interval.
So I think that I need to change something in ble_central_client_bond code but I don’t know what should change.
Please give me some advice.
Best regards.

Hi,

According your description, it seems that the Data Length Extension is not configured properly. Large Notification will be broken into smaller chunks that will be sent in sequence to reconstruct the entire notification value.

To properly make use of the Data Length Extension, the following steps and configurations must be followed:

  1. Set the appropriate parameters to support the Data Length Extension in the GAPM Configuration Command (max_mtu = 0x200, max_mps = 0x200, sugg_max_tx_octets = 0xfb). Note that our samples usually use these values by default.

  2. Use the GATT_EXC_MTU_CMD to configure the MTU within the Stack, if you haven’t already implemented this.

  3. Use the GAPC_SET_LE_PKT_SIZE_CMD to configure the Data Length Extension feature within the controller.

  4. (Optional) Use the GAPC_SET_PHY_CMD to configure the Data Rate to be 2 mbps. This is not required, but makes a smaller Connection Interval possible for larger data packets at the expense of power consumption.

Please refer to sample application peripheral_server_UART , provided in the RSL10 Software CMSIS Pack. It makes use of the Data Length Extension feature, so these configurations and parameters can be investigated further there.

Thank you for using our Community Forum.

1 Like

Thank you for your advice.

I referred to sample application “peripheral_server_UART” and modified “ble_central_client_bond” and “ble_peripheral_server_bond”.
Data Length Extension and PHY were configured properly.
I succeeded send multiple packets per connection interval.
But throughput rate was slower than expected. (about 216 kbps/s in my experiment)
I have two questions.

  1. What is the maximum throughput of RSL10 SiP ?
    Some website says logical maximum throughput is about 1400
    kbps. Is this possible ?

  2. Is there a sample project that can transfer data at maximum throughput over BLE ?

Best regards.

Hi,

  1. The data throughput could reach around 600 kbps to 700 kbps with 2 Mbps feature ( configurable by GAPC_SET_PHY_CMD ), data extension and payload (251 bytes).

  2. You can use our sample projects peripheral_server_uart and central_client_uart to evaluate and use SEGGER RTT for output to show the throughput. For example like this:
    image

Thank you for using our Community Forum.

Thank you for your reply.
I tried your recommendations using peripheral_server_uart and central_client_uart. But throughput was not faster.
I changed peripheral_server_uart to send 5 notification packets when RSL10 received UART data. Send UART commands in ‘central_client_uart’ were comment out.
I attached captured data.
Only 2 packets were sent in a connection interval. (Interval = 400ms)

Table 30 in RSL10_firmware_reference says that RSL10 can send 8 packets per connection interval.
I think chapter 9.3.3.3 in RSL10_hardware_reference means that CS-RXTHR defines number of packets per connection interval. (Is my understanding correct ?)

How to change CS-RXTHR ?
I changed LLD_RX_IRQ_THRES but number of packets was not changed.

Best regards.

Hi,

Please note that CS-RXTHR is related to UART configuration and UART throughput. Throughput around 600 kbps to 700 kbps, mentioned in previous post, is related to BLE throughput, e.g. from RSL10 BLE to another RSL10 BLE. That does not include UART interface. You can adjust the UART configuration to make sure it can send/read the BLE data as soon as possible.

Thank you for using our Community Forum.

Hi,
Thank you for your reply.
I will try to adjust UART configuration.

Hi,

You are welcome.

Thank you for using our Community Forum.

Hi,
I want to confirm this point.

Is the most number of packets per connection interval eight when RSL10 works as both master and slave ?
Can I increase it ?

Hi,

The RSL10 can support maximally 8 packets per connection interval. This value can’t be increased. In real world, it is hard to achieve this value.
Please note that it also depends on central side as well. If central side does not support 8 packets per connection interval, then in the real connection, it can’t be reached 8 packets per connection interval.

Thank you for using our Community Forum.

I see.
Thank you for your reply.

Hi,

You are welcome.

Thank you for using our Community Forum.

Hi,
In my experiment, the data throughput could only reach around 450 kbps to 550 kbps.
If you don’t mind please upload the projects you used for measuring throughput(master and slave).
I want to isolate the causes of slower throughput rate.
Best regards.

Hi,

Unfortunately, there is no sample project for previous data for reference. However, the peripheral_server_uart and central_client_uart was tested and max throughput value should be between 500 Kbps to 600 Kbps. So, your 550 Kbps is in range and should be correct.

Thank you for using our Community Forum.