Add a new JEDEC flash memory device on QSPI

Hello all,

I have been trying to add a new FLASH memory device on QSPI by adding it in the overlay device tree file.

Unfortunately the linker fails as below

FAILED: zephyr/zephyr_pre0.elf zephyr/zephyr_pre0.map /Users/marcorussi/firmware/urbana/device-firmware/build/zephyr/zephyr_pre0.map 

: && ccache /Users/marcorussi/zephyr-sdk-0.15.2/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc  -gdwarf-4 zephyr/CMakeFiles/zephyr_pre0.dir/misc/empty_file.c.obj -o zephyr/zephyr_pre0.elf  zephyr/CMakeFiles/offsets.dir/./arch/arm/core/offsets/offsets.c.obj  tfm/secure_fw/s_veneers.o  -fuse-ld=bfd  -Wl,-T  zephyr/linker_zephyr_pre0.cmd  -Wl,-Map=/Users/marcorussi/firmware/urbana/device-firmware/build/zephyr/zephyr_pre0.map  -Wl,--whole-archive  app/libapp.a  zephyr/libzephyr.a  zephyr/arch/common/libarch__common.a  zephyr/arch/arch/arm/core/aarch32/libarch__arm__core__aarch32.a  zephyr/arch/arch/arm/core/aarch32/cortex_m/libarch__arm__core__aarch32__cortex_m.a  zephyr/arch/arch/arm/core/aarch32/cortex_m/cmse/libarch__arm__core__aarch32__cortex_m__cmse.a  zephyr/arch/arch/arm/core/aarch32/mpu/libarch__arm__core__aarch32__mpu.a  zephyr/lib/libc/newlib/liblib__libc__newlib.a  zephyr/soc/arm/common/cortex_m/libsoc__arm__common__cortex_m.a  zephyr/boards/arm/nrf5340dk_nrf5340/libboards__arm__nrf5340dk_nrf5340.a  zephyr/subsys/bluetooth/common/libsubsys__bluetooth__common.a  zephyr/subsys/bluetooth/host/libsubsys__bluetooth__host.a  zephyr/subsys/net/libsubsys__net.a  zephyr/subsys/random/libsubsys__random.a  zephyr/drivers/clock_control/libdrivers__clock_control.a  zephyr/drivers/console/libdrivers__console.a  zephyr/drivers/gpio/libdrivers__gpio.a  zephyr/drivers/i2c/libdrivers__i2c.a  zephyr/drivers/hwinfo/libdrivers__hwinfo.a  zephyr/drivers/flash/libdrivers__flash.a  zephyr/drivers/serial/libdrivers__serial.a  zephyr/drivers/bluetooth/libdrivers__bluetooth.a  zephyr/drivers/entropy/libdrivers__entropy.a  zephyr/drivers/timer/libdrivers__timer.a  zephyr/drivers/pinctrl/libdrivers__pinctrl.a  zephyr/drivers/mbox/libdrivers__mbox.a  modules/nrf/lib/fatal_error/lib..__nrf__lib__fatal_error.a  modules/nrf/modules/tfm/zephyr/libtfm_api_nrf.a  modules/trusted-firmware-m/libtfm_api.a  modules/hal_nordic/nrfx/libmodules__hal_nordic__nrfx.a  modules/libmetal/libmetal/lib/libmetal.a  modules/open-amp/open-amp/lib/libopen_amp.a  modules/nrfxlib/nrfxlib/nrf_security/src/zephyr/libmbedtls_zephyr.a  -Wl,--no-whole-archive  zephyr/kernel/libkernel.a  -L"/Users/marcorussi/zephyr-sdk-0.15.2/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.1.0/thumb/v8-m.main/nofp"  -L/Users/marcorussi/firmware/urbana/device-firmware/build/zephyr  -lgcc  zephyr/arch/common/libisr_tables.a  -no-pie  -Wl,--gc-sections  -Wl,--build-id=none  -Wl,--sort-common=descending  -Wl,--sort-section=alignment  -Wl,-u,_OffsetAbsSyms  -Wl,-u,_ConfigAbsSyms  -nostdlib  -static  -Wl,-X  -Wl,-N  -Wl,--orphan-handling=warn  -lm  -Wl,-lc  -L"/Users/marcorussi/zephyr-sdk-0.15.2/arm-zephyr-eabi/arm-zephyr-eabi"/lib/thumb/v8-m.main/nofp  -Wl,-lgcc  -lc  -specs=nano.specs  modules/nrfxlib/nrfxlib/nrf_security/src/libmbedcrypto.a  /Users/marcorussi/ncs/nrfxlib/crypto/nrf_oberon/lib/cortex-m33/soft-float/liboberon_mbedtls_3.0.12.a  modules/nrfxlib/nrfxlib/nrf_security/src/libmbedcrypto_base.a  -mcpu=cortex-m33  -mthumb  -mabi=aapcs  -mfp16-format=ieee  /Users/marcorussi/ncs/nrfxlib/crypto/nrf_oberon/lib/cortex-m33/soft-float/liboberon_3.0.12.a  -lc && cd /Users/marcorussi/firmware/urbana/device-firmware/build/zephyr && /opt/homebrew/Cellar/cmake/3.26.0/bin/cmake -E echo

/Users/marcorussi/zephyr-sdk-0.15.2/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.1.0/../../../../arm-zephyr-eabi/bin/ld.bfd: app/libapp.a(main.c.obj):/Users/marcorussi/firmware/urbana/device-firmware/src/main.c:109: undefined reference to `__device_dts_ord_141'

collect2: error: ld returned 1 exit status

ninja: build stopped: subcommand failed.

The device tree documentation says that this kind of problem could be due to missing related kconfig. I have added 

CONFIG_NORDIC_QSPI_NOR=y
 
in my prj.conf file. Indeed if I try to use the default mx25r64 device then it compiles successfully.
I get the device in the code as below:
const struct device *g_device_extflash = DEVICE_DT_GET(DT_ALIAS(extflash));
where the alias is defined in the overlay file:
aliases {
   extflash = &qspi;
}
the new flash memory device is defined in the overlay file as below:
&qspi {
   status = "okay";
   pinctrl-0 = <&qspi_default>;
   pinctrl-1 = <&qspi_sleep>;
   pinctrl-names = "default", "sleep";
   w25q16: w25q16jv@0 {
      compatible = "nordic,qspi-nor";
      reg = <0>;
      /* W25Q16JV supports only pp and pp4o */
      writeoc = "pp4o";
      /* W25Q16JV supports all readoc options */
      readoc = "read4io";
      sck-frequency = <8000000>;
      jedec-id = [ef 40 15];
      size = <16777216>;
      has-dpd;
      t-enter-dpd = <3000>;
      t-exit-dpd = <3000>;
   };
};
I really can't get a solution to this problem as I have tried anything for 2 days.
I hope someone can help.
Thanks
Marco
Parents Reply Children
No Data
Related