Partition management for multiple peripherals and partitions

Hello everyone,

I'm trying to add an external flash memory to the address range of the main memory. There is already an existing EEPROM, which will be deprecated later, and a Flash memory is added now. Both are connected via SPI. My intention is the following:

  • Leave the EEPROM as it is for now in the configuration
  • Add the flash memory to SPI
  • Define an extended memory space (My intention is to start it at the address 0x90000)
  • Create two partitions for the Flash:
    • Config partition: This needs only be 100 kiB, replacing the functionality of the EEPROM, and will be directly addressed
    • McuBoot swap partition: This will be where the image for the firmware update will be placed. This will be the rest of the memory.

Right now I always get the following warning when building and I'm not sure if I have configured everything correctly:

Fullscreen
1
2
unit address and first address in 'reg' (0x200090000) don't match for /soc/spi@40004000/flash_at25pe80@2/partitions/partition@0
unit address and first address in 'reg' (0x200090400) don't match for /soc/spi@40004000/flash_at25pe80@2/partitions/partition@1
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

I have configured my application the following way:

Fullscreen
1
2
3
4
5
6
7
8
CONFIG_SPI=y
CONFIG_SPI_NOR=y
CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
CONFIG_PM_PARTITION_REGION_LITTLEFS_EXTERNAL=y
CONFIG_PM_PARTITION_REGION_SETTINGS_STORAGE_EXTERNAL=y
CONFIG_PM_PARTITION_REGION_NVS_STORAGE_EXTERNAL=y
CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y
CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Device tree (SPI reg 1 is reserved for another device currently in development, but does not need a partition):

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
&spi1 {
compatible = "nordic,nrf-spi";
status = "okay";
pinctrl-0 = <&spi1_default>;
pinctrl-1 = <&spi1_sleep>;
pinctrl-names = "default", "sleep";
cs-gpios = <&gpio0 11 GPIO_ACTIVE_LOW>, <&gpio0 12 GPIO_ACTIVE_LOW>, <&gpio0 13 GPIO_ACTIVE_LOW>; //SIO_11 MCU_0403_A - SPI_CS1
eeprom_m95040:eeprom_m95040@0 {
// M95040 is compatible with atmel at25 eeprom driver
compatible = "atmel,at25";
reg = <0>;
size = <DT_SIZE_K(512)>;
pagesize = <512>;
address-width = <24>;
spi-max-frequency = <8000000>;
timeout = <5>;
};
flash_at25pe80:flash_at25pe80@2 {
compatible = "jedec,spi-nor";
status = "okay";
size = < DT_SIZE_M(8) >;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

partition.yml

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
app:
address: 0x9200
end_address: 0x42000
region: flash_primary
size: 0x38e00 #App size 227.5 KB
mcuboot:
address: 0x0
end_address: 0x9000
placement:
before:
- mcuboot_primary
region: flash_primary
size: 0x9000 #38 KB MCU Bootloader
mcuboot_pad:
address: 0x9000
end_address: 0x9200
placement:
align:
start: 0x1000
before:
- mcuboot_primary_app
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

I have not defined any custom regions, as the documentation is (in my opinion) abysmal for this with too few examples. But I would gladly be proven otherwise.

The goal is for the config partition to be writable by address, and for McuBoot to use the second partition as an extension, although this may be implemented at a later time.

Sadly I have not found an example where multiple SPI devices are used, one of them a flash device and with addressable partitions, so I don't know where the warning is coming from, as it doesn't show what it expects from me.

Much thanks for any help,

Rico

Parents
  • Hi Rico,

    I will support you with this case. Please be informed that unfortunately we might take some days with this. That is because we are understaffed due to the summer vacation season, and it looks like I will need to research a bit for this.

    I would like to confirm about these configurations that you are setting:

    Fullscreen
    1
    2
    3
    CONFIG_PM_PARTITION_REGION_LITTLEFS_EXTERNAL=y
    CONFIG_PM_PARTITION_REGION_SETTINGS_STORAGE_EXTERNAL=y
    CONFIG_PM_PARTITION_REGION_NVS_STORAGE_EXTERNAL=y
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Do you want all of these regions on external flash? You mentioned you only want some configs and MCUboot secondary there.

    Could you please also share your compiled DTS? It's in <build directory>/zephyr/zephyr.dts.

    Hieu

  • I do not need all of these, if I reread the options again correctly. I falsely understood from the documentation that all three should be set, when it is only one of then.

    The compiled DTS file is the following (the pins are not yet correctly, but it is the complete hardware architecture):

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /dts-v1/;
    / {
    #address-cells = < 0x1 >;
    #size-cells = < 0x1 >;
    model = "carl_sensor";
    compatible = "krafft,carl-sensor";
    chosen {
    zephyr,entropy = &rng;
    zephyr,flash-controller = &flash_controller;
    zephyr,console = &uart0;
    zephyr,shell-uart = &uart0;
    zephyr,uart-mcumgr = &uart0;
    zephyr,bt-mon-uart = &uart0;
    zephyr,bt-c2h-uart = &uart0;
    zephyr,sram = &sram0;
    zephyr,flash = &flash0;
    zephyr,code-partition = &slot0_partition;
    nordic,pm-ext-flash = &extflash;
    };
    aliases {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • The only part with a " / 8" in your partition.yml file is in a comment in the mcuboot_secondary section.

    Please see if you can remove it or rephrase it. I understand that YAML is supposed to support inline comment, but there seem to be an issue with the parser, so let's work around it for now.

  • This error:

    Fullscreen
    1
    2
    3
    CMake Error at C:/Users/sw2.KRAFFT/ncs/nrf/cmake/partition_manager.cmake:220 (math):
    math cannot parse the expression: " / 8": syntax error, unexpected
    exp_DIVIDE (2).
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    is not dependant on my file. I even removed the comment without a change. It points to a function in the partition_manager.cmake file:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    dt_chosen(ext_flash_dev PROPERTY nordic,pm-ext-flash)
    if (DEFINED ext_flash_dev)
    dt_prop(num_bits PATH ${ext_flash_dev} PROPERTY size)
    math(EXPR num_bytes "${num_bits} / 8")
    set(external_flash_driver_kconfig CONFIG_PM_EXTERNAL_FLASH_HAS_DRIVER)
    add_region(
    NAME external_flash
    SIZE ${num_bytes}
    BASE ${CONFIG_PM_EXTERNAL_FLASH_BASE}
    PLACEMENT start_to_end
    DEVICE "DT_CHOSEN(nordic_pm_ext_flash)"
    DEFAULT_DRIVER_KCONFIG ${external_flash_driver_kconfig}
    )
    endif()
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    I think the size given in num_bytes is somehow wrong (or num_bits?) but the size I have given in the device tree for the external partition (0xFFC00) is dividible by 8, so I'm not sure where this error is coming from.

    Otherwise the main zephyr.cmake has the following lines:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # At the moment we only can use the bootloader in release mode.
    # There is not enough space to debug the application
    # with the bootloader enabled as the application size is reduced to half
    # of its size (~256kb)
    if (CMAKE_BUILD_TYPE STREQUAL release)
    set(OVERLAY_CONFIG ${OVERLAY_CONFIG} ${ROOT_DIR}/conf/bootloader_dfu.conf)
    # Main application configuration
    set(PM_STATIC_YML_FILE ${ROOT_DIR}/partition.yml)
    endif()
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    This references the partition.yml above. But, as I said, removing the comment changes nothing here.

  • This is very odd. I have supported multiple cases with the static Partition Manager configurations before.

    Without knowing the internal of the Partition Manager scripts, and based on just the difference, can you try renaming the file to pm_static.yml and do a pristine build? I will also look into it at the same time.

  • Does this mean that the files are otherwise correct, like the size values and the device tree in general?

    I am always doing pristine builds, as otherwise the build does not even try to start the partition manager script and just skips over it. So everytime I delete the build folder and have to build from start, I imagine until it works properly.

    Apart from configurations, NO custom scripts are used for partitions. The scripts only handle the inclusion of the bootloader and partition manager for a release build. If I rename the script, the same error occurs.

    As the error happens in the script delivered by Nordic, maybe it is something in the device tree that is wrong?

  • To double check here, when you mentioned renaming of the script file, did you rename partition_manager.cmake or your partition.yml file? I'm sory I was not clear, but I meant renaming the partition.yml configuration file, not any script file.

    Edit: Sorry, I reread your replies and see that I misunderstood you. I hope it is clear that if you want to provide a partitioning configuration to the Partition Manager, then you need to use pm_static.yml file, as described in the documentation I linked.

    In any cases, I think my last guess was not correct, so my apology, but please restore all the file names.

    Bjoern Bialy said:
    As the error happens in the script delivered by Nordic, maybe it is something in the device tree that is wrong?

    You are likely right here. I think the partition_manager.cmake is unable to parse the macro DT_SIZE_M that you used to define the size of the external flash device. Could you please try using 8388608 instead of DT_SIZE_M(8)?

    I attempted to build with your files today and was able to detect a few issues:

    • You are trying to define the partitions in the overlay file. Please note that while you use the Partition Manager, the Partition Manager will override all partitioning done in Devicetree (DT).

      In your setup, you want MCUboot, and therefore Partition Manager will always be enabled.
      Therefore, please don't setup the partitions in the DT.
      Your specific partitioning requirements should be configured with pm_static.yml.

    • You are choosing a partition on your DT as the chosen pm-ext-flash node. This won't work.
      pm-ext-flash expects an external flash node. In other word, you need to specify your flash_at25pe80 device.

    • Please remember to apply all DT overlay to both the main application and the mcuboot child image.
      You haven't mentioned this, and I think you have already done it, or you would have had many build issues.

    • The unit address and first address in 'reg' (0x2000XYZW) don't match warning messages you receive comes from your partitioning setup in the DT. It seems that you are not defining the partition properly here.
      Details are below, since as mentioned above, this partitioning section could be removed altogether.

    From here on, I will explain the initial issue in your question with some information I found in my research.

    The concern was regarding these warnings:

    Fullscreen
    1
    2
    unit address and first address in 'reg' (0x200090000) don't match for /soc/spi@40004000/flash_at25pe80@2/partitions/partition@0
    unit address and first address in 'reg' (0x200090400) don't match for /soc/spi@40004000/flash_at25pe80@2/partitions/partition@1
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    And the root cause is this section in your overlay file:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    partitions {
    compatible = "fixed-partitions";
    #address-cells = < 2 >;
    #size-cells = < 1 >;
    confflash: partition@0 {
    label = "config";
    reg = < 2 0x90000 0x400 >;
    };
    extflash: partition@1 {
    label = "external-flash";
    reg = < 2 0x90400 0xFFC00 >;
    };
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Consider this hypothetical pseudo-code DT node:

    Fullscreen
    1
    2
    3
    4
    some_partition: partition@12345678 {
    label = "human readable name";
    reg = <0xABCD0000 0x00001000>;
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Then the unit address is the 12345678 part, and the first-address-in-reg is the 0xABCD0000 part.

    This is defined in the Devicetree spec. Refer to: https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html, section 2.2.

    Other than that, I also find your value for the address-cells and the start offset of the partitions strange. Please review why you decided those value like that.

    In the Devicetree spec I linked above, you can also find the address-cells and size-cells properties explained in section 2.3.5.

    Finally, here is how the section should be to avoid the value. This is without concerning about the correctness of the values.

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    &flash_at25pe80 {
    partitions {
    compatible = "fixed-partitions";
    #address-cells = < 1 >;
    #size-cells = < 1 >;
    confflash: partition@90000 {
    label = "config";
    reg = < 0x90000 0x400 >;
    };
    extflash: partition@90400 {
    label = "external-flash";
    reg = < 0x90400 0xFFC00 >;
    };
    };
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    Finally, I apologize that my replies thus far have been off the mark.

Reply
  • To double check here, when you mentioned renaming of the script file, did you rename partition_manager.cmake or your partition.yml file? I'm sory I was not clear, but I meant renaming the partition.yml configuration file, not any script file.

    Edit: Sorry, I reread your replies and see that I misunderstood you. I hope it is clear that if you want to provide a partitioning configuration to the Partition Manager, then you need to use pm_static.yml file, as described in the documentation I linked.

    In any cases, I think my last guess was not correct, so my apology, but please restore all the file names.

    Bjoern Bialy said:
    As the error happens in the script delivered by Nordic, maybe it is something in the device tree that is wrong?

    You are likely right here. I think the partition_manager.cmake is unable to parse the macro DT_SIZE_M that you used to define the size of the external flash device. Could you please try using 8388608 instead of DT_SIZE_M(8)?

    I attempted to build with your files today and was able to detect a few issues:

    • You are trying to define the partitions in the overlay file. Please note that while you use the Partition Manager, the Partition Manager will override all partitioning done in Devicetree (DT).

      In your setup, you want MCUboot, and therefore Partition Manager will always be enabled.
      Therefore, please don't setup the partitions in the DT.
      Your specific partitioning requirements should be configured with pm_static.yml.

    • You are choosing a partition on your DT as the chosen pm-ext-flash node. This won't work.
      pm-ext-flash expects an external flash node. In other word, you need to specify your flash_at25pe80 device.

    • Please remember to apply all DT overlay to both the main application and the mcuboot child image.
      You haven't mentioned this, and I think you have already done it, or you would have had many build issues.

    • The unit address and first address in 'reg' (0x2000XYZW) don't match warning messages you receive comes from your partitioning setup in the DT. It seems that you are not defining the partition properly here.
      Details are below, since as mentioned above, this partitioning section could be removed altogether.

    From here on, I will explain the initial issue in your question with some information I found in my research.

    The concern was regarding these warnings:

    Fullscreen
    1
    2
    unit address and first address in 'reg' (0x200090000) don't match for /soc/spi@40004000/flash_at25pe80@2/partitions/partition@0
    unit address and first address in 'reg' (0x200090400) don't match for /soc/spi@40004000/flash_at25pe80@2/partitions/partition@1
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    And the root cause is this section in your overlay file:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    partitions {
    compatible = "fixed-partitions";
    #address-cells = < 2 >;
    #size-cells = < 1 >;
    confflash: partition@0 {
    label = "config";
    reg = < 2 0x90000 0x400 >;
    };
    extflash: partition@1 {
    label = "external-flash";
    reg = < 2 0x90400 0xFFC00 >;
    };
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Consider this hypothetical pseudo-code DT node:

    Fullscreen
    1
    2
    3
    4
    some_partition: partition@12345678 {
    label = "human readable name";
    reg = <0xABCD0000 0x00001000>;
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Then the unit address is the 12345678 part, and the first-address-in-reg is the 0xABCD0000 part.

    This is defined in the Devicetree spec. Refer to: https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html, section 2.2.

    Other than that, I also find your value for the address-cells and the start offset of the partitions strange. Please review why you decided those value like that.

    In the Devicetree spec I linked above, you can also find the address-cells and size-cells properties explained in section 2.3.5.

    Finally, here is how the section should be to avoid the value. This is without concerning about the correctness of the values.

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    &flash_at25pe80 {
    partitions {
    compatible = "fixed-partitions";
    #address-cells = < 1 >;
    #size-cells = < 1 >;
    confflash: partition@90000 {
    label = "config";
    reg = < 0x90000 0x400 >;
    };
    extflash: partition@90400 {
    label = "external-flash";
    reg = < 0x90400 0xFFC00 >;
    };
    };
    };
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    Finally, I apologize that my replies thus far have been off the mark.

Children
  • Thank you for your extensive answer! I have learned a lot and will most likely rebuild the configuration regarding anything with the partitioning and bootloader.

    I now have a new problem. When building with activated mcuboot, the build just fails after compiling:

    Fullscreen
    1
    FATAL ERROR: command exited with status 1: 'C:\Users\sw2.KRAFFT\ncs\toolchains\31f4403e35\opt\bin\cmake.EXE' --build 'd:\GitLab\carl-ble-sensor-firmware\build'
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    The only thing I found is that the build process can't seem to find the SPI configuration:

    Fullscreen
    1
    c:/users/sw2.krafft/ncs/toolchains/31f4403e35/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd.exe: zephyr/drivers/flash/libdrivers__flash.a(spi_nor.c.obj):(.rodata.spi_nor_config_0+0x0): undefined reference to `__device_dts_ord_100'
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    But it worked fine without the bootloader. Mcuboot and the application use the same device tree, as I can see in the dts files in the build folder, but it somehow can't find it.

  • Have you enabled CONFIG_SPI in MCUboot?

    The simplest way to do so is by adding an overlay file for the mcuboot child image in <project root>/child_image/mcuboot.conf.

    There are other ways explained in the Image Specific Variables section of this page: https://developer.nordicsemi.com/nRF_Connect_SDK/doc/2.4.1/nrf/app_dev/multi_image/index.html#image-specific-variables.

  • CONFIG_SPI is enabled, it appears in the build configuration in Mcuboot:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #
    # MCUboot-specific configuration options
    #
    # CONFIG_BOOT_USE_MIN_PARTITION_SIZE is not set
    CONFIG_PM_PARTITION_SIZE_MCUBOOT_SCRATCH=0x1e000
    CONFIG_PM_PARTITION_SIZE_MCUBOOT_PAD=0x200
    CONFIG_PM_PARTITION_SIZE_MCUBOOT=0xc000
    CONFIG_MCUBOOT_NRF_CLEANUP_PERIPHERAL=y
    CONFIG_BOOT_SIGNATURE_KEY_FILE="D:/GitLab/carl-ble-sensor-firmware/keys/mcuboot_sign.pem"
    CONFIG_BOOT_ERASE_PROGRESSIVELY=y
    # CONFIG_BOOT_IMAGE_ACCESS_HOOKS is not set
    CONFIG_MCUBOOT=y
    CONFIG_BOOT_USE_MBEDTLS=y
    # CONFIG_NRF_CC310_BL is not set
    #
    # MCUBoot settings
    #
    # CONFIG_SINGLE_APPLICATION_SLOT is not set
    # CONFIG_BOOT_SIGNATURE_TYPE_NONE is not set
    CONFIG_BOOT_SIGNATURE_TYPE_RSA=y
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • I can't see anything that immediately stand out. Could you please just build one more time (not pristine build/clean and rebuild) and share the full log?

    It might also be helpful to look at the preprocessed spi_nor.c file to see what expanded into the missing ordinal. The method is documented here: https://developer.nordicsemi.com/nRF_Connect_SDK/doc/2.4.1/zephyr/build/dts/troubleshooting.html#look-at-the-preprocessor-output.

  • I've deleted the whole build folder and created a new build configuration.

    Two errors stick out to me in line 475:

    Fullscreen
    1
    c:/users/sw2.krafft/ncs/toolchains/31f4403e35/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd.exe: zephyr/drivers/flash/libdrivers__flash.a(spi_nor.c.obj):(.rodata.spi_nor_config_0+0x0): undefined reference to `__device_dts_ord_100'
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    This the SPI error I've suspected. And earlier at line 73 (with context):

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CMake Warning (dev) at C:/carl-ble-sensor-firmware/build/mcuboot/child_image_preload.cmake:8 (set):
    Syntax error in cmake code at
    C:/carl-ble-sensor-firmware/build/mcuboot/child_image_preload.cmake:8
    when parsing string
    C:\Users\sw2.KRAFFT\ncs\toolchains\31f4403e35\opt\bin\python.exe
    Invalid escape sequence \U
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    I'm not sure where the error with the escape sequence comes from.

    I'm also not entirely sure what to do with the created spi_nor.c.i. __device_dts_ord_100 is defined as a struct and also used as part of a SPI configuration. It appears at two positions:

    Fullscreen
    1
    2
    # 968 "C:/Users/sw2.KRAFFT/ncs/zephyr/include/zephyr/device.h"
    extern const struct device __device_dts_ord_0; extern const struct device __device_dts_ord_12; extern const struct device __device_dts_ord_11; extern const struct device __device_dts_ord_1; extern const struct device __device_dts_ord_7; extern const struct device __device_dts_ord_58; extern const struct device __device_dts_ord_86; extern const struct device __device_dts_ord_62; extern const struct device __device_dts_ord_49; extern const struct device __device_dts_ord_95; extern const struct device __device_dts_ord_96; extern const struct device __device_dts_ord_97; extern const struct device __device_dts_ord_98; extern const struct device __device_dts_ord_84; extern const struct device __device_dts_ord_8; extern const struct device __device_dts_ord_91; extern const struct device __device_dts_ord_92; extern const struct device __device_dts_ord_9; extern const struct device __device_dts_ord_93; extern const struct device __device_dts_ord_94; extern const struct device __device_dts_ord_100; extern const struct device __device_dts_ord_101; extern const struct device __device_dts_ord_102; extern const struct device __device_dts_ord_64; extern const struct device __device_dts_ord_59; extern const struct device __device_dts_ord_78; extern const struct device __device_dts_ord_71; extern const struct device __device_dts_ord_51; extern const struct device __device_dts_ord_48; extern const struct device __device_dts_ord_88; extern const struct device __device_dts_ord_52; extern const struct device __device_dts_ord_53; extern const struct device __device_dts_ord_54; extern const struct device __device_dts_ord_55; extern const struct device __device_dts_ord_56; extern const struct device __device_dts_ord_57; extern const struct device __device_dts_ord_42; extern const struct device __device_dts_ord_46; extern const struct device __device_dts_ord_89; extern const struct device __device_dts_ord_90; extern const struct device __device_dts_ord_66; extern const struct device __device_dts_ord_63; extern const struct device __device_dts_ord_3; extern const struct device __device_dts_ord_2; extern const struct device __device_dts_ord_4; extern const struct device __device_dts_ord_36; extern const struct device __device_dts_ord_37; extern const struct device __device_dts_ord_38; extern const struct device __device_dts_ord_39; extern const struct device __device_dts_ord_40; extern const struct device __device_dts_ord_5; extern const struct device __device_dts_ord_26; extern const struct device __device_dts_ord_6; extern const struct device __device_dts_ord_27; extern const struct device __device_dts_ord_28; extern const struct device __device_dts_ord_29; extern const struct device __device_dts_ord_30; extern const struct device __device_dts_ord_31; extern const struct device __device_dts_ord_32; extern const struct device __device_dts_ord_33; extern const struct device __device_dts_ord_34; extern const struct device __device_dts_ord_35; extern const struct device __device_dts_ord_13; extern const struct device __device_dts_ord_19; extern const struct device __device_dts_ord_20; extern const struct device __device_dts_ord_21; extern const struct device __device_dts_ord_16; extern const struct device __device_dts_ord_41; extern const struct device __device_dts_ord_45; extern const struct device __device_dts_ord_44; extern const struct device __device_dts_ord_43; extern const struct device __device_dts_ord_17; extern const struct device __device_dts_ord_22; extern const struct device __device_dts_ord_24; extern const struct device __device_dts_ord_25; extern const struct device __device_dts_ord_23; extern const struct device __device_dts_ord_10;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 1359 "C:/Users/sw2.KRAFFT/ncs/zephyr/drivers/flash/spi_nor.c"
    static const struct spi_nor_config spi_nor_config_0 = {
    .spi = { .bus = (&__device_dts_ord_100), .config = { .frequency = 8000000, .operation = (((8) << (5U))) | 0 | 0, .slave = 2, .cs = (&(struct spi_cs_control) { .gpio = { .port = (&__device_dts_ord_3), .pin = 23, .dt_flags = 1, }, .delay = (0), }), } }
    ,
    .layout = {
    .pages_count = ((8388608 / 8) / 4096),
    .pages_size = 4096,
    },
    .flash_size = 8388608 / 8,
    .jedec_id = {31 , 37 , 0 },
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    I'm not able to paste long texts somehow in the code window, I click 'okay' and nothing happens. Is there any other way to paste or attach the log and the spi_nor.c.i?