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

Windows 10 throughput / connection window clashes

I'm facing a problem with a product I'm developing. The problematic setup is as follows:

  • Two nRF52832 peripherals (S132 v6.0.0), each notifying on two characteristics in two separate services (~100 Hz).
  • A Windows 10 central using native C++ SDK bindings to discover and connect to the peripherals.
  • The connection interval is configured to min 7ms and max 15ms on the peripheral. I can monitor that the negotiated interval is 15ms.
  • GATT MTU: 64 bytes
  • GAP data length: 27 bytes (just tried updating to 64 to match the MTU but that didn't change anything).

The problem is that I can connect one peripheral and receive notifications at the correct rate. As soon as I connect another peripheral, the first one starts failing to send notifications (sd_ble_gatts_hvx returns with NRF_ERROR_RESOURCES due to too many notifications queued). This happens even when the other peripheral is not sending anything, just connected to the central. The newly connected peripheral has no problem with sending notifications at a correct rate.

We don't observe this problem on other platforms (tested on macOS and Android), so I don't think it's an OTA throughput issue. Could it have something to do with how the Windows central spaces out the connection intervals/windows? Can the newly connected peripheral just be "stealing" the windows from the other peripheral? Is there something we can do on the peripheral side to prevent this from happening?

And just to make it extra special, on some rare occasions it just seems to work fine. Maybe once in every 100 connection attempts or so.

Open to any and all ideas...

Parents
  • @daviddedwin Thanks for the reply. The machine I'm testing on is running the latest Windows build (10.0.19041) and according to the Device Manager the Bluetooth adapter driver is "up to date", whatever that means.

    This is a CSR USB dongle (USB\VID_0A12&PID_0001&REV_8891), but I experience this issue on my laptop as well. I'm running macOS Catalina on the same hardware and don't experience this issue.

    I'd really like to keep it at the lowest possible value. I can see that the only connection parameter update received from the Windows central on the nRF52832 sets it to 15ms.

    Also, disabling WiFi is not a solution (while I understand trying to limit the variables in this equation). We are nowhere near any thresholds for BLE bandwidth/throughput, and this setup works fine on another OS on the same hardware.

    I'd love to hear any input you might have on this subject. If there's anything we can do to improve the performance since it's very sub optimal as-is.

  • Hi,

    I would recommend that you capture and upload sniffer trace of the on-air activity between the peripheral and central devices, both for the single-peripheral and dual-peripheral setups. That will provide much information about what happens and could help figure out the root cause.

    Best regards,
    Jørgen

Reply Children
No Data
Related