NRF52840 Peripheral NUS with BIS receiver

Hi Nordic Team,

I am working on implementing synchronized sensor sampling on multiple Bluetooth devices that are externally triggered. To achieve this, I have combined the Peripheral NUS example with the ISO Time Sync example.

Currently, the data throughput with only the NUS enabled is around 900 kbps. However, once I add the ISO Sync (BIS) receiver, the throughput drops to 250 kbps. I’ve noticed that enabling the ISO Sync Receiver in the NUS Peripheral example, with just the configurations CONFIG_BT_OBSERVER=y and CONFIG_BT_ISO_SYNC_RECEIVER=y (without any additional code), also results in a throughput drop to 250 kbps.

Is this expected behaviour? If not, could you please provide guidance on how to proceed?

My primary objective is to asynchronously trigger multiple sensors to sample data simultaneously, as high precision is essential. Furthermore, each sensor should be capable of transmitting data at a rate of 600 kbps.
I have created a BIS transmitter with an SDU interval of 1 second, and I expected not to experience a significant drop in throughput. However, it seems I must be doing something wrong.

My setup consists of two NRF52840DK boards, and I am using NCS 3.0.0.

Thank you for your assistance!

BR,

Nash

Parents
  • Hello,

    The expert who could assist you with this thread isn't available today (long weekend for many in Norway) and is most likely back on Monday.

    Currently, the data throughput with only the NUS enabled is around 900 kbps. However, once I add the ISO Sync (BIS) receiver, the throughput drops to 250 kbps. I’ve noticed that enabling the ISO Sync Receiver in the NUS Peripheral example, with just the configurations CONFIG_BT_OBSERVER=y and CONFIG_BT_ISO_SYNC_RECEIVER=y (without any additional code), also results in a throughput drop to 250 kbps.

    I took a quick look at this, and my initial hypothesis is that this is related to radio time. The ISO sync BIS receiver needs to scan for the ISO packets, which reduces the time the device can tranceive data with the connected device. I'll ask for a second optinion and test this early next week.

    Best regards,

    Maria

  • Hello Maria,

    Thank you for your feedback. I would appreciate it if you could keep me updated when you have more information.

    Best regards,

    Nash

  • Dear Maria,

    I hope this message finds you well. Have you received any feedback from your colleagues? Is the data throughput drop I’m experiencing expected? Additionally, could you suggest any alternatives for synchronous wireless triggering of multiple sensors?

    Thank you!

    Best regards,

    Nash

  • Hi Nash, 

    Apologies for the delay. I had some days of unplanned absence early last week, so I did not get to run the tests as I planned. 

    Could you please share the generated .config files for both cases of NUS peripheral that you have built? Upload them as files (.config or .txt if .config is not allowed) or use the Insert->Code functionality. 

    Best regards,

    Maria

Reply
  • Hi Nash, 

    Apologies for the delay. I had some days of unplanned absence early last week, so I did not get to run the tests as I planned. 

    Could you please share the generated .config files for both cases of NUS peripheral that you have built? Upload them as files (.config or .txt if .config is not allowed) or use the Insert->Code functionality. 

    Best regards,

    Maria

Children
  • Hi Maria,

    I’m glad to have you back!

    In the meantime, I’ve been investigating further and found that when ISO channels are enabled, the data length for both Rx and Tx does not update as expected (BT_GAP_DATA_LEN). They remain at the default value of 27 bytes instead of changing to the desired value of 251 bytes. I’ve attached the peripheral_uart project for you to test if needed.

    This project has been modified to initiate data throughput measurement whenever a character is received via NUS. It does not include any code related to the ISO channels. Using the nRF Connect app on your phone, you can connect to the nRF52840DK, subscribe to Tx notifications, and send any character to the Rx characteristic. You can observe the parameters negotiation and their values in RTT. When CONFIG_BT_ISO_SYNC_RECEIVER=y and CONFIG_BT_OBSERVER=y are configured in prj.conf without any additional code, the data length does not update, resulting in reduced data throughput.

    An extension of this issue occurs when both NUS peripheral and the BIS receiver are configured. When the receiver is not synced with the BIS transmitter, the situation remains the same. However, when the BIS receiver is connected and synced with the BIS transmitter, the application crashes during data length setting (exchange) in the bt_hci_cmd_send_sync function, which I am currently investigating.

    I am attaching two generated .config files: one for the peripheral_uart use case and another for the bis_nus use case.

    7115.Files.zip

    I believe this comes down to the question: what parameters should be used to enable data length settings (BT_GAP_DATA_LEN)  when ISO channels are in use?

    I appreciate your help in advance.
    Best regards,

    Nash

Related