Topics

DFU OTA by using mcuboot bootloader in serial recovery mode #ble #nrf52480 #uart #hci

Mayank
 

Hello All,

Right now I'm exploring the best way to do DFU OTA.
I would like to ask that how i can do the DFU by booting the mcuboot bootloader in serial recovery mode.

I have one nrf52840_pca10056 chip integrated on my custom board, which has mcuboot as a bootloader. I don't have any direct pin access to the nrf chip.
I'm doing an OTA for zephyr's hci_uart sample application.

My aim is:
- Flash mcuboot
- Flash hci_uart application one time using Jlink segger (For beacon scanning)
- After that i should be able to do DFU OTA on field, without having any Jlink kind of wired connection.

Thanks,
Mayank

Lawrence King
 

Hi Mayank:

 

I had a similar requirement, also without a button on the same Nordic chip. I simply copied this file into my project, and called smp_svr_init() from my main() after bluetooth was up and running

 

zephyrproject/zephyr/samples/boards/nrf52/mesh/onoff_level_lighting_vnd_app/src/smp_svr.c

 

This creates a  Bluetooth advertisement for OTA update, and I can push new images from mu Ubuntu system with:

 

Use mcumgr to upload the new version over Bluetooth

-----------------------------------------

sudo bash                                                    # must run as root to access the Bluetooth device

mcumgr conn add zephyr type=ble connstring=peer_name="My Device"     # make a symbolic name for the device

mcumgr -c zephyr image list                     # Query device for its current image list.

mcumgr -c zephyr image upload build/zephyr/zephyr.signed.bin               # Upload new image to device.

mcumgr -c zephyr image test <image-hash> # Tell the device to run the new image on its next boot ("test" the new image).

mcumgr -c zephyr reset                             # Reboot the device.

mcumgr -c zephyr image list                     # Query device for its current image list; ensure new image is running.

mcumgr -c zephyr image confirm                          # Make the image swap permanent.

 

 

You do need to get the right bits in your prj.conf file, I think these are all you need, but there may be more…

# mcuboot

CONFIG_IMG_MANAGER=y

CONFIG_MCUBOOT_IMG_MANAGER=y

CONFIG_MCUBOOT_TRAILER_SWAP_TYPE=y

CONFIG_IMG_BLOCK_BUF_SIZE=512

# Allow for large Bluetooth data packets.

CONFIG_BT_L2CAP_TX_MTU=260

CONFIG_BT_RX_BUF_LEN=260

# Enable the Bluetooth and shell mcumgr transports.

CONFIG_MCUMGR_SMP_BT=y

#CONFIG_MCUMGR_SMP_SHELL=y

#CONFIG_MCUMGR_SMP_UART=y

# Required by the `taskstat` command.

#CONFIG_THREAD_MONITOR=y

# Enable statistics and statistic names.

#CONFIG_STATS=y

#CONFIG_STATS_NAMES=y

# Enable all core commands.

#CONFIG_MCUMGR_CMD_FS_MGMT=y

CONFIG_MCUMGR_CMD_IMG_MGMT=y

CONFIG_MCUMGR_CMD_OS_MGMT=y

#CONFIG_MCUMGR_CMD_STAT_MGMT=y

 

Unfortunately you will need to reflash your units with JTAG/SWD to get the smp_svr in, but after that you can do OTA.

 

Lawrence King

Principal Developer

+1(416)627-7302

 

From: devel@... <devel@...> On Behalf Of Mayank
Sent: Tuesday, December 3, 2019 6:47 AM
To: devel@...
Subject: [Zephyr-devel] DFU OTA by using mcuboot bootloader in serial recovery mode #ble #hci #nrf52480 #uart

 

Hello All,

Right now I'm exploring the best way to do DFU OTA.
I would like to ask that how i can do the DFU by booting the mcuboot bootloader in serial recovery mode.

I have one nrf52840_pca10056 chip integrated on my custom board, which has mcuboot as a bootloader. I don't have any direct pin access to the nrf chip.
I'm doing an OTA for zephyr's hci_uart sample application.

My aim is:
- Flash mcuboot
- Flash hci_uart application one time using Jlink segger (For beacon scanning)
- After that i should be able to do DFU OTA on field, without having any Jlink kind of wired connection.

Thanks,
Mayank