Flash area error when attempting DFU via nRF Connect App

Hello,

I'm getting the following error  when attempting to perform a DFU. I'm using the Android nRF Connect app.

00> I: Image index: 0, Swap type: test
00> I: Image index: 1, Swap type: none
00> E: Failed to open flash area ID 1: -2

Flash Area ID of 1 indicates it's external flash. Error -2 is ENOENT. So it's saying that no such flash area exists? I suspect something is not configured correctly.

Here is my external flash devicetree snippet:

&spi4 {
	compatible = "nordic,nrf-spim";
	status = "okay";
	pinctrl-0 = <&spi4_default>;
	pinctrl-1 = <&spi4_sleep>;
	pinctrl-names = "default", "sleep";
	cs-gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;

	sst26vf: sst26vf064b@0 {
		compatible = "jedec,spi-nor";
				reg = <0>;
		spi-max-frequency = <24000000>;
		jedec-id = [bf 26 43]; /* see datasheet table 5-4, p.25 */

		/* see datasheet pp. 72-79 for basic flash parameters table below */
		sfdp-bfp = [
			fd 20 f1 ff  ff ff ff 03  44 eb 08 6b  08 3b 80 bb
			fe ff ff ff  ff ff 00 ff  ff ff 44 0b  0c 20 0d d8
			0f d8 10 d8  20 91 48 24  80 6f 1d 81  ed 0f 77 38
			30 b0 30 b0  f7 ff ff ff  29 c2 5f ff  f0 30 c0 80
		];
		size = <67108864>;

	 	requires-ulbpr; /* sst26vf has block write protections enabled by default */
	};
};

The project is based on the smart lock sample code. I had to increase the size of the bootloader region to get it to fit. Here is the pm_static_dfu.yml file:

mcuboot:
  address: 0x0
  size: 0xc000
  region: flash_primary
mcuboot_pad:
  address: 0xc000
  size: 0x200
app:
  address: 0xc200
  size: 0xeae00
mcuboot_primary:
  orig_span: &id001
  - mcuboot_pad
  - app
  span: *id001
  address: 0xc000
  size: 0xeb000
  region: flash_primary
mcuboot_primary_app:
  orig_span: &id002
  - app
  span: *id002
  address: 0xc200
  size: 0xeae00
factory_data:
  address: 0xf7000
  size: 0x1000
  region: flash_primary
settings_storage:
  address: 0xf8000
  size: 0x8000
  region: flash_primary
mcuboot_primary_1:
  address: 0x0
  size: 0x40000
  device: flash_ctrl
  region: ram_flash
mcuboot_secondary:
  address: 0x0
  size: 0xef000
  device: SST26VF
  region: external_flash
mcuboot_secondary_1:
  address: 0xef000
  size: 0x40000
  device: SST26VF
  region: external_flash
external_flash:
  address: 0x12f000
  size: 0x6D1000
  device: SST26VF
  region: external_flash
pcd_sram:
  address: 0x20000000
  size: 0x2000
  region: sram_primary

I'm don't know how or if this yaml file relates to the partitions defined in the devicetree, but here are the devicetree partitions:

&flash0 {

	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0x00010000>;
		};
		slot0_partition: partition@10000 {
			label = "image-0";
		};
		slot0_ns_partition: partition@50000 {
			label = "image-0-nonsecure";
		};
		slot1_partition: partition@80000 {
			label = "image-1";
		};
		slot1_ns_partition: partition@c0000 {
			label = "image-1-nonsecure";
		};
		/* 0xf0000 to 0xf7fff reserved for TF-M partitions */
		storage_partition: partition@f8000 {
			label = "storage";
			reg = <0x000f8000 0x00008000>;
		};
	};
}

Thanks.

Parents
  • Hello,

    I think this warning might be because you did not configure the external flash for the MCUboot. I am attaching a sample with this response, which I have tested here inside SDK v2.5.1.

    Please try the attached sample and see whether the same is happening or not. Also, what swap type are you choosing from the nRF Connect app? Could you try the "confirm only" tag if you are trying with "Test and confirm"?

    8875.peripheral_lbs.zip

    Kind Regards,

    Abhijith

  • Hi Abhijith,

    I'm still unable to perform an upgrade using your peripheral_lbs sample code. See the full log below:

    *** Booting nRF Connect SDK v2.5.1 ***
    Starting Bluetooth Peripheral LBS example
    [00:00:00.007,904] <inf> fs_nvs: 2 Sectors of 4096 bytes
    [00:00:00.007,904] <inf> fs_nvs: alloc wra: 0, f88
    [00:00:00.007,934] <inf> fs_nvs: data wra: 0, c4
    [00:00:00.040,008] <inf> bt_hci_core: HW Platform: Nordic Semiconductor (0x0002)
    [00:00:00.040,039] <inf> bt_hci_core: HW Variant: nRF53x (0x0003)
    [00:00:00.040,069] <inf> bt_hci_core: Firmware: Standard Bluetooth controller (0x00) Version 197.47763 Build 2370639017
    [00:00:00.042,297] <inf> bt_hci_core: No ID address. App must call settings_load()
    Bluetooth initialized
    [00:00:00.045,166] <inf> bt_hci_core: Identity: E1:C7:E4:D3:7E:A3 (random)
    [00:00:00.045,196] <inf> bt_hci_core: HCI: version 5.4 (0x0d) revision 0x2102, manufacturer 0x0059
    [00:00:00.045,227] <inf> bt_hci_core: LMP: version 5.4 (0x0d) subver 0x2102
    Advertising successfully started
    Connected
    Security changed: C4:93:D9:69:DF:A4 (public) level 4
    [00:03:47.805,572] <inf> mcuboot_util: Image index: 0, Swap type: none
    [00:03:47.806,396] <inf> mcuboot_util: Image index: 1, Swap type: none
    [00:03:47.806,427] <err> mcumgr_img_grp: Failed to open flash area ID 1: -2
    [00:03:47.943,328] <inf> mcuboot_util: Image index: 0, Swap type: none
    [00:03:48.045,227] <inf> mcumgr_img_grp: Erased 0x30000 bytes of image slot
    [00:03:48.064,575] <inf> mcumgr_img_grp: Erased 0x1000 bytes of image slot trailer
    [00:04:09.113,281] <inf> mcuboot_util: Image index: 1, Swap type: none
    [00:04:09.849,822] <inf> mcumgr_img_grp: Erased 0x32000 bytes of image slot
    [00:04:09.869,110] <inf> mcumgr_img_grp: Erased 0x1000 bytes of image slot trailer
    *** Booting nRF Connect SDK v2.5.1 ***
    Starting Bluetooth Peripheral LBS example
    [00:00:00.007,904] <inf> fs_nvs: 2 Sectors of 4096 bytes
    [00:00:00.007,904] <inf> fs_nvs: alloc wra: 0, f88
    [00:00:00.007,934] <inf> fs_nvs: data wra: 0, c4
    [00:00:00.040,008] <inf> bt_hci_core: HW Platform: Nordic Semiconductor (0x0002)
    [00:00:00.040,039] <inf> bt_hci_core: HW Variant: nRF53x (0x0003)
    [00:00:00.040,069] <inf> bt_hci_core: Firmware: Standard Bluetooth controller (0x00) Version 197.47763 Build 2370639017
    [00:00:00.042,297] <inf> bt_hci_core: No ID address. App must call settings_load()
    Bluetooth initialized
    [00:00:00.045,166] <inf> bt_hci_core: Identity: E1:C7:E4:D3:7E:A3 (random)
    [00:00:00.045,196] <inf> bt_hci_core: HCI: version 5.4 (0x0d) revision 0x2102, manufacturer 0x0059
    [00:00:00.045,227] <inf> bt_hci_core: LMP: version 5.4 (0x0d) subver 0x2102
    Advertising successfully started

    I don't see an error message that would indicate why it's failing.

    I tried turning on logging in mcuboot.conf but it doesn't seem to print anything. Is there a way to see what mcuboot is doing and why the image swap is not happening? 

    My mcuboot.conf is below. I had to increase the size of the bootloader because it kept exceeding the flash memory. My custom board is limited to RTT debuggin (no serial pins exposed)

    #Enable QSPI drivers for external flash
    CONFIG_NORDIC_QSPI_NOR=y
    
    
    CONFIG_BOOT_MAX_IMG_SECTORS=256
    
    
    
    #Adding configurations to enable simultaneous multi-core updates
    CONFIG_NRF53_MULTI_IMAGE_UPDATE=y
    CONFIG_UPDATEABLE_IMAGE_NUMBER=2
    CONFIG_BOOT_UPGRADE_ONLY=y
    CONFIG_PCD_APP=y
    
    #Adding dependencies for CONFIG_NRF53_MULTI_IMAGE_UPDATE
    CONFIG_FLASH=y
    CONFIG_FLASH_SIMULATOR=y
    CONFIG_FLASH_SIMULATOR_DOUBLE_WRITES=y
    CONFIG_FLASH_SIMULATOR_STATS=nv
    
    # LUIS
    CONFIG_GPIO=y
    CONFIG_MULTITHREADING=y
    CONFIG_NORDIC_QSPI_NOR=n
    CONFIG_SPI_NOR=y
    CONFIG_NRFX_SPIM4=y
    CONFIG_SIZE_OPTIMIZATIONS=y
    CONFIG_NFCT_PINS_AS_GPIOS=y
    CONFIG_LOG=y
    CONFIG_USE_SEGGER_RTT=y
    CONFIG_LOG_BACKEND_RTT=y
    CONFIG_LOG_MODE_IMMEDIATE=y
    CONFIG_PM_PARTITION_SIZE_MCUBOOT=0x48000
    CONFIG_LOG_DEFAULT_LEVEL=3

    I'm not seeing any external flash errors and there's certainly activity when I examine the lines using a logic analyzer:

    Do you have any suggestions on what to try? I suspect mcuboot is rejecting the image for some reason. How do I prove this?

Reply
  • Hi Abhijith,

    I'm still unable to perform an upgrade using your peripheral_lbs sample code. See the full log below:

    *** Booting nRF Connect SDK v2.5.1 ***
    Starting Bluetooth Peripheral LBS example
    [00:00:00.007,904] <inf> fs_nvs: 2 Sectors of 4096 bytes
    [00:00:00.007,904] <inf> fs_nvs: alloc wra: 0, f88
    [00:00:00.007,934] <inf> fs_nvs: data wra: 0, c4
    [00:00:00.040,008] <inf> bt_hci_core: HW Platform: Nordic Semiconductor (0x0002)
    [00:00:00.040,039] <inf> bt_hci_core: HW Variant: nRF53x (0x0003)
    [00:00:00.040,069] <inf> bt_hci_core: Firmware: Standard Bluetooth controller (0x00) Version 197.47763 Build 2370639017
    [00:00:00.042,297] <inf> bt_hci_core: No ID address. App must call settings_load()
    Bluetooth initialized
    [00:00:00.045,166] <inf> bt_hci_core: Identity: E1:C7:E4:D3:7E:A3 (random)
    [00:00:00.045,196] <inf> bt_hci_core: HCI: version 5.4 (0x0d) revision 0x2102, manufacturer 0x0059
    [00:00:00.045,227] <inf> bt_hci_core: LMP: version 5.4 (0x0d) subver 0x2102
    Advertising successfully started
    Connected
    Security changed: C4:93:D9:69:DF:A4 (public) level 4
    [00:03:47.805,572] <inf> mcuboot_util: Image index: 0, Swap type: none
    [00:03:47.806,396] <inf> mcuboot_util: Image index: 1, Swap type: none
    [00:03:47.806,427] <err> mcumgr_img_grp: Failed to open flash area ID 1: -2
    [00:03:47.943,328] <inf> mcuboot_util: Image index: 0, Swap type: none
    [00:03:48.045,227] <inf> mcumgr_img_grp: Erased 0x30000 bytes of image slot
    [00:03:48.064,575] <inf> mcumgr_img_grp: Erased 0x1000 bytes of image slot trailer
    [00:04:09.113,281] <inf> mcuboot_util: Image index: 1, Swap type: none
    [00:04:09.849,822] <inf> mcumgr_img_grp: Erased 0x32000 bytes of image slot
    [00:04:09.869,110] <inf> mcumgr_img_grp: Erased 0x1000 bytes of image slot trailer
    *** Booting nRF Connect SDK v2.5.1 ***
    Starting Bluetooth Peripheral LBS example
    [00:00:00.007,904] <inf> fs_nvs: 2 Sectors of 4096 bytes
    [00:00:00.007,904] <inf> fs_nvs: alloc wra: 0, f88
    [00:00:00.007,934] <inf> fs_nvs: data wra: 0, c4
    [00:00:00.040,008] <inf> bt_hci_core: HW Platform: Nordic Semiconductor (0x0002)
    [00:00:00.040,039] <inf> bt_hci_core: HW Variant: nRF53x (0x0003)
    [00:00:00.040,069] <inf> bt_hci_core: Firmware: Standard Bluetooth controller (0x00) Version 197.47763 Build 2370639017
    [00:00:00.042,297] <inf> bt_hci_core: No ID address. App must call settings_load()
    Bluetooth initialized
    [00:00:00.045,166] <inf> bt_hci_core: Identity: E1:C7:E4:D3:7E:A3 (random)
    [00:00:00.045,196] <inf> bt_hci_core: HCI: version 5.4 (0x0d) revision 0x2102, manufacturer 0x0059
    [00:00:00.045,227] <inf> bt_hci_core: LMP: version 5.4 (0x0d) subver 0x2102
    Advertising successfully started

    I don't see an error message that would indicate why it's failing.

    I tried turning on logging in mcuboot.conf but it doesn't seem to print anything. Is there a way to see what mcuboot is doing and why the image swap is not happening? 

    My mcuboot.conf is below. I had to increase the size of the bootloader because it kept exceeding the flash memory. My custom board is limited to RTT debuggin (no serial pins exposed)

    #Enable QSPI drivers for external flash
    CONFIG_NORDIC_QSPI_NOR=y
    
    
    CONFIG_BOOT_MAX_IMG_SECTORS=256
    
    
    
    #Adding configurations to enable simultaneous multi-core updates
    CONFIG_NRF53_MULTI_IMAGE_UPDATE=y
    CONFIG_UPDATEABLE_IMAGE_NUMBER=2
    CONFIG_BOOT_UPGRADE_ONLY=y
    CONFIG_PCD_APP=y
    
    #Adding dependencies for CONFIG_NRF53_MULTI_IMAGE_UPDATE
    CONFIG_FLASH=y
    CONFIG_FLASH_SIMULATOR=y
    CONFIG_FLASH_SIMULATOR_DOUBLE_WRITES=y
    CONFIG_FLASH_SIMULATOR_STATS=nv
    
    # LUIS
    CONFIG_GPIO=y
    CONFIG_MULTITHREADING=y
    CONFIG_NORDIC_QSPI_NOR=n
    CONFIG_SPI_NOR=y
    CONFIG_NRFX_SPIM4=y
    CONFIG_SIZE_OPTIMIZATIONS=y
    CONFIG_NFCT_PINS_AS_GPIOS=y
    CONFIG_LOG=y
    CONFIG_USE_SEGGER_RTT=y
    CONFIG_LOG_BACKEND_RTT=y
    CONFIG_LOG_MODE_IMMEDIATE=y
    CONFIG_PM_PARTITION_SIZE_MCUBOOT=0x48000
    CONFIG_LOG_DEFAULT_LEVEL=3

    I'm not seeing any external flash errors and there's certainly activity when I examine the lines using a logic analyzer:

    Do you have any suggestions on what to try? I suspect mcuboot is rejecting the image for some reason. How do I prove this?

Children
No Data
Related