External SPI Flash Memory + File System + NRF 52832

Hi,

I am trying to implement a lightweight file system in my external flash memory (ISSI). After the implementation of file system, I want to store a .bin file and later access the file through c program. I am a beginner in nrf52 board and need some assistance in understanding the implementation method for the above.

  1. I need some direction for implementing file system in nrf52832. I am using the following Software/Hardware tools:
  • nRF52832
  • NRF CONNECT SDK 2.5.1
  • SPI FLash Memory: IS25LP128-JBLE
  • vscode
  • Windows 11 64 bits

       2. I would also like to if I can implement FATFS on the SPI flash memory using the nrf 52832. Is there a link for the lastest version of FAT FS code.

       3. I need some help in understanding if I can use supported files from nrf SDK v 2.5.1 for nrf52832 board? IS there some alteration needed before I upload them to my nrf 52832 board.

Best,

AP

Parents
  • Will this work for nrf 52832 board?

    As I have gone through the document and for external flash : "This type of configuration requires external flash device to be available on DK board. Currently following boards support the configuration: nrf52840dk_nrf52840 by nrf52840dk_nrf52840_qspi configuration." . SInce I have a nrf 52832dk board it does not support this board right?

  • Hi Dejan,

    I made some changes to my connections on my NRF52k:

    CLK: P0.25

    MISO: P0.24 (connected to SO on Flash)

    MOSI: P0.23 (connected to SI on Flash)

    CE: P0.22

    My overlay:

    /delete-node/ &storage_partition;
    
    / {
        chosen {
            nordic,pm-ext-flash = &IS25LP128;
        };
    };
    
    / {
    	fstab {
    		compatible = "zephyr,fstab";
    		lfs1: lfs1 {
    			compatible = "zephyr,fstab,littlefs";
    			mount-point = "/lfs1";
    			partition = <&lfs1_part>;
    			automount;
    			read-size = <16>;
    			prog-size = <16>;
    			cache-size = <64>;
    			lookahead-size = <32>;
    			block-cycles = <512>;
    		};
    	};
    };
    
    &spi2 {
        compatible = "nordic,nrf-spi";
    
        status = "okay";
    
        pinctrl-0 = <&spi2_default>;
    
        pinctrl-1 = <&spi2_sleep>;
    
        pinctrl-names = "default", "sleep";
    
        cs-gpios = <&gpio0 22 GPIO_ACTIVE_LOW>;
        
        IS25LP128: IS25LP128@0 {
            compatible = "jedec,spi-nor";
            status = "okay";
            label = "25LP128";
            reg = <0>;
            spi-max-frequency = <133000000>; /* Adjust based on your flash specifications */
            size = <0x8000000>; /* Adjust based on your flash size */
            has-dpd;
            t-enter-dpd = <3000>;
            t-exit-dpd = <30000>;
            jedec-id = [ 9D 60 18 ]; /* Adjust based on your flash JEDEC ID */
            //wp-gpios = < &gpio0 12 GPIO_ACTIVE_LOW>;
            //hold-gpios = < &gpio0 11 GPIO_ACTIVE_LOW>;
    
            //page_size = <2048>;
            //block_size = <131072>;
    
            };
        };
    
    &pinctrl {
        spi2_default: spi2_default {
            group1 {
                psels = <NRF_PSEL(SPIM_SCK, 0, 25)>, /* gpio 0 pin P0.25 */
                        <NRF_PSEL(SPIM_MISO, 0, 24)>, /* gpio 0 pin P0.24 */
                        <NRF_PSEL(SPIM_MOSI, 0, 23)>; /* gpio 0 pin P0.23 */
            };
        };
    
        spi2_sleep: spi2_sleep {
            group1 {
                psels = <NRF_PSEL(SPIM_SCK, 0, 25)>, /* gpio 0 pin P0.25 */
                        <NRF_PSEL(SPIM_MISO, 0, 24)>, /* gpio 0 pin P0.24 */
                        <NRF_PSEL(SPIM_MOSI, 0, 23)>; /* gpio 0 pin P0.23 */
            };
        };
    };
    
    &IS25LP128 {
        partitions {
    		compatible = "fixed-partitions";
    		#address-cells = <1>;
    		#size-cells = <1>;
    
    		lfs1_part: partition@0 {
    			label = "storage";
                reg = <0x00000000 0x02000000>;
    		};
    	};
    };
    
    

    Prj.conf:

    #
    # Copyright (c) 2019 Peter Bigot Consulting, LLC
    #
    # SPDX-License-Identifier: Apache-2.0
    #
    
    # Optionally force the file system to be recreated
    # CONFIG_APP_WIPE_STORAGE=y
    
    # fs_dirent structures are big.
    CONFIG_MAIN_STACK_SIZE=4096
    
    # Let __ASSERT do its job
    CONFIG_DEBUG=y
    
    CONFIG_LOG=y
    CONFIG_LOG_MODE_MINIMAL=y
    
    CONFIG_FLASH=y
    CONFIG_FLASH_MAP=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    
    CONFIG_FILE_SYSTEM=y
    CONFIG_FILE_SYSTEM_LITTLEFS=y
    
    CONFIG_PARTITION_MANAGER_ENABLED=y
    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_BOOTLOADER_MCUBOOT=y
    

    The trace: 

    Flash log:

     *  Executing task: nRF Connect: Build [pristine]: littlefs/build (active) 
    
    Building littlefs
    west build --build-dir c:/Users/prasa/Desktop/nrf52dk_backup/littlefs/build c:/Users/prasa/Desktop/nrf52dk_backup/littlefs --pristine --board nrf52dk_nrf52832 --no-sysbuild -- -DNCS_TOOLCHAIN_VERSION=NONE -DCONF_FILE=c:/Users/prasa/Desktop/nrf52dk_backup/littlefs/prj.conf -DDTC_OVERLAY_FILE=c:/Users/prasa/Desktop/nrf52dk_backup/littlefs/nrf52dk_nrf52832.overlay
    
    -- west build: generating a build system
    Loading Zephyr default modules (Zephyr base).
    -- Application: C:/Users/prasa/Desktop/nrf52dk_backup/littlefs
    -- CMake version: 3.20.5
    -- Found Python3: C:/Users/prasa/Desktop/nrf52dk/toolchains/c57af46cb7/opt/bin/python.exe (found suitable version "3.8.2", minimum required is "3.8") found components: Interpreter 
    -- Cache files will be written to: C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/.cache
    -- Zephyr version: 3.4.99 (C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr)
    -- Found west (found suitable version "1.1.0", minimum required is "0.14.0")
    -- Board: nrf52dk_nrf52832
    -- Found host-tools: zephyr 0.16.1 (C:/Users/prasa/Desktop/nrf52dk/toolchains/c57af46cb7/opt/zephyr-sdk)
    -- Found toolchain: zephyr 0.16.1 (C:/Users/prasa/Desktop/nrf52dk/toolchains/c57af46cb7/opt/zephyr-sdk)
    -- Found Dtc: C:/Users/prasa/Desktop/nrf52dk/toolchains/c57af46cb7/opt/bin/dtc.exe (found suitable version "1.4.7", minimum required is "1.4.6") 
    -- Found BOARD.dts: C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/boards/arm/nrf52dk_nrf52832/nrf52dk_nrf52832.dts
    -- Found devicetree overlay: c:/Users/prasa/Desktop/nrf52dk_backup/littlefs/nrf52dk_nrf52832.overlay
    'label' is marked as deprecated in 'properties:' in C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/dts/bindings\mtd\jedec,spi-nor.yaml for node /soc/spi@40023000/IS25LP128@0.
    -- Generated zephyr.dts: C:/Users/prasa/Desktop/nrf52dk_backup/littlefs/build/zephyr/zephyr.dts
    -- Generated devicetree_generated.h: C:/Users/prasa/Desktop/nrf52dk_backup/littlefs/build/zephyr/include/generated/devicetree_generated.h
    -- Including generated dts.cmake file: C:/Users/prasa/Desktop/nrf52dk_backup/littlefs/build/zephyr/dts.cmake
    
    warning: PM_PARTITION_REGION_SETTINGS_STORAGE_EXTERNAL (defined at C:/Users/prasa/Desktop/nrf52dk/v2
    .5.0/nrf\subsys\partition_manager\Kconfig.template.partition_region:2) was assigned the value 'y'
    but got the value 'n'. Check these unsatisfied dependencies: (SETTINGS_FCB || SETTINGS_NVS) (=n).
    See http://docs.zephyrproject.org/latest/kconfig.html#CONFIG_PM_PARTITION_REGION_SETTINGS_STORAGE_EX
    TERNAL and/or look up PM_PARTITION_REGION_SETTINGS_STORAGE_EXTERNAL in the menuconfig/guiconfig
    interface. The Application Development Primer, Setting Configuration Values, and Kconfig - Tips and
    Best Practices sections of the manual might be helpful too.
    
    
    warning: PM_PARTITION_REGION_NVS_STORAGE_EXTERNAL (defined at C:/Users/prasa/Desktop/nrf52dk/v2.5.0/
    nrf\subsys\partition_manager\Kconfig.template.partition_region:2) was assigned the value 'y' but got
    the value 'n'. Check these unsatisfied dependencies: NVS (=n). See
    http://docs.zephyrproject.org/latest/kconfig.html#CONFIG_PM_PARTITION_REGION_NVS_STORAGE_EXTERNAL
    and/or look up PM_PARTITION_REGION_NVS_STORAGE_EXTERNAL in the menuconfig/guiconfig interface. The
    Application Development Primer, Setting Configuration Values, and Kconfig - Tips and Best Practices
    sections of the manual might be helpful too.
    
    Parsing C:/Users/prasa/Desktop/nrf52dk_backup/littlefs/Kconfig
    Loaded configuration 'C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/boards/arm/nrf52dk_nrf52832/nrf52dk_nrf52832_defconfig'
    Merged configuration 'c:/Users/prasa/Desktop/nrf52dk_backup/littlefs/prj.conf'
    Configuration saved to 'C:/Users/prasa/Desktop/nrf52dk_backup/littlefs/build/zephyr/.config'
    Kconfig header saved to 'C:/Users/prasa/Desktop/nrf52dk_backup/littlefs/build/zephyr/include/generated/autoconf.h'
    -- Found GnuLd: c:/users/prasa/desktop/nrf52dk/toolchains/c57af46cb7/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd.exe (found version "2.38") 
    -- The C compiler identification is GNU 12.2.0
    -- The CXX compiler identification is GNU 12.2.0
    -- The ASM compiler identification is GNU
    -- Found assembler: C:/Users/prasa/Desktop/nrf52dk/toolchains/c57af46cb7/opt/zephyr-sdk/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc.exe
    -- Found partition manager static configuration: C:/Users/prasa/Desktop/nrf52dk_backup/littlefs/pm_static.yml
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/Users/prasa/Desktop/nrf52dk_backup/littlefs/build
    -- west build: building application
    [1/156] Generating ../../zephyr/include/generated/ncs_version.h
    [2/156] Generating include/generated/version.h
    -- Zephyr version: 3.4.99 (C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr), build: v3.4.99-ncs1
    [3/156] Generating misc/generated/syscalls.json, misc/generated/struct_tags.json
    [4/156] Generating include/generated/kobj-types-enum.h, include/generated/otype-to-str.h, include/generated/otype-to-size.h
    [5/156] Generating include/generated/driver-validation.h
    [6/156] Generating include/generated/syscall_dispatch.c, include/generated/syscall_list.h
    [7/156] Building C object zephyr/CMakeFiles/offsets.dir/arch/arm/core/offsets/offsets.c.obj
    [8/156] Generating include/generated/offsets.h
    [9/156] Building ASM object zephyr/arch/arch/arm/core/aarch32/CMakeFiles/arch__arm__core__aarch32.dir/swap_helper.S.obj
    [10/156] Building ASM object zephyr/arch/arch/arm/core/aarch32/CMakeFiles/arch__arm__core__aarch32.dir/isr_wrapper.S.obj
    [11/156] Building C object zephyr/arch/arch/arm/core/aarch32/CMakeFiles/arch__arm__core__aarch32.dir/__/common/tls.c.obj
    [12/156] Building C object zephyr/arch/arch/arm/core/aarch32/CMakeFiles/arch__arm__core__aarch32.dir/thread.c.obj
    [13/156] Building ASM object zephyr/arch/arch/arm/core/aarch32/cortex_m/CMakeFiles/arch__arm__core__aarch32__cortex_m.dir/exc_exit.S.obj
    [14/156] Building ASM object zephyr/arch/arch/arm/core/aarch32/cortex_m/CMakeFiles/arch__arm__core__aarch32__cortex_m.dir/fault_s.S.obj
    [15/156] Building C object zephyr/arch/arch/arm/core/aarch32/cortex_m/CMakeFiles/arch__arm__core__aarch32__cortex_m.dir/fault.c.obj
    [16/156] Building C object zephyr/arch/arch/arm/core/aarch32/cortex_m/CMakeFiles/arch__arm__core__aarch32__cortex_m.dir/fpu.c.obj
    [17/156] Building ASM object zephyr/arch/arch/arm/core/aarch32/cortex_m/CMakeFiles/arch__arm__core__aarch32__cortex_m.dir/reset.S.obj
    [18/156] Building C object zephyr/arch/arch/arm/core/aarch32/cortex_m/CMakeFiles/arch__arm__core__aarch32__cortex_m.dir/irq_init.c.obj
    [19/156] Building ASM object zephyr/arch/arch/arm/core/aarch32/CMakeFiles/arch__arm__core__aarch32.dir/nmi_on_reset.S.obj
    [20/156] Building C object zephyr/arch/arch/arm/core/aarch32/CMakeFiles/arch__arm__core__aarch32.dir/swap.c.obj
    [21/156] Building C object zephyr/arch/arch/arm/core/aarch32/CMakeFiles/arch__arm__core__aarch32.dir/prep_c.c.obj
    [22/156] Building C object zephyr/arch/arch/arm/core/aarch32/CMakeFiles/arch__arm__core__aarch32.dir/nmi.c.obj
    [23/156] Building C object zephyr/arch/common/CMakeFiles/arch__common.dir/sw_isr_common.c.obj
    [24/156] Building C object zephyr/arch/common/CMakeFiles/isr_tables.dir/isr_tables.c.obj
    [25/156] Linking C static library zephyr\arch\common\libisr_tables.a
    [26/156] Linking C static library zephyr\arch\common\libarch__common.a
    [27/156] Building C object zephyr/arch/arch/arm/core/aarch32/CMakeFiles/arch__arm__core__aarch32.dir/fatal.c.obj
    [28/156] Building ASM object zephyr/arch/arch/arm/core/aarch32/CMakeFiles/arch__arm__core__aarch32.dir/cpu_idle.S.obj
    [29/156] Building C object zephyr/arch/arch/arm/core/aarch32/CMakeFiles/arch__arm__core__aarch32.dir/irq_manage.c.obj
    [30/156] Building C object zephyr/arch/arch/arm/core/aarch32/mpu/CMakeFiles/arch__arm__core__aarch32__mpu.dir/arm_core_mpu.c.obj
    [31/156] Linking C static library zephyr\arch\arch\arm\core\aarch32\libarch__arm__core__aarch32.a
    [32/156] Building ASM object zephyr/arch/arch/arm/core/aarch32/cortex_m/CMakeFiles/arch__arm__core__aarch32__cortex_m.dir/__aeabi_read_tp.S.obj
    [33/156] Building C object zephyr/arch/arch/arm/core/aarch32/mpu/CMakeFiles/arch__arm__core__aarch32__mpu.dir/arm_mpu.c.obj
    [34/156] Linking C static library zephyr\arch\arch\arm\core\aarch32\mpu\libarch__arm__core__aarch32__mpu.a
    [35/156] Building C object zephyr/lib/libc/picolibc/CMakeFiles/lib__libc__picolibc.dir/libc-hooks.c.obj
    [36/156] Building C object zephyr/lib/libc/common/CMakeFiles/lib__libc__common.dir/source/stdlib/abort.c.obj
    [37/156] Linking C static library zephyr\lib\libc\picolibc\liblib__libc__picolibc.a
    [38/156] Building C object zephyr/lib/libc/common/CMakeFiles/lib__libc__common.dir/source/stdlib/malloc.c.obj
    [39/156] Linking C static library zephyr\lib\libc\common\liblib__libc__common.a
    [40/156] Building C object zephyr/soc/soc/arm/common/cortex_m/CMakeFiles/soc__arm__common__cortex_m.dir/arm_mpu_regions.c.obj
    [41/156] Building C object zephyr/soc/soc/arm/nordic_nrf/nrf52/CMakeFiles/soc__arm__nordic_nrf__nrf52.dir/soc.c.obj
    [42/156] Linking C static library zephyr\soc\soc\arm\common\cortex_m\libsoc__arm__common__cortex_m.a
    [43/156] Linking C static library zephyr\soc\soc\arm\nordic_nrf\nrf52\libsoc__arm__nordic_nrf__nrf52.a
    [44/156] Building C object zephyr/subsys/fs/CMakeFiles/subsys__fs.dir/fs.c.obj
    [45/156] Building C object CMakeFiles/app.dir/src/main.c.obj
    [46/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/fdtable.c.obj
    [47/156] Linking C static library app\libapp.a
    [48/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/cbprintf_packaged.c.obj
    [49/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/dec.c.obj
    [50/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/timeutil.c.obj
    [51/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/hex.c.obj
    [52/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/rb.c.obj
    [53/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/printk.c.obj
    [54/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/sem.c.obj
    [55/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/thread_entry.c.obj
    [56/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/onoff.c.obj
    [57/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/bitarray.c.obj
    [58/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/heap-validate.c.obj
    [59/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/notify.c.obj
    [60/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/heap.c.obj
    [61/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/multi_heap.c.obj
    [62/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/assert.c.obj
    [63/156] Building C object zephyr/CMakeFiles/zephyr.dir/misc/generated/configs.c.obj
    [64/156] Building ASM object zephyr/CMakeFiles/zephyr.dir/soc/arm/nordic_nrf/common/soc_nrf_common.S.obj
    [65/156] Building C object zephyr/CMakeFiles/zephyr.dir/lib/os/cbprintf_complete.c.obj
    [66/156] Building C object zephyr/CMakeFiles/zephyr.dir/soc/arm/nordic_nrf/validate_base_addresses.c.obj
    [67/156] Building C object zephyr/CMakeFiles/zephyr.dir/soc/arm/nordic_nrf/validate_enabled_instances.c.obj
    [68/156] Building C object zephyr/CMakeFiles/zephyr.dir/subsys/logging/log_minimal.c.obj
    [69/156] Building C object zephyr/CMakeFiles/zephyr.dir/subsys/tracing/tracing_none.c.obj
    [70/156] Building C object zephyr/CMakeFiles/zephyr.dir/subsys/storage/flash_map/flash_map_layout.c.obj
    [71/156] Building C object zephyr/CMakeFiles/zephyr.dir/subsys/storage/flash_map/flash_map.c.obj
    [72/156] Building C object zephyr/CMakeFiles/zephyr.dir/C_/Users/prasa/Desktop/nrf52dk/v2.5.0/nrf/subsys/partition_manager/flash_map_partition_manager.c.obj
    [73/156] Building C object zephyr/arch/arch/arm/core/aarch32/cortex_m/CMakeFiles/arch__arm__core__aarch32__cortex_m.dir/thread_abort.c.obj
    [74/156] Linking C static library zephyr\libzephyr.a
    [75/156] Building C object zephyr/arch/arch/arm/core/aarch32/cortex_m/CMakeFiles/arch__arm__core__aarch32__cortex_m.dir/scb.c.obj
    [76/156] Generating linker_zephyr_pre0.cmd
    [77/156] Building ASM object zephyr/arch/arch/arm/core/aarch32/cortex_m/CMakeFiles/arch__arm__core__aarch32__cortex_m.dir/vector_table.S.obj
    [78/156] Linking C static library zephyr\arch\arch\arm\core\aarch32\cortex_m\libarch__arm__core__aarch32__cortex_m.a
    [79/156] Building C object zephyr/drivers/console/CMakeFiles/drivers__console.dir/uart_console.c.obj
    [80/156] Building C object zephyr/subsys/fs/CMakeFiles/subsys__fs.dir/fs_impl.c.obj
    [81/156] Linking C static library zephyr\drivers\console\libdrivers__console.a
    [82/156] Building C object zephyr/subsys/fs/CMakeFiles/subsys__fs.dir/littlefs_fs.c.obj
    [83/156] Building C object zephyr/drivers/clock_control/CMakeFiles/drivers__clock_control.dir/clock_control_nrf.c.obj
    [84/156] Linking C static library zephyr\subsys\fs\libsubsys__fs.a
    [85/156] Linking C static library zephyr\drivers\clock_control\libdrivers__clock_control.a
    [86/156] Building C object zephyr/drivers/flash/CMakeFiles/drivers__flash.dir/flash_page_layout.c.obj
    [87/156] Building C object zephyr/drivers/flash/CMakeFiles/drivers__flash.dir/soc_flash_nrf.c.obj
    [88/156] Building C object zephyr/drivers/flash/CMakeFiles/drivers__flash.dir/spi_nor.c.obj
    [89/156] Building C object zephyr/drivers/flash/CMakeFiles/drivers__flash.dir/jesd216.c.obj
    [90/156] Linking C static library zephyr\drivers\flash\libdrivers__flash.a
    [91/156] Building C object zephyr/CMakeFiles/zephyr_pre0.dir/misc/empty_file.c.obj
    [92/156] Building C object zephyr/drivers/gpio/CMakeFiles/drivers__gpio.dir/gpio_nrfx.c.obj
    [93/156] Building C object zephyr/drivers/pinctrl/CMakeFiles/drivers__pinctrl.dir/common.c.obj
    [94/156] Linking C static library zephyr\drivers\gpio\libdrivers__gpio.a
    [95/156] Building C object zephyr/drivers/serial/CMakeFiles/drivers__serial.dir/uart_nrfx_uarte.c.obj
    [96/156] Linking C static library zephyr\drivers\serial\libdrivers__serial.a
    [97/156] Building C object zephyr/drivers/pinctrl/CMakeFiles/drivers__pinctrl.dir/pinctrl_nrf.c.obj
    [98/156] Linking C static library zephyr\drivers\pinctrl\libdrivers__pinctrl.a
    [99/156] Building C object zephyr/drivers/timer/CMakeFiles/drivers__timer.dir/sys_clock_init.c.obj
    [100/156] Building C object zephyr/drivers/spi/CMakeFiles/drivers__spi.dir/spi_nrfx_spi.c.obj
    [101/156] Building C object zephyr/drivers/spi/CMakeFiles/drivers__spi.dir/spi_nrfx_common.c.obj
    [102/156] Linking C static library zephyr\drivers\spi\libdrivers__spi.a
    [103/156] Building C object zephyr/drivers/timer/CMakeFiles/drivers__timer.dir/nrf_rtc_timer.c.obj
    [104/156] Building C object modules/hal_nordic/nrfx/CMakeFiles/modules__hal_nordic__nrfx.dir/C_/Users/prasa/Desktop/nrf52dk/v2.5.0/modules/hal/nordic/nrfx/mdk/system_nrf52.c.obj
    [105/156] Linking C static library zephyr\drivers\timer\libdrivers__timer.a
    [106/156] Building C object modules/hal_nordic/nrfx/CMakeFiles/modules__hal_nordic__nrfx.dir/nrfx_glue.c.obj
    [107/156] Building C object modules/hal_nordic/nrfx/CMakeFiles/modules__hal_nordic__nrfx.dir/C_/Users/prasa/Desktop/nrf52dk/v2.5.0/modules/hal/nordic/nrfx/helpers/nrfx_gppi_ppi.c.obj
    [108/156] Building C object modules/hal_nordic/nrfx/CMakeFiles/modules__hal_nordic__nrfx.dir/C_/Users/prasa/Desktop/nrf52dk/v2.5.0/modules/hal/nordic/nrfx/drivers/src/nrfx_nvmc.c.obj
    [109/156] Building C object modules/hal_nordic/nrfx/CMakeFiles/modules__hal_nordic__nrfx.dir/C_/Users/prasa/Desktop/nrf52dk/v2.5.0/modules/hal/nordic/nrfx/helpers/nrfx_flag32_allocator.c.obj
    [110/156] Building C object modules/hal_nordic/nrfx/CMakeFiles/modules__hal_nordic__nrfx.dir/C_/Users/prasa/Desktop/nrf52dk/v2.5.0/modules/hal/nordic/nrfx/drivers/src/nrfx_clock.c.obj
    [111/156] Building C object modules/hal_nordic/nrfx/CMakeFiles/modules__hal_nordic__nrfx.dir/C_/Users/prasa/Desktop/nrf52dk/v2.5.0/modules/hal/nordic/nrfx/drivers/src/nrfx_gpiote.c.obj
    [112/156] Building C object modules/hal_nordic/nrfx/CMakeFiles/modules__hal_nordic__nrfx.dir/C_/Users/prasa/Desktop/nrf52dk/v2.5.0/modules/hal/nordic/nrfx/drivers/src/nrfx_spi.c.obj
    [113/156] Building C object modules/hal_nordic/nrfx/CMakeFiles/modules__hal_nordic__nrfx.dir/C_/Users/prasa/Desktop/nrf52dk/v2.5.0/modules/hal/nordic/nrfx/drivers/src/nrfx_ppi.c.obj
    [114/156] Building C object modules/littlefs/CMakeFiles/modules__littlefs.dir/C_/Users/prasa/Desktop/nrf52dk/v2.5.0/modules/fs/littlefs/lfs_util.c.obj
    [115/156] Linking C static library modules\hal_nordic\nrfx\libmodules__hal_nordic__nrfx.a
    [116/156] Building C object modules/littlefs/CMakeFiles/modules__littlefs.dir/C_/Users/prasa/Desktop/nrf52dk/v2.5.0/modules/fs/littlefs/lfs.c.obj
    [117/156] Building C object modules/littlefs/CMakeFiles/modules__littlefs.dir/zephyr_lfs_crc.c.obj
    [118/156] Building C object modules/segger/CMakeFiles/modules__segger.dir/C_/Users/prasa/Desktop/nrf52dk/v2.5.0/modules/debug/segger/SEGGER/SEGGER_RTT.c.obj
    [119/156] Linking C static library modules\littlefs\libmodules__littlefs.a
    [120/156] Building C object modules/segger/CMakeFiles/modules__segger.dir/SEGGER_RTT_zephyr.c.obj
    [121/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/main_weak.c.obj
    [122/156] Linking C static library modules\segger\libmodules__segger.a
    [123/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/init.c.obj
    [124/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/errno.c.obj
    [125/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/busy_wait.c.obj
    [126/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/fatal.c.obj
    [127/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/banner.c.obj
    [128/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/device.c.obj
    [129/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/idle.c.obj
    [130/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/mem_slab.c.obj
    [131/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/kheap.c.obj
    [132/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/thread.c.obj
    [133/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/version.c.obj
    [134/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/mailbox.c.obj
    [135/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/queue.c.obj
    [136/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/sem.c.obj
    [137/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/mutex.c.obj
    [138/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/msg_q.c.obj
    [139/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/work.c.obj
    [140/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/stack.c.obj
    [141/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/sched.c.obj
    [142/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/system_work_q.c.obj
    [143/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/condvar.c.obj
    [144/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/xip.c.obj
    [145/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/dynamic_disabled.c.obj
    [146/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/mempool.c.obj
    [147/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/timeout.c.obj
    [148/156] Building C object zephyr/kernel/CMakeFiles/kernel.dir/timer.c.obj
    [149/156] Linking C static library zephyr\kernel\libkernel.a
    [150/156] Linking C executable zephyr\zephyr_pre0.elf
    [154/156] Building C object zephyr/CMakeFiles/zephyr_final.dir/misc/empty_file.c.obj
    [155/156] Linking C executable zephyr\zephyr.elf
    Memory region         Used Size  Region Size  %age Used
               FLASH:       62040 B       512 KB     11.83%
                 RAM:       11372 B        64 KB     17.35%
            IDT_LIST:          0 GB         2 KB      0.00%
    [156/156] Generating zephyr/merged.hex
     *  Terminal will be reused by tasks, press any key to close it. 
    
     *  Executing task: nRF Connect: Build: littlefs/build (active) 
    
    Building littlefs
    west build --build-dir c:/Users/prasa/Desktop/nrf52dk_backup/littlefs/build c:/Users/prasa/Desktop/nrf52dk_backup/littlefs
    
    ninja: no work to do.
     *  Terminal will be reused by tasks, press any key to close it. 
    
     *  Executing task: nRF Connect: Flash: littlefs/build (active) 
    
    Flashing build to 1050370044
    west flash -d c:\Users\prasa\Desktop\nrf52dk_backup\littlefs\build --skip-rebuild --dev-id 1050370044 --erase
    
    -- west flash: using runner nrfjprog
    -- runners.nrfjprog: mass erase requested
    -- runners.nrfjprog: Flashing file: c:\Users\prasa\Desktop\nrf52dk_backup\littlefs\build\zephyr\merged.hex
    [ ######               ]   0.000s | Erase file - Check image                                                      [ #################### ]   0.062s | Erase file - Done erasing                                                          
    [ ######               ]   0.000s | Program file - Checking image                                                 [ #####                ]   0.000s | Check image validity - Initialize device info                                 [ ##########           ]   0.000s | Check image validity - Check region 0 settings                                [ ###############      ]   0.000s | Check image validity - block 1 of 2                                           [ #################### ]   0.016s | Check image validity - Finished                                               [ #############        ]   0.000s | Program file - Programming                                                    [ ##########           ]   0.000s | Programming image - block 1 of 1                                              [ #################### ]   0.000s | Programming image - Write successful                                          [ #################### ]   1.120s | Program file - Done programming                                                    
    [ ######               ]   0.000s | Verify file - Check image                                                     [ #####                ]   0.000s | Check image validity - Initialize device info                                 [ ##########           ]   0.000s | Check image validity - Check region 0 settings                                [ ###############      ]   0.411s | Check image validity - block 1 of 2                                           [ #################### ]   0.017s | Check image validity - Finished                                               [ #############        ]   0.000s | Verify file - Verifying                                                       [ ##########           ]   0.000s | Verifying image - block 1 of 1                                                [ #################### ]   0.000s | Verifying image - Verify successful                                           [ #################### ]   0.415s | Verify file - Done verifying                                                       
    Enabling pin reset.
    Applying pin reset.
    -- runners.nrfjprog: Board with serial number 1050370044 flashed successfully.
     *  Terminal will be reused by tasks, press any key to close it. 
    
     *  Executing task: nRF Connect: Build: littlefs/build (active) 
    
    Building littlefs
    west build --build-dir c:/Users/prasa/Desktop/nrf52dk_backup/littlefs/build c:/Users/prasa/Desktop/nrf52dk_backup/littlefs
    
    ninja: no work to do.
     *  Terminal will be reused by tasks, press any key to close it. 
    
     *  Executing task: nRF Connect: Flash: littlefs/build (active) 
    
    Flashing build to 1050370044
    west flash -d c:\Users\prasa\Desktop\nrf52dk_backup\littlefs\build --skip-rebuild --dev-id 1050370044 --erase
    
    -- west flash: using runner nrfjprog
    -- runners.nrfjprog: mass erase requested
    -- runners.nrfjprog: Flashing file: c:\Users\prasa\Desktop\nrf52dk_backup\littlefs\build\zephyr\merged.hex
    [ ######               ]   0.000s | Erase file - Check image                                                      [ #################### ]   0.062s | Erase file - Done erasing                                                          
    [ ######               ]   0.000s | Program file - Checking image                                                 [ #####                ]   0.000s | Check image validity - Initialize device info                                 [ ##########           ]   0.000s | Check image validity - Check region 0 settings                                [ ###############      ]   0.000s | Check image validity - block 1 of 2                                           [ #################### ]   0.017s | Check image validity - Finished                                               [ #############        ]   0.000s | Program file - Programming                                                    [ ##########           ]   0.000s | Programming image - block 1 of 1                                              [ #################### ]   0.000s | Programming image - Write successful                                          [ #################### ]   1.123s | Program file - Done programming                                                    
    [ ######               ]   0.000s | Verify file - Check image                                                     [ #####                ]   0.000s | Check image validity - Initialize device info                                 [ ##########           ]   0.000s | Check image validity - Check region 0 settings                                [ ###############      ]   0.411s | Check image validity - block 1 of 2                                           [ #################### ]   0.017s | Check image validity - Finished                                               [ #############        ]   0.000s | Verify file - Verifying                                                       [ ##########           ]   0.000s | Verifying image - block 1 of 1                                                [ #################### ]   0.000s | Verifying image - Verify successful                                           [ #################### ]   0.416s | Verify file - Done verifying                                                       
    Enabling pin reset.
    Applying pin reset.
    -- runners.nrfjprog: Board with serial number 1050370044 flashed successfully.
     *  Terminal will be reused by tasks, press any key to close it. 

    I am getting a different device id read after flashing:

    E: Device id 32 01 06 does not match config 9d 60 18
    I: littlefs partition at /lfs1
    I: LittleFS version 2.5, disk version 2.0
    E: can't open flash area 3
    E: fs mount error (-19)
    E: Automount /lfs1 failed: -19
    *** Booting nRF Connect SDK v2.5.0 ***
    Sample program to r/w files on littlefs
    E: FAIL: unable to find flash area 3: -19
    

    BR,
    AP

  • Hi,

    For SPI support, you could try to add CONFIG_SPI_NOR=y to your configuration file.

    You could also verify that your jedec-id is correct.

    Regarding your trace, could you zoom in, and provide it again?

    Best regards,
    Dejan

  • Hi Dejan,

    CONFIG_SPI_NOR doesnot resolve the error.

    Jedec-id is correct : [9D 60 18]

    Trace:

    The single trigger after the sck goes low should be correct. Can I put a delay before receiving this input (miso)? If so, where should I place this code?

    COM 4:

    E: Device id 99 00 83 does not match config 9d 60 18
    I: littlefs partition at /lfs1
    I: LittleFS version 2.5, disk version 2.0
    E: can't open flash area 1
    E: fs mount error (-19)
    E: Automount /lfs1 failed: -19
    *** Booting nRF Connect SDK v2.5.0 ***
    Sample program to r/w files on littlefs
    E: FAIL: unable to find flash area 1: -19
    
    FAIL: statvfs: -19

    Br,

    AP

  • Hi,

    It looks like Device id does not match your configured id. I am referring to this line:



    Best regards,
    Dejan

  • Yes but isnt the device id 99 00 83 a junk value because of not detecting/getting the flash memory correct. If i change the jedec ifd to this value could it not have other error or flash the fs to wrong address or something.

Reply Children
  • Hi,

    Which clock frequency did you use?
    You could try to lower your clock frequency to 1 MHz or less.

    Did you show a whole transfer on your trace picture?

    Best regards,
    Dejan

  • Hi,

    CLk freqeuncy is 125khz ->min possible frequency (also tried 1Mhz). 

    Also changed the dpd enter and exit value to 3000 (3 us) as per datasheet:

    new trace: during flash there is only one event and this is the whole trace.

    Also changed the jedec id to the requested device id:

    The flash log is:

    I: littlefs partition at /lfs1
    I: LittleFS version 2.5, disk version 2.0
    E: fs mount error (-22)
    E: Automount /lfs1 failed: -22
    *** Booting nRF Connect SDK v2.5.0 ***
    Sample program to r/w files on littlefs
    Area 0 at 0xfeffa000 on flash-controller@4001e000 for 16777216 bytes
    /lfs1 automounted
    E: mount point not found!!
    FAIL: statvfs: -2
    E: fs not mounted (mp == 0x20000034)
    /lfs1 unmount: -22

    Should I use QPI instead of SPI for the issi flash? but since QPI is different from QSPI I wonder the configuration in the zephyr package will support this.

    The gpio pins (22,23,24,25) seems to be low power/frequency as per nrf52dk datasheet but the spi frequency for fast read is 133 Mhz. could this be the cause of the errors?

    Should I be change the configuration for the parameters specially "deep power down":

            spi-max-frequency = <125000>; /* Adjust based on your flash specifications 104mhz*/
            size = <0x8000000>; /* Adjust based on your fl ash size */
            has-dpd;
            t-enter-dpd = <3000>; //3000
            t-exit-dpd = <3000>; //30000

    "

    Br,

    AP

  • Hi,

    Prasad A said:
    The gpio pins (22,23,24,25) seems to be low power/frequency as per nrf52dk datasheet but the spi frequency for fast read is 133 Mhz. could this be the cause of the errors?

    Some gpio pins are recommended to be low power/frequency as they have internal bond wires routed close to the RADIO which can lead to poor radio performance. In other words, pins power/frequency might affect radio sensitivity. In addition, maximum SPI clock frequency is 8 MHz. 

    Your dpd values look correct, but pictures from logic analyzer do not look correct.

    Have you checked that you do not have any other peripheral that is assigned to/driving the same pins?

    Best regards,
    Dejan

  • Hi Aditi and Dejans,

    I am using the same memory and try to implement little fs there. The board is also same (nrf52832).

    I am facing the same issue. Have you solved the problem ? Could you please share here, how do you solve this ? 

    Thank you in advance.

    Regards

    FM

  • Hi FM,

    There are many discussions which could help you to get started. For example, external flash with nrf52832unable to use littlefs on external flashlittlefs on external SPI flash and littlefs external configuration. There is also littlefs sample application.

    If you encounter any specific issue, I recommend that you open new ticket and provide relevant information there.

    Best regards,
    Dejan

Related