Changing tx power has no effect under Zephyr

Hello
I don't see any change in RSSI with different TX power values under Zephyr. 1.9.1

It used to work with Nordic SDK 3.2.0  (see table below)
The HCI  API in Zephyr  that is used to set TX power does not return any errors and query reports the saved tx power, but there is no measurable RSSI difference

API used

bt_hci_cmd_send_sync(BT_HCI_OP_VS_WRITE_TX_POWER_LEVEL,...)
to write and 
bt_hci_cmd_send_sync(BT_HCI_OP_VS_READ_TX_POWER_LEVEL,...) 
to read
The functions return no errors
Under Nordic SK 3.2.0 the  following RSSI was reported at 1m 

TX Power 

Measured Power
(1 M RSSI -dBM)

Max,Average

0 (default)

55,61

8

52,54

7

52,54

6

52,55

5

52,56

4

53,57

3

53,59

2

53,60

-4

60,60

-8

63,62

-12

68,65

-16

73,69

-20

76,72

-40

Not detected,Not detected

In Zephyr it stays the same, around -55 regardless of TX power setting

Any ideas?

Thanks

  • The sample does work.

    NOTE 

    The sample proj.conf has 

    CONFIG_BT_CTLR_ADVANCED_FEATURES enabled. That gives a warning that a 
    CONFIG_BT_LL_SW_SPLIT dependency is missing
    But it builds and works with and without  CONFIG_BT_LL_SW_SPLIT 
    The problem is somewhere else. Our program uses mesh. I'll investigate and update.
    If you have any pointers that would be appreciated.
    Question
    What's the advantage of using ( or not using ) SoftDevice Controller vs Zephyr BT stack ( CONFIG_BT_LL_SW_SPLIT  =y)?
    Thanks
  • UPDATE
    The issue was due to the fact that my application has

    CONFIG_BT_EXT_ADV_MAX_ADV_SET=2 as it needs 2 adv sets - one for mesh and one for beacon advertising
    However the code that set the tx power only updated tx power in the first adv set
    struct bt_hci_cp_vs_write_tx_power_level *cp;
    cp->handle = sys_cpu_to_le16(0);
    So the second adv set ( which is used for beacon advertising ) was never updated.
    cp->handle = sys_cpu_to_le16(1); does the trick
     
    Thanks for help!
  • Hi,

    I am happy to see you solved the main issue, through addressing both advertising sets.

    When it comes to Bluetooth Controller, the SoftDevice Controller (SDC) is our proprietary BLE controller based on the link layer of our SoftDevice BLE stack. The SoftDevice Controller is the preferred controller to use with nRF Connect SDK. It is specially tailored for nRF SoCs, and this is also the controller we qualify with the Bluetooth SIG for use with our SDK, resulting in a QDID you can use for the qualification of your product. If using the Zephyr Controller then you must do the corresponding qualification yourself or rely on a third party having already done so. Regardless of which controller you use, the host layer will be the Zephyr BLE host which we also qualify for nRF Connect SDK releases.

    Regards,
    Terje

Related