Channel Sounding Not Working with nRF Toolbox App and nRF54L15-DK

I'm trying to experiment with Bluetooth Channel Sounding using the nRF Toolbox App with an nRF54L15-DK. The app is running on a Google Pixel 10 running Android 16 QPR3 Beta 2. On the DK, I'm using the channel_sounding_ras_reflector app from NCS v3.1.1. These are the only modifications I've made:

  • CONFIG_BT_BONDABLE=y
  • CONFIG_BT_CTLR_SDC_CS_MAX_ANTENNA_PATHS=2

I have not made any modifications to the nRF Toolbox app.

The app fails to show any ranging data and gets stuck at "Initiating ranging..."

I have an RFCreations airtrace and can see nRF DK is rejecting the Channel Sounding Start command from the Pixel:

I also see some cases where the Channel Sounding Start appears to succeed:

Here is the CS Configuration being used:

Devices:
Central : 44:A2:8F:A0:48:76, Resolvable private
Peripheral : D2:42:A2:F3:A6:39, Static (Nordic CS Reflector)

"C2P, decrypted, #160509, LE-C: LL_CS_CONFIG_REQ":
Opcode : 0x30 (LL_CS_CONFIG_REQ)
LL_CS_CONFIG_REQ payload:
Config ID : 0x00 (0)
State : 0x1 (Configuration is enabled)
ChM : "0x15555555555554555554 (Used: 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, Unused: 0-1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23-25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77-79)"
Channel Map Repetition : 0x01 (1)
Main Mode : 0x02 (Mode-2)
Sub Mode : 0xFF (Mode None)
Main Mode Min Steps : 0x00 (0)
Main Mode Max Steps : 0x00 (0)
Main Mode Repetition : 0x00 (0)
Mode 0 Steps : 0x03 (3)
CS SYNC PHY:
LE 1M PHY : 0x1 (Used)
LE 2M PHY : 0x0 (Not Used)
LE Coded PHY : 0x0 (Not Used)
RFU (2M 2BT or S=2 Coded in other PDUs) : 0x0 (Not Used)
RFU : 0x0 (0)

RTT Type : 0x0 (Sync AA only)
Role : 0x0 (Initiator)
IPT : 0x0 (Not Required)
RFU : 0x0 (Not Required)
ChSel : 0x0 (Channel Selection Algorithm 3b)
Ch3c Shape : 0x0 (Hat shape)
Ch3c Jump : 0x03 (Jump 3)
T IP1 : 0x05 (60 µs)
T IP2 : 0x01 (20 µs)
T FCS : 0x06 (80 µs)
T PM : 0x00 (10 µs)
RFU : 0x00 (0)


"P2C, decrypted, #160577, LE-C: LL_CS_CONFIG_RSP":
Opcode : 0x31 (LL_CS_CONFIG_RSP)
LL_CS_CONFIG_RSP payload:
Config ID : 0x00 (0)
RFU : 0x0 (0)

This Reflector DK works fine with another nRF54L15 DK programmed as the Initiator. Here is a diff between the failing config and the succeeding config (using the command "diff CS_Config--nRF54_Succeed CS_Config--Pixel_Fail > CS_Config_Diff.txt"):

1,2c1,2
<  "C2P then P2C, decrypted, Channel Sounding Configuration, 2 packets (#2588, #2616)":
<     "C2P then P2C, decrypted, Channel Sounding Configuration, 2 packets (#2588, #2616)"   : 
---
>  "C2P then P2C, decrypted, Channel Sounding Configuration, 2 packets (#160509, #160577)":
>     "C2P then P2C, decrypted, Channel Sounding Configuration, 2 packets (#160509, #160577)": 
4,5c4,5
<         Central                                                                           : D2:42:A2:F3:A6:39, Static
<         Peripheral                                                                        : CE:E9:DF:96:7C:F8, Static (CS RFLCT 1)
---
>         Central                                                                           : 44:A2:8F:A0:48:76, Resolvable private
>         Peripheral                                                                        : D2:42:A2:F3:A6:39, Static (Nordic CS Reflector)
7c7
<     "C2P, decrypted, #2588, LE-C: LL_CS_CONFIG_REQ":
---
>     "C2P, decrypted, #160509, LE-C: LL_CS_CONFIG_REQ":
12,13c12,13
<             ChM                                                                           : "0x1FFFFFFFFFFFFC7FFFFC (Used: 2-22, 26-76, Unused: 0-1, 23-25, 77-79)"
<             Channel Map Repetition                                                        : 0x03 (3)
---
>             ChM                                                                           : "0x15555555555554555554 (Used: 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, Unused: 0-1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23-25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77-79)"
>             Channel Map Repetition                                                        : 0x01 (1)
15,17c15,17
<             Sub Mode                                                                      : 0x01 (Mode-1)
<             Main Mode Min Steps                                                           : 0x02 (2)
<             Main Mode Max Steps                                                           : 0x05 (5)
---
>             Sub Mode                                                                      : 0xFF (Mode None)
>             Main Mode Min Steps                                                           : 0x00 (0)
>             Main Mode Max Steps                                                           : 0x00 (0)
33c33
<             Ch3c Jump                                                                     : 0x00 (Unknown)
---
>             Ch3c Jump                                                                     : 0x03 (Jump 3)
36c36
<             T FCS                                                                         : 0x05 (60 µs)
---
>             T FCS                                                                         : 0x06 (80 µs)
41c41
<     "P2C, decrypted, #2616, LE-C: LL_CS_CONFIG_RSP":
---
>     "P2C, decrypted, #160577, LE-C: LL_CS_CONFIG_RSP":

Can you help explain what is going on here?

Thanks,
Chris

Parents
  • Hmm, so the differences between our setups is 

    • Pixel 9 Pro vs. Pixel 10
    • Android version. I have the regular latest Android 16 version, as the Beta isn't required anymore.
    • DK version. I only have PCA10156 DK v1.0.0 on my side. I'll ask around to see if I can get my hands on an older version to confirm.

    I will also try to find someone with a Pixel 9 to confirm they have gotten it up and running there. And as I said earlier, this issue is what I have seen when either having the DK too close to the phone when initiating ranging, the antenna paths/number is set incorrectly, or if the bonding information not up-to-date.

    Do you have any logging information from the nRF54L15 DK if you open a terminal to get log info from the nRF54L15. Unfortunately the nRF Toolbox doesn't have too much useful logging by default.

    Best regards,

    Simon

Reply
  • Hmm, so the differences between our setups is 

    • Pixel 9 Pro vs. Pixel 10
    • Android version. I have the regular latest Android 16 version, as the Beta isn't required anymore.
    • DK version. I only have PCA10156 DK v1.0.0 on my side. I'll ask around to see if I can get my hands on an older version to confirm.

    I will also try to find someone with a Pixel 9 to confirm they have gotten it up and running there. And as I said earlier, this issue is what I have seen when either having the DK too close to the phone when initiating ranging, the antenna paths/number is set incorrectly, or if the bonding information not up-to-date.

    Do you have any logging information from the nRF54L15 DK if you open a terminal to get log info from the nRF54L15. Unfortunately the nRF Toolbox doesn't have too much useful logging by default.

    Best regards,

    Simon

Children
  • Thanks, Simon.

    I also have a Pixel 10 and have so far seen the same behavior with it. I will try removing it from the Beta program to see if it will revert to regular Android 16, and then try again and get back to you.

    Here is an example log from the DK (In this instance, the app was stuck on "Initiating ranging..."):

    *** Booting nRF Connect SDK v3.1.1-e2a97fe2578a ***
    *** Using Zephyr OS v4.1.99-ff8f0c579eeb ***
    I: Starting Channel Sounding Reflector Sample
    I: SoftDevice Controller build revision: 
    I: fc de 41 eb a2 d1 42 24 |..A...B$
    I: 00 b5 f8 57 9f ac 9d 9e |...W....
    I: aa c9 b4 34             |...4    
    I: HW Platform: Nordic Semiconductor (0x0002)
    I: HW Variant: nRF54Lx (0x0005)
    I: Firmware: Standard Bluetooth controller (0x00) Version 252.16862 Build 1121034987
    I: HCI transport: SDC
    I: Identity: D2:42:A2:F3:A6:39 (random)
    I: HCI: version 6.1 (0x0f) revision 0x3069, manufacturer 0x0059
    I: LMP: version 6.1 (0x0f) subver 0x3069
    I: Connected to 46:54:CC:6B:3B:60 (random) (err 0x00)
    I: SC LTK: 0x0b67696dfd0177707293b66b3179b556
    I: CS capability exchange completed.
    I: CS config creation complete. ID: 0
    I: CS security enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.
    I: CS procedures enabled.

    Cheers,
    Chris

  • I still haven't had any luck getting my hands on the v0.9.3 DK, and haven't reproduced this on my end. One more thing you can try is to set the tone_antenna_config_selection = BT_LE_CS_TONE_ANTENNA_CONFIGURATION_A1_B2 in your reflector main.c file.

    I was also told there were some connection issues to Android that have been addressed in the latest nRF Connect SDK main branch: https://github.com/nrfconnect/sdk-nrf 

    I tested that on my end on Friday and that also works fine on my end.

    Best regards,

    Simon

  • Thanks, Simon.

    Okay, I've got it working now. The key was to move from Android 16 QPR Beta 3 to the latest regular/production Android 16. This solved the problem on both my Pixel 10 and Pixel 9 Pro.

    Thanks again for all the help.

    Best regards,
    Chris

Related