SmartFS DOES actually works and will not shred the flash sectors to pieces as it's aware of flash memory behaviour and limited erases.

Reading the original paper I found that LittleFS was VERY well made to ensure FS operations are atomic and recoverable in the event of a power cut.

Protection against random power cuts at ANY time IS a very important point in any embedded project, and is usually not taken very seriously by every maker, pro or not.

Sebastien

Le 25/08/2021 à 20:01, Tim Hardisty a écrit :
Hi Ken,

You fell for my 100% unintentional trap…thread title didn’t match content! I’d 
started one message, saved it as a draft, then changed my mind on what to ask 
but didn’t change the title. Doh!

I did try SmartFS and really like the sound of it, but it didn’t work “out of 
the box”. I think it is because it can’t cope with 256Mbit devices; I got a 
number of errors to do with sector sizes (from memory) and a quick debug 
suggestion that perhaps some variables are defined as 16 bit: not sure, and 
might return to it.

To answer your question – which was the original intent of this help request, 
the aim is fundamentally data logging. Users will log data (at 20Hz, say; 
multiple parameters) then occasionally pull them off for external analysis, 
delete, and start again. So I don’t think wear levelling is actually an issue; 
just speed and ease of pulling data off to spit out over USB or Bluetooth LE, 
on an occasional basis.

One file open for write is fine with what I currently envision, but who knows. 
SmartFS has much appeal as a “just in case”.  I have more DRAM than I know what 
to do with :)

Tim.

From: Ken Pettit <petti...@gmail.com>
Reply to: <dev@nuttx.apache.org>
Date: Wednesday, 25 August 2021 at 18:12
To: <dev@nuttx.apache.org>
Subject: Re: which filesystem?

Hey Tim,

Selection of filesystem is kind of a personal choice.  Each filesystem

has different features / benefits.  I have never used NXFFS but I know

it absolutely works with the caveat that you can only have one file open

for writing at a time.  Because of this, I wrote SmartFS, which doesn't

have this limitation, but also adds extra RAM usage for each open file.

So as you see, there are tradeoffs.  There is also LittleFS and SPIFFS

to choose from to make it even more complicated.

So I guess you first should ask, what features do I need from the FS?

Directory support?  Wear leveling?  Multiple open files for write?

Maybe a list of the features needed from the FS will help.

Ken

On 8/25/21 10:04 AM, Tim wrote:

I seem to have got over most of my SPI flash and EEPROM issues now and my

256Mb SPI flash is properly recognised.

I think I am at the last hurdle. Here is the console output, along with my

question of the day :)

Successfully initialized M25P SPI

m25p_initialize: dev: 0x2005b970

m25p_readid: priv: 0x2005b990

m25p_readid: manufacturer: 20 memory: ba capacity: 19

m25p_initialize: Return 0x2005b990

Successfully bound SPI0 CS1 to the SPI FLASH driver

m25p_ioctl: cmd: 1537

m25p_ioctl: blocksize: 256 erasesize: 4096 neraseblocks: 8192

m25p_ioctl: return 0

m25p_bread: startblock: 00000000 nblocks: 1

m25p_read: offset: 00000000 nbytes: 256

m25p_waitwritecomplete: Complete

m25p_read: return nbytes: 256

nxffs_nextentry: No entry found

nxffs_limits: No inodes found

nxffs_limits: Free FLASH region begins at offset: 5

nxffs_limits: First inode at offset 5

Succesfully initialised NXFSS

nx_mount: ERROR: Failed to find block driver (null)

Failed to mount the NXFSS volume -15

I believe the block driver would be "/dev/M25P" (M25P, for example) but

there is no code I have found that specifies the block driver location. I

have:

ret = nxfss_initialize(mtd);

then

ret = nx_mount("NULL, "/mnt/M25P", 0, NUL);

and that seems to be in common with other "bringup" code; using NULL rather

than "/dev/something".

Just need the last piece of this jigsaw if anyone could be so kind :)


Reply via email to