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

What happens when Bluetooth SoftDevice is scanning and collision takes place. [SDK16, SD140 v7.0.1]

I am scanning for advertisements and in scan_evt_handler() in the case NRF_BLE_SCAN_EVT_NOT_FOUND, I am printing the packet received using  NRF_LOG_INFO().

I have also implemented a UUID filter and Softdevice does filters the relevant UUIDs.

There are two observations,

1. Beacon transmitting UUID @100ms is not always filtered by the SoftDevice S140. [1 out of 4 is filtered by SD and NRF_BLE_SCAN_EVT_FILTER_MATCH case processed]

2. In the case NRF_BLE_SCAN_EVT_NOT_FOUND while printing the packet using p_adv_report->data.p_data, Incomplete UUID is seen

Base UUID: adf400013db14f7abb04382f31288809

Print seen: 0201061aff4c000215adf400013db14f7abb04382f310000000001

What could be the cause? Is it due to collision?

Thank you,

MO

  • Could you try the following:

    • Open the nRF Connect app for mobile and check the UUID there. Is it equal to the Base UUID?
    • In the start of nrf_ble_scan_on_adv_report, could you try to store p_adv_report->data.p_data in a variable (not the pointer, but the actual value) and check the value of UUID
    • You could also try to sniff the BLE data to see what is actually being sent. The nRF Sniffer could be used along with an nRF5x DK or dongle

    Best regards,

    Simon

  • Thank you for your suggestions. Please find my comments below,

    • Open the nRF Connect app for mobile and check the UUID there. Is it equal to the Base UUID?
      • Using the nRF Connect app for mobile I did see UUID is equal to Base UUID. But this is not the problem. I am also able to see base UUID in my code as well (not always according to beacon advertising interval). I don't know what the app does for incomplete adv packets

    • In the start of nrf_ble_scan_on_adv_report, could you try to store p_adv_report->data.p_data in a variable (not the pointer, but the actual value) and check the value of UUID
      • Yes right at the beginning of nrf_ble_scan_on_adv_report I did check the data with the help of break point and memory view. The problem was the same.

    • You could also try to sniff the BLE data to see what is actually being sent. The nRF Sniffer could be used along with an nRF5x DK or dongle
      • I dont have them both available at the moment.
  • Okay, I don't understand how this might occur, could you upload your sample, then I can try to reproduce your behavior and figure out what may cause this. I can make the ticket private if you would like to.

    Best regards,

    Simon

  • Hi Simon,

    Thank you for your reply. I will be sharing the code shortly. Can you confirm that softdevice SD140 (observer role), filtering UUID always reports every advertising iBeacon with relevant UUID. Meaning our broadcaster transmitting at 100ms will always be filtered successfully and NRF_BLE_SCAN_EVT_FILTER_MATCH will execute @100ms.

    What happens in a noisy environment with over 1024 broadcasters in the vicinity? Will the packet be received or dropped due to collision in the advertisement channels.

    Best Regards,

    MO

  • Take a look at this answer given by RK, which provides you a way of calculating the probability of collisions between N broadcaster.

    Regarding your initial problem, if you haven't resolved it yet could you upload your project? Make sure to use relative paths in your project and that it runs out of the box.

    Best regards,

    Simon

Related