From 3821731699bd428732fef74ca97cdceafb203b53 Mon Sep 17 00:00:00 2001 From: Kamil Kasperczyk <66371704+kkasperczyk-no@users.noreply.github.com> Date: Wed, 2 Jun 2021 00:10:40 +0200 Subject: [PATCH] [nrfconnect] Extended DFU documentation about using mcumgr tool. (#7251) 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. --- .../nrfconnect/app/overlay-dfu_support.conf | 1 + config/nrfconnect/app/sample-defaults.conf | 1 + .../nrfconnect_examples_software_update.md | 125 ++++++++++++++++++ examples/lighting-app/nrfconnect/README.md | 20 +-- examples/lock-app/nrfconnect/README.md | 20 +-- src/platform/Zephyr/BLEManagerImpl.cpp | 7 - 6 files changed, 133 insertions(+), 41 deletions(-) create mode 100644 docs/guides/nrfconnect_examples_software_update.md diff --git a/config/nrfconnect/app/overlay-dfu_support.conf b/config/nrfconnect/app/overlay-dfu_support.conf index f12343fa847e5c..0760bd8717626c 100644 --- a/config/nrfconnect/app/overlay-dfu_support.conf +++ b/config/nrfconnect/app/overlay-dfu_support.conf @@ -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 diff --git a/config/nrfconnect/app/sample-defaults.conf b/config/nrfconnect/app/sample-defaults.conf index dfcb838596b12a..e59caceef4d598 100644 --- a/config/nrfconnect/app/sample-defaults.conf +++ b/config/nrfconnect/app/sample-defaults.conf @@ -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 diff --git a/docs/guides/nrfconnect_examples_software_update.md b/docs/guides/nrfconnect_examples_software_update.md new file mode 100644 index 00000000000000..89cb756883a669 --- /dev/null +++ b/docs/guides/nrfconnect_examples_software_update.md @@ -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. diff --git a/examples/lighting-app/nrfconnect/README.md b/examples/lighting-app/nrfconnect/README.md index e73c870cf2ea46..321a91899c4b75 100644 --- a/examples/lighting-app/nrfconnect/README.md +++ b/examples/lighting-app/nrfconnect/README.md @@ -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. diff --git a/examples/lock-app/nrfconnect/README.md b/examples/lock-app/nrfconnect/README.md index 436212b9013d18..056b49a8d7fbc4 100644 --- a/examples/lock-app/nrfconnect/README.md +++ b/examples/lock-app/nrfconnect/README.md @@ -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. diff --git a/src/platform/Zephyr/BLEManagerImpl.cpp b/src/platform/Zephyr/BLEManagerImpl.cpp index 2541cc1d9be314..14b2d921e487b2 100644 --- a/src/platform/Zephyr/BLEManagerImpl.cpp +++ b/src/platform/Zephyr/BLEManagerImpl.cpp @@ -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...