Skip to content

Commit

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

Signed-off-by: Olivier Lesage <[email protected]>
  • Loading branch information
olivier-le-sage committed Mar 5, 2024
1 parent 300d37b commit 265a3eb
Show file tree
Hide file tree
Showing 32 changed files with 255 additions and 43 deletions.
8 changes: 5 additions & 3 deletions softdevice_controller/doc/isochronous_channels.rst
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ Parallel use of one CIS and one BIS is tested.
However, there is no absolute maximum of BISes, CISes and ACLs that can be used concurrently.
Instead, the amount of roles that can be used at the same time is limited by available memory and the on-air timings.


Tested topologies
*****************

Expand All @@ -87,6 +86,8 @@ BIS

Tested BIS topology - each arrow represents a BIS

.. _iso_parameter_selection:

Parameter selection
*******************

Expand Down Expand Up @@ -165,7 +166,7 @@ The SDU interval is configured when the CIS or BIS is created and is a constant
There are 3 modes that determine when the SDUs provided to the |controller| are sent:

Timestamps
In this mode, timestamps are added to the HCI ISO data.
In the timestamp mode, timestamps must be provided in the ``Time_Stamp`` parameter in the HCI ISO data that is provided to the controller.
This is the preferred way of providing data to the |controller| and guarantees the highest degree of control.

The timestamp must be based on the controller's timings.
Expand Down Expand Up @@ -198,7 +199,8 @@ Time of arrival
To use this mode, set the sequence number to 0 and do not add a timestamp to the HCI ISO data.

Sequence numbers
In the sequence number mode, an SDU should be provided every SDU interval, and the SDU sequence number must be increased by one for each SDU.
In the sequence number mode, a sequence number must be provided in the ``Packet_Sequence_Number`` parameter in the HCI ISO data that is provided to the controller.
When using this mode, an SDU should be provided every SDU interval, and the SDU sequence number must be increased by one for each SDU.
If SDUs are provided more than one SDU interval apart, the SDU sequence number must be increased by a matching amount.
It is not recommended to use the sequence number mode if SDUs are provided more than one SDU interval apart.

Expand Down
180 changes: 180 additions & 0 deletions softdevice_controller/doc/pic/schedule/broadcast_iso_timing.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 33 additions & 0 deletions softdevice_controller/doc/scheduling.rst
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ The following table summarizes the priorities.
| | * Scanner which is receiving an advertising packet on a secondary advertising channel |
| | * Connected Isochronous channel setup |
| | * Connected Isochronous channels that are about to time out |
| | * Isochronous Broadcaster |
| | * Synchronized Receiver in the synchronizing state |
| | * Synchronized Receiver in the synchronized state where the synchronization is about to be lost |
| | * Synchronized Receiver receiving packets in a BIG control subevent |
+-----------------------------+---------------------------------------------------------------------------------------------------+
| Third priority | * All |BLE| roles in states other than above run with this priority |
| | * MPSL Timeslot with high priority |
Expand Down Expand Up @@ -530,6 +534,7 @@ The duration of an extended advertising event depends on the mode, data length,
The |controller| will send as few secondary advertising channel packets as possible with each packet containing the maximum allowed amount of data.
The packets are sent with an AUX frame space of 330 µs.

.. _periodic_advertiser_timing:

Periodic Advertiser Timing
**************************
Expand Down Expand Up @@ -575,6 +580,34 @@ If the ACL event spacing is 10 ms and the ACL event length is set to 2.5 ms, 7.5

Connected ISO channels are scheduled interleaved with ACL timing-events.

Broadcast isochronous channels timing
*************************************

Broadcast isochronous channel timing-events are scheduled every isochronous (ISO) interval.
All subevents belonging to the same ISO group are scheduled in the same timing-event.
The duration of a BIG event depends on data length and the BIG parameters selected by the controller.
See the :ref:`iso_parameter_selection` section for more information.

Isochronous broadcaster timing-events are scheduled similarly to a Central device, meaning they are added relative to already running central link or periodic advertising timing-events.
See the :ref:`central_timing` section for more information.
The timing-events are offset from each other by :math:`\mathsf{t_{event}}`.
In the |NCS|, this is configured with the :kconfig:option:`BT_CTLR_SDC_BIG_RESERVED_TIME_US` Kconfig option, or with the vendor-specific HCI command defined by the :c:func:`sdc_hci_cmd_vs_big_reserved_time_set` function.

The reserved time allows for the associated periodic and extended advertiser, and any other periodic roles such as the :c:func:`sdc_hci_cmd_vs_qos_channel_survey_enable` function, to run.
For optimal scheduling, the periodic advertising interval and ISO interval should have a common factor, and the sum of the periodic and extended advertising timing-event lengths should be less than the BIG reserved time.
The duration of the periodic advertising event can be decreased by using the LE 2M PHY.
See the :ref:`periodic_advertiser_timing` section for more information.

The synchronized receiver may close a timing-event early in order to save energy.
It can do this if it has received all payloads in a BIG event

.. figure:: pic/schedule/broadcast_iso_timing.svg
:alt: Alt text: Broadcast ISO channels timing
:align: center
:width: 80%

Broadcast isochronous channels timing-events

Timeslot API timing
*******************

Expand Down
1 change: 0 additions & 1 deletion softdevice_controller/doc/softdevice_controller.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ Applications utilizing the |controller| library are responsible for the followin

The following peripherals are owned by the |controller| and must not be accessed directly by the application:

* ``ECB``
* ``CCM``
* ``AAR``
* ``NVMC``
Expand Down
2 changes: 1 addition & 1 deletion softdevice_controller/include/sdc.h
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,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) * 547) : 0)
#define SDC_MEM_PER_CIS(count) ((count) > 0 ? (13 + (count) * 555) : 0)

/** @brief Maximum memory required per BIG. */
#define SDC_MEM_PER_BIG(count) ((count) > 0 ? (13 + (count) * 284) : 0)
Expand Down
14 changes: 6 additions & 8 deletions softdevice_controller/include/sdc_hci_vs.h
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,9 @@ typedef __PACKED_STRUCT
{
/** @brief Assigned hardware manufacturer. Always 0x0002 indicating Nordic Semiconductor. */
uint16_t hw_platform;
/** @brief Assigned platform specific value. Set to 0x2 for nRF52, 0x3 for nRF53. */
/** @brief Assigned platform specific value. Set to 0x2 for nRF52, 0x3 for nRF53, 0x4 for
* nRF54H, 0x5 for nRF54L.
*/
uint16_t hw_variant;
/** @brief Firmware Variant. 0 indicates a standard Bluetooth controller. */
uint8_t fw_variant;
Expand Down Expand Up @@ -975,7 +977,7 @@ uint8_t sdc_hci_cmd_vs_conn_update(const sdc_hci_cmd_vs_conn_update_t * p_params
* See also: Core v5.1, Vol 6, Part B, Section 4.5.6
* - There are no conflicts with other concurrent links.
*
* A connection event cannot be extended beyond the connection interval.
* A connection event can not be extended beyond the connection interval.
*
* By default, that is after an HCI Reset, Extended Connection Events are enabled.
*
Expand Down Expand Up @@ -1465,10 +1467,6 @@ uint8_t sdc_hci_cmd_vs_min_val_of_max_acl_tx_payload_set(const sdc_hci_cmd_vs_mi
* BIS where a ISO data path is not enabled, the Controller shall return the
* error code Command Disallowed (0x0C).
*
* If the Host issues this command before an SDU has been transmitted by the
* Controller, the Controller shall return the error code Command Disallowed
* (0x0C).
*
* Event(s) generated (unless masked away):
* When the HCI_LE_Read_ISO_TX_Sync command has completed, an
* HCI_Command_Complete event shall be generated.
Expand All @@ -1488,7 +1486,7 @@ uint8_t sdc_hci_cmd_vs_iso_read_tx_timestamp(const sdc_hci_cmd_vs_iso_read_tx_ti
* This vendor specific command changes the time reserved at the end of a BIG event for other roles.
* This applies to all BIGs created after calling this command.
*
* The default value is 2500 us, but can be set to between 0 us and 4,000,000 us. Changes persist
* The default value is 1600 us, but can be set to between 0 us and 4,000,000 us. Changes persist
* after an HCI_Reset command.
*
* If the value is set such that it cannot be satisfied for a given set of BIG parameters, BIG
Expand All @@ -1515,7 +1513,7 @@ uint8_t sdc_hci_cmd_vs_big_reserved_time_set(const sdc_hci_cmd_vs_big_reserved_t
* Note, when multiple CIGs are used the user needs to ensure that the initial CIG reserves time
* for the remaining CIGs.
*
* The default value is 2000 us, but can be set to between 0 us and 4,000,000 us. Changes persist
* The default value is 1300 us, but can be set to between 0 us and 4,000,000 us. Changes persist
* after an HCI_Reset command.
*
* If the value is set such that it cannot be satisfied for a given set of CIG parameters, the
Expand Down
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
description: SoftDevice Controller
git_revision: e688010c1973a16f7a5770bc648f335d7d4228d4
ll_subversion_number: '0x2188'
git_revision: 36f0e50e876848fb02fd9f82cc32e57b91b15ced
ll_subversion_number: '0x218F'
ll_version_number: '0x0D'
timestamp: '2024-02-27T11:26:15Z'
timestamp: '2024-03-05T14:46:47Z'
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading

0 comments on commit 265a3eb

Please sign in to comment.