Differences in BLE Controller Initialization logs between throughput sample and throughput with Single-Slot DFU Integration

Hi Nordic teams,

I am working on integrating single-slot DFU for the nRF54H20 based on the throughput example. However, I noticed a difference in how the Bluetooth controller is initialized, as detailed below:

Environment:

- Board: nRF54H20 DK 0.9.2
- NCS version: v3.3.0
- Samples: `samples/bluetooth/throughput` (original) vs. custom integration with `samples/dfu/single_slot`

When running the original bluetooth/throughput sample, the following log is observed at startup:

throughput_original.zip

NCS330\throughput_original\throughput> west build -b nrf54h20dk/nrf54h20/cpuappthroughput_original\throughput>west build -b nrf54h20dk/nrf54h20/cpuapp
NCS330\throughput_original\throughput> nrfutil device recover
NCS330\throughput_original\throughput> west flash

Booting nRF Connect SDK v3.3.0-ba167d9f3db4 ***
*** Using Zephyr OS v4.3.99-fd9204a02d52 ***
Starting Bluetooth Throughput sample
W: Num of Controller's ACL packets != ACL bt_conn_tx contexts (3 != 10)
I: HW Platform: Nordic Semiconductor (0x0002)
I: HW Variant: nRF54Hx (0x0004)
I: Firmware: Standard Bluetooth controller (0x00) Version 39.32003 Build 4270654547
I: HCI transport: IPC
I: Identity: CA:12:CA:03:D3:7E (random)
I: HCI: version 6.2 (0x10) revision 0x40a3, manufacturer 0x0059
I: LMP: version 6.2 (0x10) subver 0x40a3
Bluetooth initialized

Press button 0 or type "central" on the central board.
Press button 1 or type "peripheral" on the peripheral board.

When the same throughput sample is integrated with the Single-Slot DFU mechanism, the following log is observed instead:

throughput_dfu_single_slot.zip

NCS330\throughput_dfu_single_slot\throughput>west build -p -b nrf54h20dk/nrf54h20/cpuapp -T ./sample.dfu.single_slot.fw_loader_update.fw_loader_entrance_boot_req.nrf54h20 
NCS330\throughput_dfu_single_slot\throughput>nrfutil device recover
NCS330\throughput_dfu_single_slot\throughput>west flash

Booting My Application v3.3.0-12d10162f8e0 ***
*** Using nRF Connect SDK v3.3.0-ba167d9f3db4 ***
*** Using Zephyr OS v4.3.99-fd9204a02d52 ***
Starting Bluetooth Throughput sample
W: Controller to host flow control not supported
W: Num of Controller's ACL packets != ACL bt_conn_tx contexts (3 != 10)
W: opcode 0xfc01 status 0x01
W: Vendor HCI extensions not available
W: Read Static Addresses command not available
I: HCI transport: IPC
I: Identity: E1:6C:FC:F5:BE:52 (random)
I: HCI: version 6.2 (0x10) revision 0x40a3, manufacturer 0x0059
I: LMP: version 6.2 (0x10) subver 0x40a3
Bluetooth initialized
V2.0.3 build time: May 26 2026 09:41:40

Press button 0 or type "central" on the central board.
Press button 1 or type "peripheral" on the peripheral board.

Observed Differences:

1. W: Controller to host flow control not supported

- This warning does not appear in the original sample. It suggests the BLE controller version or configuration used in the DFU-integrated build does not support controller-to-host flow control.

2. W: opcode 0xfc01 status 0x01 / W: Vendor HCI extensions not available

- These warnings indicate that vendor-specific HCI commands are not being acknowledged by the controller in the DFU-integrated build.

3. W: Read Static Addresses command not available

- This suggests the controller in the DFU-integrated build does not support this HCI command.

4. Missing hardware/firmware info lines

- The `I: HW Platform`, `I: HW Variant`, and `I: Firmware` lines are absent in the DFU-integrated build log, which may indicate the controller is not fully initialized or is a different version/configuration.

Question:

What causes these differences between the two builds? Is it related to the IPC radio firmware version, the MCUboot/TF-M configuration, or a mismatch in the BLE controller configuration when Single-Slot DFU is integrated?

Thanks.

  • Hi Lam, 

    It's quite strange that adding single slot DFU can cause the application to change behavior. 
    If you try to build another application , for example peripheral_hr, do you see the same change in the log ? 
    I tried to build the sample you provided throughput_dfu_single_slot but got the following error: 

    Do you have anything else need to be set or include when building ? 

  • Hi Hung, 
    Please build throughput_dfu_single_slot using the following command:
    * I'm running a build command on a Windows PC

    west build -p -b nrf54h20dk/nrf54h20/cpuapp -T ./sample.dfu.single_slot.fw_loader_update.fw_loader_entrance_boot_req.nrf54h20


  • Hi Hung, 

    I tried with peripheral_uart, and the behavior changed similarly to the throughput example when adding DFU single_slot.

    8623.peripheral_uart.zip

    1. build_app_only.bat – This build includes only the app and netcore. The log is shown below.

    1.1 Build

    D:\ncs\v3.3.0\peripheral_uart>build_app_only.bat
    D:\ncs\v3.3.0\peripheral_uart>west build -d build_app_only -b nrf54h20dk/nrf54h20/cpuapp

    1.2 Log

    *** Booting My Application v3.3.0-6f99e1462c81 ***
    *** Using nRF Connect SDK v3.3.0-ba167d9f3db4 ***
    *** Using Zephyr OS v4.3.99-fd9204a02d52 ***
    Starting Nordic UART service sample
    I: 10 Sectors of 4096 bytes
    I: alloc wra: 0, fc0
    I: data wra: 0, 0
    I: HW Platform: Nordic Semiconductor (0x0002)
    I: HW Variant: nRF54Hx (0x0004)
    I: Firmware: Standard Bluetooth controller (0x00) Version 39.32003 Build 4270654547
    I: No ID address. App must call settings_load()
    I:
    App v3.3.2 build time: May 27 2026 11:14:38
    
    I: Bluetooth initialized
    I: HCI transport: IPC
    I: Identity: CA:12:CA:03:D3:7E (random)
    I: HCI: version 6.2 (0x10) revision 0x40a3, manufacturer 0x0059
    I: LMP: version 6.2 (0x10) subver 0x40a3
    I: Advertising successfully started

    2. build_boot_req.bat – This build integrates single_slot as well. The log is shown below.

    In this build, I used the dfu_application.zip file to update. The file size is ~1.5MB, similar to the app and netcore image merge strategy, and the update was successful. However, the log for the IPC radio image differs from build_app_only.

    2.1 Build

    west build -b nrf54h20dk/nrf54h20/cpuapp -T ./sample.dfu.single_slot.fw_loader_update.fw_loader_entrance_boot_req.nrf54h20

    Or

    D:\ncs\v3.3.0\peripheral_uart>build_boot_req.bat
    D:\ncs\v3.3.0\peripheral_uart>west build -d build_boot_req -b nrf54h20dk/nrf54h20/cpuapp --sysbuild -- -DSB_CONFIG_FIRMWARE_LOADER_UPDATE=y -DFILE_SUFFIX=boot_req -Dinstaller_DTC_OVERLAY_FILE="${ZEPHYR_NRF_MODULE_DIR}/samples/dfu/single_slot/boards/nrf54h20dk_nrf54h20_cpuapp_boot_req.overlay" -Dinstaller_CONFIG_INSTALLER_FW_LOADER_ENTRANCE_BOOT_REQ=y -Dinstaller_CONFIG_NRF_MCUBOOT_BOOT_REQUEST=y -Dinstaller_CONFIG_IMG_MANAGER=y -Dinstaller_CONFIG_REBOOT=y

    2.2 Log

    *** Booting My Application v3.3.0-6f99e1462c81 ***
    *** Using nRF Connect SDK v3.3.0-ba167d9f3db4 ***
    *** Using Zephyr OS v4.3.99-fd9204a02d52 ***
    Starting Nordic UART service sample
    I: 10 Sectors of 4096 bytes
    I: alloc wra: 0, f10
    I: data wra: 0, 70
    W: Controller to host flow control not supported
    W: opcode 0xfc01 status 0x01
    W: Vendor HCI extensions not available
    I: No ID address. App must call settings_load()
    I:
    App v3.3.2 build time: May 27 2026 11:20:56
    
    I: Bluetooth initialized
    W: Read Static Addresses command not available
    I: HCI transport: IPC
    I: Identity: D1:2C:1C:C0:A6:E5 (random)
    I: HCI: version 6.2 (0x10) revision 0x40a3, manufacturer 0x0059
    I: LMP: version 6.2 (0x10) subver 0x40a3
    I: Advertising successfully started
    
    == dfu_application.zip ==
    
    
    *** Booting My Application v3.3.0-6f99e1462c81 ***
    *** Using nRF Connect SDK v3.3.0-ba167d9f3db4 ***
    *** Using Zephyr OS v4.3.99-fd9204a02d52 ***
    Starting Nordic UART service sample
    I: 10 Sectors of 4096 bytes
    I: alloc wra: 0, f00
    I: data wra: 0, 80
    W: Controller to host flow control not supported
    W: opcode 0xfc01 status 0x01
    W: Vendor HCI extensions not available
    I: No ID address. App must call settings_load()
    I:
    App v3.3.3 build time: May 27 2026 11:28:09
    
    I: Bluetooth initialized
    W: Read Static Addresses command not available
    I: HCI transport: IPC
    I: Identity: E2:7B:9A:68:8E:FE (random)
    I: HCI: version 6.2 (0x10) revision 0x40a3, manufacturer 0x0059
    I: LMP: version 6.2 (0x10) subver 0x40a3
    I: Advertising successfully started

  • Hi Lam, 
    Thanks for the  instruction. I have reproduced what you observed here. 
    I'm checking with the team to get more insight. 


    My understanding is that when you enable fw_loader with BLE on nRF54H it will add a controller to the radio core (in addition to the main application's BLE controller). And the way the radio core booting may be slightly changed (for example log configuration) and you may see different log. 


    Do you see any change in the BLE behavior when testing with throughput sample or other BLE sample ? 

  • Hi Hung,

    Good news: The issue is resolved. I updated the partition labels as follows:

    • Changed cpurad_slot0_ipc_radio_partition --> cpurad_slot0_partition (under slot0_partition: 256KB for ipc_radio to interface with the app).

    • Changed cpurad_slot0_partition --> cpurad_slot1_partition (under slot1_partition to configure ipc_radio for fw_loader).

    Is there a defined naming convention or policy for these partition labels?

Related