Let me point out that when compiling on nRF Connect SDK 2.5.0, everything works perfectly.
This always happens when the external memory is not initialized yet. I have several of my own prototype boards and the same thing happens on the new nrf52840dk board.
I configure littlefs like this:
in proj.conf:
CONFIG_FILE_SYSTEM=y CONFIG_FILE_SYSTEM_LITTLEFS=y
In pm_static.yml
external_flash: address: 0x0 end_address: 0x800000 region: external_flash size: 0x800000 littlefs_storage: address: 0x0 end_address: 0x800000 region: external_flash size: 0x800000
I use mcuboot so in child_image/mcuboot.conf
CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=n
In code:
FS_LITTLEFS_DECLARE_DEFAULT_CONFIG (storage_data); static const struct device *storage_dev = NULL; static struct fs_mount_t mnt_storage = { .type = FS_LITTLEFS, .fs_data = &storage_data, .storage_dev = (void *)FLASH_AREA_ID(LITTLEFS_STORAGE), .mnt_point = "/lfs", }; void storage_init () { storage_dev = DEVICE_DT_GET (DT_NODELABEL (mx25r64)); if (storage_dev != NULL) { printk ("[Storage] Device is found\n"); int res = fs_mount (&mnt_storage); if (res == 0) { printf("[Storage] Mounted\n"); res = fs_unmount (&mnt_storage); if (res == 0) { printf("[Storage] Unmounted\n"); } else { printf("[Storage] Error unmounting: %d\n", res); } } else { printf("[Storage] Error mounting: %d\n", res); } } else { printk ("[Storage] Device not found\n"); } }
When I compile on SDK 2.5.0, everything is always OK.
When I compile on SDK 2.6.0, I always get error -19 with the fs_mount function, i.e.: ENODEV 19 /* No such device */ (but only if the memory has never been initialized)
Interestingly, when I compile on SDK 2.5.0 and start the memory, it initializes itself correctly, then when I compile on SDK 2.6.0, everything will work correctly, because the memory has already been initialized on 2.5.0. So the problem is only with the first initialization when using the fs_mount function on SDK 2.6.0.
Has something changed in SDK 2.6.0 that requires adding some configuration to be able to initialize external storage from littlefs?
Or do I need to add some flag to the fs_mount_t.flags structure?