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