Hi Ken, First of all, thanks for your quick response.
One of the first things I tried was to change the values of MTD_SMART_SECTOR_SIZE [=2048] and MTD_SMART_SECTOR_CACHE_SIZE [=2048] but the smartfs_mount() is still failing to validate the low-level format. For reference the struct fs->fs_llformat has the following values just before the error fs->fs_llformat.sectorsize:2048 fs->fs_llformat.availbytes:2043 fs->fs_llformat.nsectors:16384 fs->fs_llformat.nfreesectors:16378 fs->fs_llformat.flags:0 '\000' fs->fs_llformat.namesize:16 '\020' Changing the capacity to W25_JEDEC_CAPACITY_128MBIT and keeping MTD_SMART_SECTOR_SIZE and MTD_SMART_SECTOR_CACHE_SIZE the same [2048] the file system works as expected. For reference the struct fs->fs_llformat has the following values just before the function validates the low level format. fs->fs_llformat.sectorsize:2048 fs->fs_llformat.availbytes:2043 fs->fs_llformat.nsectors:8192 fs->fs_llformat.nfreesectors:8183 fs->fs_llformat.flags:1 '\001' fs->fs_llformat.namesize:16 '\020' Thanks Daniel Pereira de Carvalho Em qua., 19 de out. de 2022 às 21:26, Ken Pettit <petti...@gmail.com> escreveu: > Hi Daniel, > > The SmartFS FS *can* work with devices greater than 16M Bytes. I have > used it with a 256MBit / 32M Byte SPI flash before quite successfully. > > But you have to ensure the logical sector size is large enough. One > limitation of the SMART MTD (and therefore SMART FS) implementation is > that it uses unsigned 16-bit integers for logical sector numbers. This > means you can only have 65536 maximum logical sectors (actually a few > less than that, but the code knows how to deal with 65536 values and > simply "waste" a few reserved values like zero and 0xFFFF). > > This means that for a 32M byte flash, you would need to ensure the > logical sector size is at least 32M / 65536 = 512 bytes. Typically for > the SMART MTD layer, a logical sector size of 1024 or 2048 (or larger) > is preferred because the code can manage erase blocks / free sector > collection management better. > > In your 'make menuconfig', check your SMART logical sector size and try > setting it to 2048. For the W25256JEVIEQ part with 256-byte pages, > this will be 8 pages per logical sector, which is a good setting. Of > course this also means that the smallest file size is 2K bytes, even if > the file only has 1 byte stored in it. That's the price you pay for a > structured file system though. > > Ken > > > On 10/19/22 4:39 PM, Daniel Pereira Carvalho wrote: > > Hi guys, > > > > I am trying to use the memory W25Q256JVEIQ, with SMARTS FS. To do it I > > added the support for this memory in "drivers/mtd/w25.c". I just added > the > > code below > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > *..#define W25_JEDEC_CAPACITY_256MBIT 0x19 /* 8192x4096 = 256Mbit memory > > capacity */../* 256M-bit / 32M-byte (33,554,432) * * W25Q256JV (Standard > > SPI) */else if (capacity == W25_JEDEC_CAPACITY_256MBIT) { > > priv->nsectors = NSECTORS_256MBIT; }..* > > > > The memory initialization seems to go well. I can run the mksmartfs > > utility, mount and write to the filesystem. However when I reboot the > board > > I can't mount the filesystem again. The function smartfs_mount() returns > > the error "ERROR: No low-level format found". > > > > The documentation says that SMARTS FS is designed to work with 1M byte to > > 16M byte in size (though this is not a limitation). So I changed the > > priv->nsectors from NSECTORS_256MBIT to NSECTORS_128MBIT to see if the > > problem was with the size of the memory. After this change the file > system > > started to work as expected. > > > > Should SMARTS FS work with memories larger than 16M, since in the docs it > > is said that this is not a limitation? If SMART FS is limited to memories > > smaller than 16M do you recommend another filesystem? > > > > Thanks > > > > Daniel Pereira de Carvalho > > > >