Softdevice Controller: TX with 100% duty cycle scanning in v2.3

After updating to the softdevice controller included with NCS v2.3.0 (nrfxlib 6d0f58448fae164cfa4d28c494d6bddf5d0d0224), I have noticed what appears to be a behaviour change.

Previously, when configuring Zephyr to scan on Bluetooth with 100% duty cycle (interval == window), extended advertising packets that were scheduled for transmission by my application would be received on a secondary device reliably. After updating, I am seeing approximately 0% of these packets (maybe 1 packet every minutes at 1Hz transmission). If I update my scanning window from 100% to 99%, the secondary device is again receiving the vast majority of the packets. In both cases, I receive no errors from the Bluetooth stack and all expected events are generated (TX done callback called with num_sent == 1).

Has there been some internal change to TX or RX scheduling in v2.3 that could account for this change in behaviour?
Perhaps related to the experimental PAwR or PAST support added?

Parents
  • Hi Jordan, 

    I can see that when the length of the advertising data changed and if there is only one advertising event per set, I do see that we having issue with that.
    I will have to check internally with the team to see why that happens. 


    But I do see that if the number of advertising event is increased to 2 for example, I can see the different advertising data with different length. Or if length of the advertising set doesn't change then I don't see any problem. 

    Could you give some more information about your application ? What's the requirement for the advertising data ? Maybe periodic advertising is a better solution ? 

  • Our application is a general framework that is intended for communicating arbitrary binary payloads at arbitrary times.
    Therefore the size of each "packet" is more or less random, as is the desired timing.

    Simply changing the number of advertising events to 2 is not a good solution from our perspective as it doubles both the power consumption and the RF congestion.

Reply Children
  • Hi Jordan, 
    I got the information from the team that: 

    The actual number of started advertising events is however reduced if the advertiser accepts a CONN_REQ/CONN_IND. The amount of packets that appear on air may also be affected if an advertising event is prematurely closed due to for instance an coexistence interface.

    It however doesn't explain why changing the size of the advertising set causing the first advertising event not being sent. I will check with them a little bit more. 

    Advertising data is not intended to be used as a way of sending arbitrary data by design. It's more of sending repeated data or for establishing connection. You may have to deal with packet loss due to collision because they don't have any way to sync the communication. In addition, power consumption can be high because your device(s) has to scan all the time. 

    Could you give more information about how many devices in the network and the topology here ? Maybe a mesh network or the new PAwR (periodic advertising with response) could fit your application .
  • The actual number of started advertising events is however reduced if the advertiser accepts a CONN_REQ/CONN_IND. The amount of packets that appear on air may also be affected if an advertising event is prematurely closed due to for instance an coexistence interface.

    This is obviously not what we are seeing here. No devices are connecting to the advertiser, there is no other interface that could be triggering co-existence. The sample application works until NCS v2.2.

    Advertising data is not intended to be used as a way of sending arbitrary data by design. It's more of sending repeated data or for establishing connection. You may have to deal with packet loss due to collision because they don't have any way to sync the communication. In addition, power consumption can be high because your device(s) has to scan all the time.

    We are well aware of the limitations of advertising data, and we do not use it expecting 100% packet throughput. It is a cheap mechanism to broadcast device state in an unstructured, mobile network that can also be observed by phones. I am unaware of any other Bluetooth mechanism that would allow receiving data from 100's of devices in a 1 second listen window.

    Bluetooth mesh appears to be a sinking ship (even ignoring provisioning hell).
    PAwR looks to be amazing for getting data back to a gateway device, but little help for peer-to-peer communication.

  • Hi Jordan, 
    We are getting deeper inspection about the issue and will get back to you when we have any update. There could be something wrong with the scheduling of larger adv packet on the first event. 

Related