Skip to content

Commit

Permalink
[nrfconnect] Extended DFU documentation about using mcumgr tool. (#7251)
Browse files Browse the repository at this point in the history
Examples documentation about performing Device Firmware Upgrade
over BLE describes only case using Nordic mobile app. It would
be beneficial to have also documentation that shows how to perform
firmware upgrade from PC command line tool.

* Moved DFU description from examples to separate guide readme.
* Extended documentation by case using mcumgr command line tool
to perform DFU.
* Removed unnecessary part of the code allowing to advertise
over BLE with non conn type that was added in very early verison
of BLE Manager implementation.
  • Loading branch information
kkasperczyk-no authored and pull[bot] committed Aug 11, 2021
1 parent 8c83726 commit 3821731
Show file tree
Hide file tree
Showing 6 changed files with 133 additions and 41 deletions.
1 change: 1 addition & 0 deletions config/nrfconnect/app/overlay-dfu_support.conf
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ CONFIG_MCUMGR_CMD_IMG_MGMT=y
CONFIG_MCUMGR_CMD_OS_MGMT=y
CONFIG_MCUMGR_SMP_BT=y
CONFIG_MCUMGR_SMP_BT_AUTHEN=n
CONFIG_MCUMGR_BUF_COUNT=6

# Increase BT MTU and RX buffer for big size DFU messages
CONFIG_BT_L2CAP_TX_MTU=252
Expand Down
1 change: 1 addition & 0 deletions config/nrfconnect/app/sample-defaults.conf
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ CONFIG_BT_DEVICE_NAME_MAX=15
CONFIG_BT_MAX_CONN=1
CONFIG_BT_PHY_UPDATE=n
CONFIG_BT_CTLR_PHY_2M=n
CONFIG_SDC_MAX_CONN_EVENT_LEN_DEFAULT=3000

# Enable NFC support
CONFIG_CHIP_NFC_COMMISSIONING=y
Expand Down
125 changes: 125 additions & 0 deletions docs/guides/nrfconnect_examples_software_update.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# Performing Device Firmware Upgrade in the nRF Connect SDK examples

The following examples for the development kits from Nordic Semiconductor
support over-the-air Device Firmware Upgrade:

- [CHIP nRF Connect Lock Example Application](../../examples/lock-app/nrfconnect/README.md)
- [CHIP nRF Connect Lighting Example Application](../../examples/lighting-app/nrfconnect/README.md)

Currently, the Bluetooth LE is the only available transport for performing the
DFU operation and it uses
[Simple Management Protocol](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/guides/device_mgmt/index.html#device-mgmt).
The upgrade can be done either using a smartphone application or a PC command
line tool.

## Device Firmware Upgrade using smartphone

To upgrade your device firmware over Bluetooth LE using smartphone, complete the
following steps:

1. Install one of the following applications on your smartphone:

- [nRF Connect for Mobile](https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Connect-for-mobile)
- [nRF Toolbox](https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Toolbox)

2. Push **Button 1** on the device to enable the software update functionality.
3. Push **Button 4** on the device to start the Bluetooth LE advertising.
4. Follow the instructions about downloading the new image to a device on the
[FOTA upgrades](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/ug_nrf52.html#fota-upgrades)
page in the nRF Connect documentation.

## Device Firmware Upgrade using PC command line tool

To upgrade your device firmware over Bluetooth LE, you can use the PC command
line tool provided by the [mcumgr](https://github.com/zephyrproject-rtos/mcumgr)
project.

> **_WARNING:_** mcumgr tool using Bluetooth LE is available only for Linux and
> macOS systems. On Windows, there is no support for Device Firmware Upgrade
> over Bluetooth LE yet.
Complete the following steps to perform DFU using mcumgr:

1. Install the tool by following the
[mcumgr command line tool installation instructions](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/guides/device_mgmt/index.html#command-line-tool).
2. Push **Button 1** on the device to enable software update functionality.
3. Push **Button 4** on the device to start the Bluetooth LE advertising.

> **_NOTE:_** In all of the commands listed in the following steps, replace
> `ble-hci-number` with the Bluetooth hci integer value (for example, `0`) and
> `ble-device-name` with the CHIP device name advertised over Bluetooth LE (for
> example, `ChipLock`).
4. Upload the firmware image to the device by running the following command in
your example directory:

$ sudo mcumgr --conntype ble --hci ble-hci-number --connstring peer_name='ble-device-name' image upload build/zephyr/app_update.bin

The operation can take few minutes. Wait until the progress bar reaches
100%.

5. Obtain the list of images present in the device memory by running following
command:

$ sudo mcumgr --conntype ble --hci ble-hci-number --connstring peer_name='ble-device-name' image list

The displayed output contains the old image in slot 0 that is currently
active and the new image in slot 1, which is not active yet (flags field
empty):

Images:
image=0 slot=0
version: 0.0.0
bootable: true
flags: active confirmed
hash: 7bb0e909a846e833465cbb44c581cf045413a5446c6953a30a3dcc2c3ad51764
image=0 slot=1
version: 0.0.0
bootable: true
flags:
hash: cbd58fc3821e749d3abfb00b3069f98c078824735f1b2a333e8a1579971e7de1
Split status: N/A (0)

6. Swap the firmware images by calling the following method with `image-hash`
replaced by the image present in the slot 1 hash (for example,
`cbd58fc3821e749d3abfb00b3069f98c078824735f1b2a333e8a1579971e7de1`):

$ sudo mcumgr --conntype ble --hci ble-hci-number --connstring peer_name='ble-device-name' image test image-hash

You can observe that the `flags:` field in the image for slot 1 changes
value to `pending`:

Images:
image=0 slot=0
version: 0.0.0
bootable: true
flags: active confirmed
hash: 7bb0e909a846e833465cbb44c581cf045413a5446c6953a30a3dcc2c3ad51764
image=0 slot=1
version: 0.0.0
bootable: true
flags: pending
hash: cbd58fc3821e749d3abfb00b3069f98c078824735f1b2a333e8a1579971e7de1
Split status: N/A (0)

7. Reset the device with the following command to let the bootloader swap
images:

$ sudo mcumgr --conntype ble --hci ble-hci-number --connstring peer_name='ble-device-name' reset

The device is reset and the following notifications appear in its console:

*** Booting Zephyr OS build zephyr-v2.5.0-1101-ga9d3aef65424 ***
I: Starting bootloader
I: Primary image: magic=good, swap_type=0x2, copy_done=0x1, image_ok=0x1
I: Secondary image: magic=good, swap_type=0x2, copy_done=0x3, image_ok=0x3
I: Boot source: none
I: Swap type: test

Swapping operation can take some time, and after it completes, the new
firmware is booted.

Visit the
[mcumgr image management](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/guides/device_mgmt/indexhtml#image-management)
section to get familiar with all image management commands supported by the
tool.
20 changes: 3 additions & 17 deletions examples/lighting-app/nrfconnect/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -462,20 +462,6 @@ CHIP-enabled Thread network.

### Testing Device Firmware Upgrade

> **_NOTE:_** Currently performing DFU over BLE is supported only using
> smartphone with dedicated Nordic application installed.
To upgrade your device firmware over Bluetooth LE using smartphone, complete the
following tasks:

1. Install on your smartphone
[nRF Connect for Mobile](https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Connect-for-mobile)
or
[nRF Toolbox](https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Toolbox)
application.
2. Push **Button 4** on the device to start Bluetooth LE advertising.
3. Push **Button 1** on the device to enable software update functionality.
4. Follow the instructions in the section about downloading the new image to a
device on the
[FOTA upgrades](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/ug_nrf52.html#fota-upgrades)
page in the nRF Connect documentation.
Read the
[DFU tutorial](../../../docs/guides/nrfconnect_examples_software_update.md) to
see how to upgrade your device firmware.
20 changes: 3 additions & 17 deletions examples/lock-app/nrfconnect/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -454,20 +454,6 @@ CHIP-enabled Thread network.

### Testing Device Firmware Upgrade

> **_NOTE:_** Currently performing DFU over BLE is supported only using
> smartphone with dedicated Nordic application installed.
To upgrade your device firmware over Bluetooth LE using smartphone, complete the
following tasks:

1. Install on your smartphone
[nRF Connect for Mobile](https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Connect-for-mobile)
or
[nRF Toolbox](https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Toolbox)
application.
2. Push **Button 4** on the device to start Bluetooth LE advertising.
3. Push **Button 1** on the device to enable software update functionality.
4. Follow the instructions in the section about downloading the new image to a
device on the
[FOTA upgrades](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/ug_nrf52.html#fota-upgrades)
page in the nRF Connect documentation.
Read the
[DFU tutorial](../../../docs/guides/nrfconnect_examples_software_update.md) to
see how to upgrade your device firmware.
7 changes: 0 additions & 7 deletions src/platform/Zephyr/BLEManagerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -249,13 +249,6 @@ CHIP_ERROR BLEManagerImpl::StartAdvertising(void)
VerifyOrExit(err == CHIP_NO_ERROR, err = MapErrorZephyr(err));

err = bt_le_adv_start(&advParams, ad, ARRAY_SIZE(ad), nullptr, 0u);
if (err == -ENOMEM)
{
// No free connection objects for connectable advertiser. Advertise as non-connectable instead.
advParams.options &= ~BT_LE_ADV_OPT_CONNECTABLE;
err = bt_le_adv_start(&advParams, ad, ARRAY_SIZE(ad), nullptr, 0u);
}

VerifyOrExit(err == CHIP_NO_ERROR, err = MapErrorZephyr(err));

// Transition to the Advertising state...
Expand Down

0 comments on commit 3821731

Please sign in to comment.