Skip to content

Commit

Permalink
softdevice_controller: rev 11f5e5d895cf2408403e58341e8c07f0baa5b4ef
Browse files Browse the repository at this point in the history
CHANGELOG.rst contains the list of changes.

Signed-off-by: Yuxuan Cai <[email protected]>
  • Loading branch information
yuxCai committed Dec 18, 2024
1 parent 536f70d commit 9643f73
Show file tree
Hide file tree
Showing 37 changed files with 508 additions and 149 deletions.
21 changes: 21 additions & 0 deletions softdevice_controller/CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,33 @@ Changelog

All the notable changes to this project are documented on this page.

Main branch
***********

Changes
=======

* The CIS or BIS sink now generate lost SDUs immediately when scheduling conflicts occur instead of after receiving the next valid SDU. (DRGN-24062)

nRF Connect SDK v2.9.0
**********************

Added
=====

* Production support for scanning and initiating at the same time. (DRGN-23824)
* :ref:`Experimental <nrf:software_maturity>` support for Channel Sounding step mode-3.
* :ref:`Experimental <nrf:software_maturity>` support for Channel Sounding multiple antenna elements.
* :ref:`Experimental <nrf:software_maturity>` support for the following Channel Sounding HCI commands:

* LE CS Write Cached Remote Supported Capabilities
* LE CS Write Cached Remote FAE Table
* LE CS Remove Config

Changes
=======

* The vendor-specific Set Connection Event Trigger HCI command has been removed. (DRGN-23981)

Bug fixes
=========
Expand All @@ -25,6 +45,7 @@ Bug fixes
The issue would only happen when the scanner received a long extended advertising packet that did not fit into a single advertising report and the scanning was stopped explicitly or through a timeout. (DRGN-23966)
* Fixed an issue where the CIS TX Power was set according to the LE Power Control state of the previous CIS in a CIG. (DRGN-21721)
* Fixed an issue where the BIS receiver running with FEM could enable the radio at the wrong time, causing the receiver to drop packets and lose sync. (DRGN-23891)
* Fixed an issue where the controller would raise Number Of Completed Packets events for a disconnected CIS. (DRGN-23869)

nRF Connect SDK v2.8.0
**********************
Expand Down
115 changes: 103 additions & 12 deletions softdevice_controller/doc/channel_sounding.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,37 +11,128 @@ LE Channel Sounding (CS) is a feature defined in the `Bluetooth Core Specificati
CS allows two devices in a connection to perform measurements of their communication channel, both the round trip time (RTT), and the phase and magnitude (as in-phase and quadrature (IQ) values) can be measured.
The RTT and IQ values can then be sent to an application to calculate the distance between devices.

Support status
**************

Channel Sounding currently has :ref:`Experimental <nrf:software_maturity>` support in the |controller| for the nRF54L15 SoC.
CS can be enabled by building with the :kconfig:option:`CONFIG_BT_CTLR_CHANNEL_SOUNDING` Kconfig option enabled.

Developing with CS
******************

Currently, the :zephyr:code-sample:`bluetooth_hci_uart` sample is recommended to get started with Channel Sounding.
Build the sample with the following command to enable the CS feature:
Command support
---------------

.. code-block:: console
west build -b nrf54l15dk/nrf54l15/cpuapp --pristine -- -DCONFIG_BT_CTLR_CHANNEL_SOUNDING=y
You can use the sample to run the following supported HCI commands over UART:
The following LE CS commands are supported:

* LE CS Read Local Supported Capabilities
* LE CS Read Remote Supported Capabilities
* LE CS Write Cached Remote Supported Capabilities
* LE CS Security Enable
* LE CS Set Default Settings
* LE CS Read Remote FAE Table
* LE CS Write Cached Remote FAE Table
* LE CS Create Config
* LE CS Remove Config
* LE CS Set Channel Classification
* LE CS Set Procedure Parameters
* LE CS Procedure Enable
* LE CS Test
* LE CS Test End

Experimental Limitations
************************
Supported capabilities
----------------------

The |controller| currently has the following supported capabilities:

* One CS Configuration per ACL connection.
* Indefinite Procedure Repeats.
* Four Antennas and Four Antenna Paths.
* CS Reflector and CS Initiator Roles.
* Step modes 1, 2, and 3.
* 150 ns time-of-flight precision
* RTT with AA-only and 32, 64, 96, and 128 bits random payloads
* 1M and 2M CS Sync Phy
* No Transmitter Frequency Actuation Error

The supported timing values for the |controller| are as follows:

* A T_IP1 of 60 µs or greater.
* A T_IP2 of 30 µs or greater.
* A T_FCS of 60 µs or greater.
* A T_PM of 10 µs or greater.
* A T_SW of 10 µs.

Multiple antennas support
-------------------------

Currently, the |controller| supports multiple antennas with a fixed pinout for the multi-antenna switch.
In order to use the |controller| with multiple antennas, an external GPIO controlled multi-antenna switch needs to be set up with the following truth table:

.. list-table:: Antenna control for multi-antenna switching.
:widths: 30 5 5 5 5
:header-rows: 1

* - Active Antenna:
- **P1.11**
- **P1.12**
- **P1.13**
- **P1.14**
* - Antenna 1
- 1
- 0
- 0
- 0
* - Antenna 2
- 0
- 1
- 0
- 0
* - Antenna 3
- 0
- 0
- 1
- 0
* - Antenna 4
- 0
- 0
- 0
- 1

.. note::
Currently, the |controller| needs a maximum of 4 µs to trigger an antenna switch within the T_SW period.
This means that any multi-antenna switch with the correct pinout must switch within 6 µs to maintain 10 µs T_SW.

Experimental limitations
------------------------

Currently, the following limitations apply to the :ref:`Experimental <nrf:software_maturity>` support of Channel Sounding:

* :ref:`radio coexistence <nrf:ug_radio_coex>` and :ref:`front-end modules <mpsl_fem>` are not supported.
* Only one subevent per event is supported in CS.

Developing with CS
******************

The following samples are recommended for getting started with Channel Sounding:

1. Using the Ranging Service samples:

* :ref:`Bluetooth: Channel Sounding Initiator with Ranging Requestor <nrf:channel_sounding_ras_initiator>`.
* :ref:`Bluetooth: Channel Sounding Reflector with Ranging Responder <nrf:channel_sounding_ras_reflector>`.

2. Using the :zephyr:code-sample:`bluetooth_hci_uart` sample and running HCI commands over UART.

.. note::
To build the :zephyr:code-sample:`bluetooth_hci_uart` sample with Channel Sounding enabled, set :kconfig:option:`CONFIG_BT_CTLR_CHANNEL_SOUNDING` to ``y``.

.. code-block:: console
west build -b nrf54l15dk/nrf54l15/cpuapp --pristine -- -DCONFIG_BT_CTLR_CHANNEL_SOUNDING=y
Optional CS Kconfigs
--------------------

Use the following Kconfig options to enable the desired optional CS features:

* Set :kconfig:option:`BT_CTLR_SDC_CS_STEP_MODE3` to ``y`` to enable Channel Sounding step mode-3 support.

* Set :kconfig:option:`BT_CTLR_SDC_CS_MAX_ANTENNA_PATHS` to a value between ``2`` and ``4`` to enable Channel Sounding multiple antenna paths support.
* Set :kconfig:option:`BT_CTLR_SDC_CS_NUM_ANTENNAS` to a value between ``2`` and :kconfig:option:`BT_CTLR_SDC_CS_MAX_ANTENNA_PATHS` to enable Channel Sounding multiple antennas support.
14 changes: 7 additions & 7 deletions softdevice_controller/include/sdc.h
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,8 @@ extern "C" {
*/

/** @brief Auxiliary defines, not to be used outside of this file. */
#define __MEM_MINIMAL_CENTRAL_LINK_SIZE 811
#define __MEM_MINIMAL_PERIPHERAL_LINK_SIZE 915
#define __MEM_MINIMAL_CENTRAL_LINK_SIZE 795
#define __MEM_MINIMAL_PERIPHERAL_LINK_SIZE 891
#define __MEM_TX_BUFFER_OVERHEAD_SIZE 14
#define __MEM_RX_BUFFER_OVERHEAD_SIZE 14

Expand Down Expand Up @@ -194,7 +194,7 @@ extern "C" {
__MEM_ADDITIONAL_LINK_SIZE(tx_size, rx_size, tx_count, rx_count))

/** Maximum shared memory required for central links. */
#define SDC_MEM_CENTRAL_LINKS_SHARED 17
#define SDC_MEM_CENTRAL_LINKS_SHARED 21

/** Maximum shared memory required for peripheral links. */
#define SDC_MEM_PERIPHERAL_LINKS_SHARED 17
Expand All @@ -209,7 +209,7 @@ extern "C" {
*
* @param[in] num_links Total number of peripheral and central links supported.
*/
#define SDC_MEM_SUBRATING(num_links) (11 + (num_links) * 19)
#define SDC_MEM_SUBRATING(num_links) ((num_links) > 0 ? (12 + (num_links) * 20) : 0)

/** @brief Maximum memory required when supporting periodic advertising sync transfer.
*
Expand Down Expand Up @@ -285,7 +285,6 @@ extern "C" {
#define __MEM_MINIMAL_PERIODIC_ADV_RSP_SET_SIZE_WITHOUT_RX (166)
#define __MEM_FOR_PERIODIC_ADV_RSP_FAILURE_REPORTING (224)
#define __MEM_PER_ISO_PDU_POOL(count) ((count) > 0 ? (16 + (count) * 288) : 0)
#define __MEM_PER_ISO_TX_HCI_BUFFER(count) ((count) > 0 ? (12 + (count) * 300) : 0)

/** Memory required per periodic advertising with responses set.
*
Expand All @@ -307,7 +306,7 @@ extern "C" {
#define SDC_MEM_PER_CIG(count) ((count) > 0 ? (13 + (count) * 123) : 0)

/** @brief Maximum memory required per CIS. Buffer and CIG memory comes in addition. */
#define SDC_MEM_PER_CIS(count) ((count) > 0 ? (13 + (count) * 548) : 0)
#define SDC_MEM_PER_CIS(count) ((count) > 0 ? (13 + (count) * 556) : 0)

/** @brief Maximum memory required per BIG. */
#define SDC_MEM_PER_BIG(count) ((count) > 0 ? (13 + (count) * 284) : 0)
Expand Down Expand Up @@ -352,7 +351,7 @@ extern "C" {
*
* @param[in] count Total number of links (central + peripheral).
*/
#define SDC_MEM_CS_SETUP_PHASE_LINKS(count) ((count) > 0 ? (11 + (count)*339) : 0)
#define SDC_MEM_CS_SETUP_PHASE_LINKS(count) ((count) > 0 ? (11 + (count) * 359) : 0)

/** @} end of sdc_mem_defines */

Expand Down Expand Up @@ -561,6 +560,7 @@ typedef struct
bool step_mode3_supported;
} sdc_cfg_cs_cfg_t;


/** @brief SoftDevice Controller configuration. */
typedef union
{
Expand Down
Loading

0 comments on commit 9643f73

Please sign in to comment.