Concurrent channel sounding procedures

Hi,

I am trying to create a trilateration system with 3 initiators and 1 reflector (Hopefully multiple reflectors in the future) on the nrf54l15. The channel sounding with range requestor sample code demonstrates a one to one connection, but I modified the reflector logic so it keeps up to 4 connections in an array. When I run channel sounding with just one to one connection everything works perfectly. When I try to connect two initiators they both connect but usually only one initiator is able to receive the distance data, the other one just keeps displaying "tried to parse empty data", but once in a while they would both receive data, and sometimes they both don't get data. I am not sure what the issue really is. I thought about the reflector not having enough buffer but I turned it up already in the config file. Could this be a hardware issue? Is it just interference or maybe the sample code just cannot handle concurrent connections? I only saw one other post about concurrent connections and they only got it in sequential order. Any advice is appreciated as I cannot really progress at this point, thanks!

Parents
  • Hi

    What HW are you using here, nRF54L15 DKs on both end or custom boards? Are you doing the ranging concurrently, not sequentially, in your application, correct? I know sequential measurements should work, but that ranging multiple devices concurrently has not been tested much on our end yet, so the support we can provide there is rather limited.

    What kind of HW issues are you having in mind? If you'd like I can forward this to our developers to see if they have any clues to why this could be. Would it be possible to add a snippet to show how you handle the concurrent ranging on the reflector side on your end, as I imagine you have a way of differentiating the initiators you're trying to do ranging from.

    Best regards,

    Simon

Reply
  • Hi

    What HW are you using here, nRF54L15 DKs on both end or custom boards? Are you doing the ranging concurrently, not sequentially, in your application, correct? I know sequential measurements should work, but that ranging multiple devices concurrently has not been tested much on our end yet, so the support we can provide there is rather limited.

    What kind of HW issues are you having in mind? If you'd like I can forward this to our developers to see if they have any clues to why this could be. Would it be possible to add a snippet to show how you handle the concurrent ranging on the reflector side on your end, as I imagine you have a way of differentiating the initiators you're trying to do ranging from.

    Best regards,

    Simon

Children
  • Hi,

    Yes I am using the NRF54l15 dk for both the initiators and the reflector. I am running the procedure concurrently right now.

    static int find_free_slot(void)
    {
        for (int i = 0; i < MAX_CONN; i++) {
            if (connections[i] == NULL) {
                return i;
            }
        }
        return -1;
    }
    
    static int find_conn_index(struct bt_conn *conn)
    {
        for (int i = 0; i < MAX_CONN; i++) {
            if (connections[i] == conn) {
                return i;
            }
        }
        return -1;
    }
    
    static void connected_cb(struct bt_conn *conn, uint8_t err)
    {
        char addr[BT_ADDR_LE_STR_LEN];
        bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));
        LOG_INF("Connected to %s (err 0x%02X)", addr, err);
    
        if (err) {
            LOG_ERR("Connection failed (err 0x%02X)", err);
            bt_conn_unref(conn);
            return;
        }
    
        int idx = find_free_slot();  // Find an empty spot
        if (idx == -1) {
            LOG_WRN("No free connection slots");
            bt_conn_disconnect(conn, BT_HCI_ERR_CONN_LIMIT_EXCEEDED);
            bt_conn_unref(conn);
            return;
        }
    
        connections[idx] = bt_conn_ref(conn);
        cs_settings_applied[idx] = false;
        k_sem_give(&conn_sems[idx]);
        dk_set_led_on(CON_STATUS_LED);
    
        start_advertising();
    }

    I am using an array to keep track of pointers to each connection. Each one is differentiated by their index in the array.

    The issue I have in mind is that maybe it is because there are multiple Bluetooth connections that the signals might interfere with each other. Either that or maybe channel sounding takes up too much memory for a single reflector. Thank you so much for your help.

  • I don't think there should be signal interference, as devices use slightly different frequencies for the ranging AFAIK, nor do I think Channel Sounding uses too much memory to have multiple connections.

    I think the main issue is that the sample simply isn't designed to doo concurrent sampling at the moment, and this is not something we have tested as of yet.

    Best regards,

    Simon

Related