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.

Parents
  • 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, 

    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.

    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

    *** 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.

    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

    *** 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

Reply
  • 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.

    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

    *** 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.

    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

    *** 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

Children
No Data
Related