[McuMgr] Error: IN_VALUE (3) during DFU update by SMP service

Hi,

I would like to implement DFU for my device over BLE.

To test, i followed the tutorial  Add DFU support to your application .

As I use the Zephyr 2.4.1, i had to make some change so i add this on my prj.conf

CONFIG_ZCBOR=y
# Enable mcumgr.
CONFIG_MCUMGR=y

CONFIG_STREAM_FLASH=y

# Enable most core commands.
CONFIG_IMG_MANAGER=y
CONFIG_MCUMGR_GRP_IMG=y
CONFIG_MCUMGR_GRP_OS=y

# Ensure an MCUboot-compatible binary is generated.
CONFIG_BOOTLOADER_MCUBOOT=y

# Allow for large Bluetooth data packets.
CONFIG_BT_L2CAP_TX_MTU=256
CONFIG_BT_BUF_ACL_RX_SIZE=256

# Enable the Bluetooth (unauthenticated) and shell mcumgr transports.
CONFIG_MCUMGR_TRANSPORT_BT=y
CONFIG_MCUMGR_TRANSPORT_BT_AUTHEN=n

# Some command handlers require a large stack.
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096

Then I compile and erase/flash my board (nrf5340dk).

I retrieve the dfu_application.zip and with nrf connect i start the DFU process.

I select "Test and confirm" and i got the popup "Application has been sent successfully".

So for now everything seems to be working fine.

Then i erase/flash my board (nrf5340dk) again.

After i change my CONFIG_BT_DEVICE_NAME "Nordic_LBS" by "Nordic_LTS" in order to see that my DFU worked fine easily with advertising name.

So I make a pristine build, get the dfu_application.zip and start the DFU process with nrf connect.

I select "Test and confirm" and then the DFU not working.

I get this message [McuMgr] Error: IN_VALUE (3). I join you the log of failure.

nRF Connect, 2023-10-05
Nordic_LBS (68:00:F1:24:66:15)
   Client Characteristic Configuration (0x2902)
D	09:43:46.406	gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
D	09:43:46.407	gatt.setCharacteristicNotification(00001524-1212-efde-1523-785feabcd123, true)
V	09:43:49.022	[McuMgr] Connecting...
D	09:43:49.028	[McuMgr] gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, LE 1M)
D	09:43:49.074	[McuMgr] [Callback] Connection state changed with status: 0 and new state: 2 (CONNECTED)
I	09:43:49.079	[McuMgr] Connected to 68:00:F1:24:66:15
D	09:43:49.085	[McuMgr] wait(1600)
I	09:43:50.174	Connection parameters updated (interval: 40.0ms, latency: 0, timeout: 420ms)
I	09:43:50.182	[McuMgr] Connection parameters updated (interval: 40.0ms, latency: 0, timeout: 420ms)
V	09:43:50.692	[McuMgr] Discovering services...
D	09:43:50.700	[McuMgr] gatt.discoverServices()
I	09:43:50.712	[McuMgr] Services discovered
V	09:43:50.718	[McuMgr] Primary service found
V	09:43:50.834	[McuMgr] Requesting new MTU...
D	09:43:50.841	[McuMgr] gatt.requestMtu(498)
I	09:43:51.034	[McuMgr] MTU changed to: 252
D	09:43:51.043	[McuMgr] gatt.setCharacteristicNotification(da2e7828-fbce-4e01-ae9e-261174997c48, true)
V	09:43:51.052	[McuMgr] Enabling notifications for da2e7828-fbce-4e01-ae9e-261174997c48
D	09:43:51.059	[McuMgr] descriptor.setValue(0x01-00)
D	09:43:51.066	[McuMgr] gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb)
I	09:43:51.137	[McuMgr] Data written to descr. 00002902-0000-1000-8000-00805f9b34fb
I	09:43:51.144	[McuMgr] Notifications enabled
V	09:43:51.324	[McuMgr] Waiting for value change...
V	09:43:51.332	[McuMgr] Writing characteristic da2e7828-fbce-4e01-ae9e-261174997c48 (WRITE COMMAND)
D	09:43:51.339	[McuMgr] characteristic.setValue(0x000000010000FF06A0)
D	09:43:51.345	[McuMgr] characteristic.setWriteType(WRITE COMMAND)
D	09:43:51.352	[McuMgr] gatt.writeCharacteristic(da2e7828-fbce-4e01-ae9e-261174997c48)
I	09:43:51.363	[McuMgr] Data written to da2e7828-fbce-4e01-ae9e-261174997c48
I	09:43:51.541	[McuMgr] Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 01-00-00-06-00-00-FF-06-BF-62-72-63-08-FF
I	09:43:51.552	[McuMgr] Wait for value changed complete
A	09:43:51.573	[McuMgr] Received Header (Op: 1, Flags: 0, Len: 6, Group: 0, Seq: 255, Command: 6) CBOR {"rc":8}
W	09:43:51.579	[McuMgr] Error: NOT_SUPPORTED (8)
A	09:43:51.630	[McuMgr] Sending (10 bytes) Header (Op: 0, Flags: 0, Len: 2, Group: 1, Seq: 0, Command: 0) CBOR {}
V	09:43:51.641	[McuMgr] Writing characteristic da2e7828-fbce-4e01-ae9e-261174997c48 (WRITE COMMAND)
D	09:43:51.649	[McuMgr] characteristic.setValue(0x0000000200010000BFFF)
D	09:43:51.656	[McuMgr] characteristic.setWriteType(WRITE COMMAND)
D	09:43:51.664	[McuMgr] gatt.writeCharacteristic(da2e7828-fbce-4e01-ae9e-261174997c48)
I	09:43:51.673	[McuMgr] Data written to da2e7828-fbce-4e01-ae9e-261174997c48
I	09:43:51.861	[McuMgr] Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 01-00-00-86-00-01-00-00-BF-66-69-6D-61-67-65-73-9F-BF-64-73-6C-6F-74-00-67-76-65-72-73-69-6F-6E-65-30-2E-30-2E-30-64-68-61-73-68-58-20-DA-28-66-C9-5A-F4-5B-81-4C-F2-4E-26-59-38-47-C1-00-F9-12-73-E0-B3-05-3A-3F-0D-08-97-5C-9F-74-36-68-62-6F-6F-74-61-62-6C-65-F5-67-70-65-6E-64-69-6E-67-F4-69-63-6F-6E-66-69-72-6D-65-64-F5-66-61-63-74-69-76-65-F5-69-70-65-72-6D-61-6E-65-6E-74-F4-FF-FF-6B-73-70-6C-69-74-53-74-61-74-75-73-00-FF
A	09:43:51.877	[McuMgr] Received Header (Op: 1, Flags: 0, Len: 134, Group: 1, Seq: 0, Command: 0) CBOR {"images":[{"slot":0,"version":"0.0.0","hash":"2ihmyVr0W4FM8k4mWThHwQD5EnPgswU6Pw0Il1yfdDY=","bootable":true,"pending":false,"confirmed":true,"active":true,"permanent":false}],"splitStatus":0}
V	09:43:51.920	[McuMgr] Uploading firmware...
A	09:44:25.039	[McuMgr] 139592 bytes sent in 32940 ms (4.24 kB/s)
A	09:45:01.862	[McuMgr] 190472 bytes sent in 32601 ms (5.84 kB/s)
A	09:45:01.880	[McuMgr] Sending (10 bytes) Header (Op: 2, Flags: 0, Len: 2, Group: 63, Seq: 214, Command: 0) CBOR {}
V	09:45:01.888	[McuMgr] Writing characteristic da2e7828-fbce-4e01-ae9e-261174997c48 (WRITE COMMAND)
D	09:45:01.896	[McuMgr] characteristic.setValue(0x02000002003FD600BFFF)
D	09:45:01.903	[McuMgr] characteristic.setWriteType(WRITE COMMAND)
D	09:45:01.911	[McuMgr] gatt.writeCharacteristic(da2e7828-fbce-4e01-ae9e-261174997c48)
I	09:45:01.922	[McuMgr] Data written to da2e7828-fbce-4e01-ae9e-261174997c48
I	09:45:01.980	[McuMgr] Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 03-00-00-06-00-3F-D6-00-BF-62-72-63-08-FF
A	09:45:01.991	[McuMgr] Received Header (Op: 3, Flags: 0, Len: 6, Group: 63, Seq: 214, Command: 0) CBOR {"rc":8}
W	09:45:01.998	[McuMgr] Error: NOT_SUPPORTED (8)
V	09:45:02.016	[McuMgr] New state: TEST
A	09:45:02.027	[McuMgr] Sending (58 bytes) Header (Op: 2, Flags: 0, Len: 50, Group: 1, Seq: 215, Command: 0) CBOR {"confirm":false,"hash":"IoIth3T7x3ZfeXxi154BEUGyibortKgzmyEAjGU8a2Y="}
V	09:45:02.035	[McuMgr] Writing characteristic da2e7828-fbce-4e01-ae9e-261174997c48 (WRITE COMMAND)
D	09:45:02.043	[McuMgr] characteristic.setValue(0x020000320001D700BF67636F6E6669726DF46468617368582022822D8774FBC7765F797C62D79E011141B289BA2BB4A8339B21008C653C6B66FF)
D	09:45:02.050	[McuMgr] characteristic.setWriteType(WRITE COMMAND)
D	09:45:02.056	[McuMgr] gatt.writeCharacteristic(da2e7828-fbce-4e01-ae9e-261174997c48)
I	09:45:02.068	[McuMgr] Data written to da2e7828-fbce-4e01-ae9e-261174997c48
I	09:45:02.140	[McuMgr] Notification received from da2e7828-fbce-4e01-ae9e-261174997c48, value: (0x) 03-00-00-06-00-01-D7-00-BF-62-72-63-03-FF
A	09:45:02.151	[McuMgr] Received Header (Op: 3, Flags: 0, Len: 6, Group: 1, Seq: 215, Command: 0) CBOR {"rc":3}
W	09:45:02.159	[McuMgr] Error: IN_VALUE (3)
V	09:45:02.178	[McuMgr] Disconnecting...
D	09:45:02.186	[McuMgr] gatt.disconnect()
D	09:45:02.210	[McuMgr] [Callback] Connection state changed with status: 0 and new state: 0 (DISCONNECTED)
I	09:45:02.235	[McuMgr] Disconnected
D	09:45:02.243	[McuMgr] gatt.close()

Why cannot success my DFU procedure ? 

Is there something am i missing ?

My configuration are : 

-IDE : Visual Studio Code

-Zephyr: V2.4.1

-OS: Windows

-Board: nrf5340

Best Regards,

Julien 

  • Is what i got from uart log when failed

    Starting Bluetooth Peripheral LTS example
    E: Unable to register handle 0x0016
    I: 2 Sectors of 4096 bytes
    I: alloc wra: 0, fe8
    I: data wra: 0, 0
    I: HW Platform: Nordic Semiconductor (0x0002)
    I: HW Variant: nRF53x (0x0003)
    I: Firmware: Standard Bluetooth controller (0x00) Version 224.11902 Build 2231721665
    I: No ID address. App must call settings_load()
    Bluetooth initialized
    I: Identity: C5:9C:33:25:14:38 (random)
    I: HCI: version 5.4 (0x0d) revision 0x2077, manufacturer 0x0059
    I: LMP: version 5.4 (0x0d) subver 0x2077
    Advertising successfully started
    Connected
    I: Swap type: none
    I: Swap type: none
    I: Swap type: none
    I: Swap type: none
    I: Swap type: none

    and when successful

    Starting Bluetooth Peripheral LBS example
    E: Unable to register handle 0x0016
    I: 2 Sectors of 4096 bytes
    I: alloc wra: 0, fe8
    I: data wra: 0, 0
    I: HW Platform: Nordic Semiconductor (0x0002)
    I: HW Variant: nRF53x (0x0003)
    I: Firmware: Standard Bluetooth controller (0x00) Version 224.11902 Build 2231721665
    I: No ID address. App must call settings_load()
    Bluetooth initialized
    I: Identity: C5:9C:33:25:14:38 (random)
    I: HCI: version 5.4 (0x0d) revision 0x2077, manufacturer 0x0059
    I: LMP: version 5.4 (0x0d) subver 0x2077
    Advertising successfully started
    Connected
    I: Swap type: none
    I: Swap type: none
    I: Swap type: none
    I: Swap type: test
    I: Swap type: test
    *** Booting Zephyr OS build v3.3.99-ncs1-1 ***
    *** Booting Zephyr OS build v3.3.99-ncs1-1 ***
    Starting Bluetooth Peripheral LBS example
    E: Unable to register handle 0x0016
    I: 2 Sectors of 4096 bytes
    I: alloc wra: 0, fd0
    I: data wra: 0, 1c
    I: HW Platform: Nordic Semiconductor (0x0002)
    I: HW Variant: nRF53x (0x0003)
    I: Firmware: Standard Bluetooth controller (0x00) Version 224.11902 Build 2231721665
    I: No ID address. App must call settings_load()
    Bluetooth initialized
    I: Identity: C5:9C:33:25:14:38 (random)
    I: HCI: version 5.4 (0x0d) revision 0x2077, manufacturer 0x0059
    I: LMP: version 5.4 (0x0d) subver 0x2077
    Advertising successfully started
    Connected
    I: Swap type: perm
    I: Swap type: perm

    It seems the mistake come from Swap type : test is missing.

  • Hi,

    As this guide is quite old (tested for NCS v1.8.0), I'm curious if you do see the same things when following the steps in from relevant samples in this repository https://github.com/hellesvik-nordic/samples_for_nrf_connect_sdk/tree/main/bootloader_samples? For instance using the mcuboot_smp_ble sample in https://github.com/hellesvik-nordic/samples_for_nrf_connect_sdk/tree/main/bootloader_samples/smp

    Let me know if you're able to cross examine what could be the difference or not and I will continue looking into it from my end as well 

    Kind regards,
    Andreas

  • Hi AHaug,

    I tried with the repo of Hellesvik and it works well.

    I think it come from nrf53840 and the dual core, i need to develop more in order to understand why.

    Thanks for the support,

    Julien

  • Glad to hear you were able to resolve it!

    Getting a hand of how DFU on the dual core nRF5340 works can be tricky, so please feel free to open new tickets if you have any other issues or questions

    Kind regards,
    Andreas

Related