From a0e284ee73303f1a443ff5947b29658237b5392a Mon Sep 17 00:00:00 2001 From: silabs-GregS Date: Tue, 23 Jun 2026 11:23:20 +0300 Subject: [PATCH 1/5] docs: Update struct name (#11) Replace sl_bt_bluetooth_ll_priorities with sl_btctrl_ll_priorities in radio-task-priorities.md. --- sld272-bluetooth-system-performance/radio-task-priorities.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sld272-bluetooth-system-performance/radio-task-priorities.md b/sld272-bluetooth-system-performance/radio-task-priorities.md index a1c8a61..8ed3760 100644 --- a/sld272-bluetooth-system-performance/radio-task-priorities.md +++ b/sld272-bluetooth-system-performance/radio-task-priorities.md @@ -53,10 +53,10 @@ For more information about Bluetooth priority handling, see [Dynamic Multiprotoc The default priorities are chosen so that they can be used well in most use cases. However, default priorities may not always provide an optimal solution. For example, if in your application it is not important to connect quickly but it is very important to send data in every connection interval via an already established connection, you can lower the priority of the connection initiation process. -The minimum and maximum priorities of each task type can be defined in a `sl_bt_bluetooth_ll_priorities` structure (find the definition of the structure in sl_bt_ll_config.h). To overwrite the default priorities, add a new line to `SL_BT_CONFIG_DEFAULT` in sl_bluetooth_config.h, as you see below: +The minimum and maximum priorities of each task type can be defined in a `sl_btctrl_ll_priorities` structure (find the definition of the structure in sl_bt_ll_config.h). To overwrite the default priorities, add a new line to `SL_BT_CONFIG_DEFAULT` in sl_bluetooth_config.h, as you see below: ```c -sl_bt_bluetooth_ll_priorities ll_priorities = { 191, 143, //scan_min, scan_max +sl_btctrl_ll_priorities ll_priorities = { 191, 143, //scan_min, scan_max 175, 127, //adv_min, adv_max 135, 0, //conn_min, conn_max 55, 15, //init_min, init_max From 668e804c79c7dfbf3454fc7965ce6638f8c41961 Mon Sep 17 00:00:00 2001 From: attila-hegedus-silabs <103418158+attila-hegedus-silabs@users.noreply.github.com> Date: Tue, 23 Jun 2026 10:25:11 +0200 Subject: [PATCH 2/5] Increased BGAPI payload size (#3) * Increased BGAPI payload size * Update sld129-bluetooth-fundamentals-system-performance/throughput.md Co-authored-by: silabs-vm --------- Co-authored-by: silabs-vm --- .../resources/bgapi_max_payload_size.png | Bin 0 -> 7059 bytes .../throughput.md | 17 +++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 sld129-bluetooth-fundamentals-system-performance/resources/bgapi_max_payload_size.png diff --git a/sld129-bluetooth-fundamentals-system-performance/resources/bgapi_max_payload_size.png b/sld129-bluetooth-fundamentals-system-performance/resources/bgapi_max_payload_size.png new file mode 100644 index 0000000000000000000000000000000000000000..b19ad2acd825120898fe84ecaeb03488927ea2bb GIT binary patch literal 7059 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 EKL*_M!~g&Q literal 0 HcmV?d00001 diff --git a/sld129-bluetooth-fundamentals-system-performance/throughput.md b/sld129-bluetooth-fundamentals-system-performance/throughput.md index b858d86..929dfdc 100644 --- a/sld129-bluetooth-fundamentals-system-performance/throughput.md +++ b/sld129-bluetooth-fundamentals-system-performance/throughput.md @@ -65,9 +65,18 @@ Maximum Transfer Unit (MTU) specifies the number of bytes that can be sent withi |1.0.x|23| |2.0.x|58| |2.1.x|126| -|2.3.x or later|250| +|2.3.x|250| +|10.0.x or later|512 or higher| -Note that the MTU size depends on both sides. For example, if the remote device supports a smaller MTU size, the smaller MTU size will be used. The higher the MTU size, the higher the throughput. Twice the MTU size doubles the throughput. +Note that the MTU size depends on the capabilities of both devices. If the remote device supports a smaller MTU size, the smaller MTU size is used. In general, a larger MTU size allows higher throughput. For example, if the MTU size is doubled, throughput may be double. In the latest SDKs, the maximum ATT MTU is, in practice, limited only by the configured BGAPI payload size. + +With a sufficiently large BGAPI payload size, the full characteristic value can be read or written in a single operation. The maximum characteristic value length that can be transferred in one operation is `SL_BGAPI_MAX_PAYLOAD_SIZE - 7` bytes. Therefore, to support the full 512‑byte length, SL_BGAPI_MAX_PAYLOAD_SIZE must be set to 520 bytes. + +This value can be configured in the project `config/sl_bgapi_config.h` header file or through the user interface for SoC/NCP projects under **Software Components > Bluetooth > Bluetooth Host (Stack) > BGAPI Protocol**: + +![Unacknowledged data transfer](resources/bgapi_max_payload_size.png?darkModeUrl=resources/bgapi_max_payload_size.png) + +In case of NCP setups, it is recommended to match up larger BGAPI payloads with higher UART speeds to avoid any congestion/packet loss. ### Attribute Protocol (ATT) Operation @@ -86,12 +95,12 @@ MTU size includes the GATT header, which has a variable length and means that th For acknowledged operations, the maximum throughput can be achieved with the following parameters: - Connection interval: **7.5 ms** -- MTU size: **250 bytes** +- MTU size: **513 bytes** - Attribute protocol operation used: **Read** This results in a maximum throughput of -**1000 ms / (2 * 7.5 ms) * (250 - 1) bytes = 16,600 bytes/sec = 132,800 bps** +**1000 ms / (2 * 7.5 ms) * (513 - 1) bytes = 34,133 bytes/sec = 273,066 bps** ## Throughput Calculation for Unacknowledged Data Transfer From 9393032ab1f7bc58cd817fec35b470bf7ee77119 Mon Sep 17 00:00:00 2001 From: silabs-GregS Date: Tue, 23 Jun 2026 11:26:23 +0300 Subject: [PATCH 3/5] docs: Update struct name (#10) Replace sl_bt_bluetooth_ll_priorities with sl_btctrl_ll_priorities in 04-configuring-bluetooth-stack-and-wireless-gecko-device.md. --- ...configuring-bluetooth-stack-and-wireless-gecko-device.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sld649-bluetooth-c-soc-dev-guide-sdk-v9x/04-configuring-bluetooth-stack-and-wireless-gecko-device.md b/sld649-bluetooth-c-soc-dev-guide-sdk-v9x/04-configuring-bluetooth-stack-and-wireless-gecko-device.md index 52cf75b..6ddca99 100644 --- a/sld649-bluetooth-c-soc-dev-guide-sdk-v9x/04-configuring-bluetooth-stack-and-wireless-gecko-device.md +++ b/sld649-bluetooth-c-soc-dev-guide-sdk-v9x/04-configuring-bluetooth-stack-and-wireless-gecko-device.md @@ -223,7 +223,7 @@ When the Bluetooth stack is used with other protocols in a multiprotocol environ The application needs to allocate the configuration struct and provide it for the Bluetooth stack: ```C -sl_bt_bluetooth_ll_priorities custom_priorities; +sl_btctrl_ll_priorities custom_priorities; static const sl_bt_configuration_t config = { // .bluetooth.linklayer_priorities = &custom_priorities, @@ -231,9 +231,9 @@ static const sl_bt_configuration_t config = { }; ``` -The `sl_bt_bluetooth_ll_priorities` struct must be initialized to default state by the `SL_BT_BLUETOOTH_PRIORITIES_DEFAULT` constant. +The `sl_btctrl_ll_priorities` struct must be initialized to default state by the `SL_BT_BLUETOOTH_PRIORITIES_DEFAULT` constant. -The `sl_bt_bluetooth_ll_priorities` struct contains following fields: +The `sl_btctrl_ll_priorities` struct contains following fields: - `scan_min, scan_max, scan step` - The priority range for scan operation. From a523ac77dbfa266c8ce3ac4bf7d4e8bb335ce827 Mon Sep 17 00:00:00 2001 From: Nga Nguyen Date: Tue, 23 Jun 2026 18:58:31 +0700 Subject: [PATCH 4/5] Add AFH support information to periodic advertising documentation ( recreated #9 ) (#12) * Update periodic-advertising.md Add AFH support information to periodic advertising documentation * Update periodic-advertising.md minor wording change --------- Co-authored-by: silabsbsz --- .../periodic-advertising.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sld268-bluetooth-fundamentals-advertising-scanning/periodic-advertising.md b/sld268-bluetooth-fundamentals-advertising-scanning/periodic-advertising.md index 625c97d..25310e9 100644 --- a/sld268-bluetooth-fundamentals-advertising-scanning/periodic-advertising.md +++ b/sld268-bluetooth-fundamentals-advertising-scanning/periodic-advertising.md @@ -11,6 +11,8 @@ Important points about Periodic Advertising are as follows: 2. At least one advertisement packet needs to be sent to enable periodic advertising. 3. It will use the same PHY as the auxiliary packet. Each periodic advertiser has the same parameters as connection. Additionally, the channel is also determined the same way as connection using the Channel Selection Algorithm #2. 4. Because it is based on extended advertisements, it uses data channels as opposed to advertisements channels. +5. Periodic advertising supports Adaptive Frequency Hopping (AFH). Similar to Bluetooth connections, the advertiser and synchronized scanners can dynamically avoid channels experiencing high interference, improving robustness and reliability in congested RF environments. + ## Concept @@ -22,7 +24,10 @@ Periodic advertising mode is indicated with the ADV_EXT_IND packets (legacy adve ![Timing of Periodic Advertising](resources/sld268-figure-1.jpg?darkModeUrl=resources/sld268-figure-1.jpg) -If the data of the periodic advertisement does not fit into one packet, the AUX_SYNC_IND packet can be followed by AUX_CHAIN_IND packets. AUX_SYNC_IND along with AUX_CHAIN_IND make up a sequence of advertisements forming a periodic advertising train. +If the data for a periodic advertisement does not fit in a single packet, the AUX_SYNC_IND packet can be followed by one or more AUX_CHAIN_IND packets. Together, AUX_SYNC_IND and AUX_CHAIN_IND form a sequence of advertisements known as a periodic advertising train. + +Periodic advertising also supports AFH. Because periodic advertisements use data channels and Channel Selection Algorithm #2, the channel map can be updated to exclude channels affected by interference. This allows the periodic advertising train to adapt to changing RF conditions, similar to Bluetooth LE connections. + ![Periodic Advertising Train](resources/sld268-figure-4.png?darkModeUrl=resources/sld268-figure-4.png) From 20bf1eb3042e8d3a12d7cd489571eeddb748fd2e Mon Sep 17 00:00:00 2001 From: Nga Nguyen Date: Tue, 23 Jun 2026 18:59:01 +0700 Subject: [PATCH 5/5] Update 06-the-esl-network.md - added ESL image throughput stress test section ( recreated from #8 ) (#14) * Update 06-the-esl-network.md - added ESL image throughput stress test section * Update 06-the-esl-network.md changed wording based on the recommendations --------- Co-authored-by: silabsbsz --- .../06-the-esl-network.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sld679-bluetooth-electronic-shelf-label/06-the-esl-network.md b/sld679-bluetooth-electronic-shelf-label/06-the-esl-network.md index 039f72c..e0338f3 100644 --- a/sld679-bluetooth-electronic-shelf-label/06-the-esl-network.md +++ b/sld679-bluetooth-electronic-shelf-label/06-the-esl-network.md @@ -450,3 +450,13 @@ display_image 2 0 0 Since the tag `8C:F6:81:B8:83:18` was unassociated from the network instead of factory reset, all the images stored to it were preserved, and therefore the tag can display the images after associating to a network. ![Since the tag 8C:F6:81:B8:83:18 was unassociated from the network instead of factory reset, all the images stored to it were preserved, and therefore the tag can display the images after associating to a network.](resources/sld679-image40.png) + +## ESL image throughput stress test + +The `image_throughput` command starts or stops an ESL image transfer stress test across synchronized ESL Tags. During the test, the Access Point repeatedly transfers images to eligible synchronized Tags to validate throughput, stability, and PAwR-based image distribution performance under load. + +The test supports limiting the number of participating Tags (`--max_count`) and restricting enrollment to Tags within a maximum ESL group ID (`--max_group`). While the test runs, the AP temporarily switches to manual mode and restores the previous operating mode automatically when the test finishes or is stopped. The test requires PAwR to be active, synchronized ESLs that support image transfer, and demo mode to be disabled. + +For full command usage, options, notes, and examples, see: + +`bt_host_esl_ap/esl_ap/readme/readme.md`