DFU from Application Using USB and External Flash on Thingy53/nRF5340

Hello, I am developing my custom board using Thingy53 as a reference design. I am trying to achieve DFU from application using external flash for the secondary image and upload new image via USB CDC ACM. So far, I have been following the two tutorials from nrf academy on using external flash and USB for DFU. The AuTerm could successfully identify the serial port, but when I try to get the current image, AuTerm only reports Image 1 -> Slot 1 -> with the image state Bootable, neither Active nor Confirmed, which is different from the tutorial. I am using ncs 3.0.2

On my device end, I am using RTT terminal to get the following log information when I try to get the current images:

[00:00:28.469,482] <inf> usbd_cdc_acm: 
                                       06 09 41 41 73 49 41 41  41 42 41 41 45 41 41 4b |..AAsIAA ABAAEAAK
                                       43 76 41 51 3d 3d 0a                             |CvAQ==.          
[00:00:28.469,573] <inf> usbd_cdc_acm: UART dev 0x5090c size 32 length 23
[00:00:28.470,031] <inf> mcuboot_util: Image index: 0, Swap type: none
[00:00:28.470,550] <inf> mcuboot_util: Image index: 1, Swap type: none
[00:00:28.470,550] <err> mcumgr_img_grp: Failed to open flash area ID 1: -2

From a post in this forum I understand this error means I am trying to open a flash area that does not exist. I am currently stucked here.

I attach my sysbuild.conf here:

SB_CONFIG_NETCORE_IPC_RADIO_BT_HCI_IPC=y

SB_CONFIG_MCUBOOT_MODE_SINGLE_APP=n
SB_CONFIG_BOOTLOADER_MCUBOOT=y

SB_CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y

SB_CONFIG_SECURE_BOOT_NETCORE=y
SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES=2
SB_CONFIG_NETCORE_APP_UPDATE=y
SB_CONFIG_MCUBOOT_NRF53_MULTI_IMAGE_UPDATE=y
SB_CONFIG_MCUBOOT_MODE_OVERWRITE_ONLY=y

SB_CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y

The mcuboot.overlay and mcuboot.conf:

&mx25r64 {
    status = "okay";
};  

/ {
    chosen {
        nordic,pm-ext-flash = &mx25r64;
    };
};
 
CONFIG_SIZE_OPTIMIZATIONS=y

CONFIG_SYSTEM_CLOCK_NO_WAIT=y
CONFIG_PM=n

CONFIG_MAIN_STACK_SIZE=10240
CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h"

CONFIG_BOOT_MAX_IMG_SECTORS=2048
CONFIG_BOOT_SIGNATURE_TYPE_RSA=y

# Flash
CONFIG_FLASH=y
CONFIG_BOOT_ERASE_PROGRESSIVELY=y
CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y
CONFIG_FPROTECT=y

# Serial
CONFIG_SERIAL=y
CONFIG_UART_LINE_CTRL=y

# MCUBoot serial
CONFIG_GPIO=y
CONFIG_GPIO_NRFX_INTERRUPT=n
CONFIG_MCUBOOT_SERIAL=n
CONFIG_MCUBOOT_SERIAL_DIRECT_IMAGE_UPLOAD=y
CONFIG_BOOT_SERIAL_CDC_ACM=y

# Required by QSPI
CONFIG_NORDIC_QSPI_NOR=y
CONFIG_NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
CONFIG_NORDIC_QSPI_NOR_STACK_WRITE_BUFFER_SIZE=16

# Required by USB and QSPI
CONFIG_MULTITHREADING=y

# USB
CONFIG_BOARD_SERIAL_BACKEND_CDC_ACM=n
CONFIG_USB_DEVICE_REMOTE_WAKEUP=n
CONFIG_USB_DEVICE_MANUFACTURER="Nordic Semiconductor ASA"
CONFIG_USB_DEVICE_PRODUCT="Bootloader Torus53"
CONFIG_USB_DEVICE_VID=0x1915
CONFIG_USB_DEVICE_PID=0x5300
CONFIG_USB_CDC_ACM=y

# Decrease memory footprint
CONFIG_CBPRINTF_NANO=y
CONFIG_TIMESLICING=n
CONFIG_BOOT_BANNER=n
CONFIG_NCS_BOOT_BANNER=n
CONFIG_CONSOLE=n
CONFIG_CONSOLE_HANDLER=n
CONFIG_UART_CONSOLE=n
CONFIG_USE_SEGGER_RTT=n
CONFIG_LOG=n
CONFIG_ERRNO=n
CONFIG_PRINTK=n
CONFIG_RESET_ON_FATAL_ERROR=n
CONFIG_SPI=n
CONFIG_I2C=n
CONFIG_UART_NRFX=n

# The following configurations are required to support simultaneous multi image update
CONFIG_PCD_APP=y
CONFIG_UPDATEABLE_IMAGE_NUMBER=2
CONFIG_BOOT_UPGRADE_ONLY=y
# The network core cannot access external flash directly. The flash simulator must be used to
# provide a memory region that is used to forward the new firmware to the network core.
CONFIG_FLASH_SIMULATOR=y
CONFIG_FLASH_SIMULATOR_DOUBLE_WRITES=y
CONFIG_FLASH_SIMULATOR_STATS=n

# Enable custom command to erase settings partition.
CONFIG_ENABLE_MGMT_PERUSER=y
CONFIG_BOOT_MGMT_CUSTOM_STORAGE_ERASE=y

We used the partition manager to manage the partition for the external flash:

app:
  address: 0x10200
  region: flash_primary
  size: 0xdfe00
mcuboot:
  address: 0x0
  region: flash_primary
  size: 0x10000
mcuboot_pad:
  address: 0x10000
  region: flash_primary
  size: 0x200
mcuboot_primary:
  address: 0x10000
  orig_span: &id001
  - mcuboot_pad
  - app
  region: flash_primary
  size: 0xe0000
  span: *id001
mcuboot_primary_app:
  address: 0x10200
  orig_span: &id002
  - app
  region: flash_primary
  size: 0xdfe00
  span: *id002
settings_storage:
  address: 0xf0000
  region: flash_primary
  size: 0x10000
mcuboot_primary_1:
  address: 0x0
  size: 0x40000
  device: flash_ctrl
  region: ram_flash
mcuboot_secondary:
  address: 0x00000
  size: 0xe0000
  device: MX25R64
  region: external_flash
mcuboot_secondary_1:
  address: 0xe0000
  size: 0x40000
  device: MX25R64
  region: external_flash
littlefs_storage:
  region: external_flash
  device: MX25R64
  address: 0x120000
  size: 0x6e0000
  label: "lfs_storage"
  affiliation: disk
  extra_params:
    disk_cache_size: 0x1000
    disk_name: NOR
    disk_read_only: 0x0
    disk_sector_size: 0x200
pcd_sram:
  address: 0x20000000
  size: 0x2000
  region: sram_primary
  

And finally we have the devicetree file including this:

	chosen {
		zephyr,uart-mcumgr = &cdc_acm_uart0; 
		zephyr,bt-hci-ipc = &ipc0;
		zephyr,bt-hci = &bt_hci_ipc0;
		nordic,pm-ext-flash = &mx25r64;
	};

Measurement Taken So Far:

1. I have added the SB_CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y in my sysbuild.conf.

2. I have followed the tutorial here on simultaneous update and added those configurations.

Previously, when we are using USB DFU class together with dfu-util, the DFU work quite well.

Can anyone help with this issue? 

Many thanks

Parents
  • Hi,

    I will look closer into this, but here's some initial thoughts

    From a post in this forum I understand this error means I am trying to open a flash area that does not exist. I am currently stucked here.

    This is correct, the way the netcore image DFU works is that you have to temporarily load it to RAM, which can't be opened similar to how regular flash storage is opened (illustrated here: https://academy.nordicsemi.com/courses/nrf-connect-sdk-intermediate/lessons/lesson-9-bootloaders-and-dfu-fota/topic/dfu-for-the-nrf5340/). This error ' mcumgr_img_grp: Failed to open flash area ID 1: -2' can be ignored for this image.

    The AuTerm could successfully identify the serial port, but when I try to get the current image, AuTerm only reports Image 1 -> Slot 1 -> with the image state Bootable, neither Active nor Confirmed, which is different from the tutorial. I am using ncs 3.0.2

    If you have a nRF5340DK available. Do you see the same things when reproducing the steps on the DK as you did for your custom board based on the Thingy:53? I assume there will be differences due to the peripherals, but what I'm curious of is if this is due to a change in NCS 3.0.0 i.e the academy lesson 9 exercise 4 and 5 (for simultaneous) is out of date or if it's a "thingy:53 based" issue

    Kind regards,
    Andreas

Reply
  • Hi,

    I will look closer into this, but here's some initial thoughts

    From a post in this forum I understand this error means I am trying to open a flash area that does not exist. I am currently stucked here.

    This is correct, the way the netcore image DFU works is that you have to temporarily load it to RAM, which can't be opened similar to how regular flash storage is opened (illustrated here: https://academy.nordicsemi.com/courses/nrf-connect-sdk-intermediate/lessons/lesson-9-bootloaders-and-dfu-fota/topic/dfu-for-the-nrf5340/). This error ' mcumgr_img_grp: Failed to open flash area ID 1: -2' can be ignored for this image.

    The AuTerm could successfully identify the serial port, but when I try to get the current image, AuTerm only reports Image 1 -> Slot 1 -> with the image state Bootable, neither Active nor Confirmed, which is different from the tutorial. I am using ncs 3.0.2

    If you have a nRF5340DK available. Do you see the same things when reproducing the steps on the DK as you did for your custom board based on the Thingy:53? I assume there will be differences due to the peripherals, but what I'm curious of is if this is due to a change in NCS 3.0.0 i.e the academy lesson 9 exercise 4 and 5 (for simultaneous) is out of date or if it's a "thingy:53 based" issue

    Kind regards,
    Andreas

Children
No Data
Related