Giter VIP home page Giter VIP logo

Comments (1)

geky avatar geky commented on June 10, 2024

Hi @tredlich00 thanks for opening an issue. littlefs predates GitHub's discussions feature and I've been procrastinating on figuring out how that works, so that's on me (enabling discussions is irreversible).

As I built my code to do this I came to realize that there is a block_count variable in lfs_t and a block_count variable in struct lfs_config.

Ah, this is a bit of a limitation of C's "header-is-documentation". The documented struct lfs_config struct should be filled out when calling lfs_mount, but the undocumented lfs_t struct is an implementation detail that does not need to (shouldn't?) be filled out.

But lfs_t needs to be fully defined in the header file so C knows its size/alignment.


The technical reason block_count occurs twice:

You don't need to know the block count before mounting the disk. If struct lfs_config's block_count is 0, the actual block_count is read from metadata stored on disk.

We can't store this in struct lfs_config's block_count, because struct lfs_config is const, and may be stored in ROM. So the only option is a duplicated field.

Because of these duplicated fields, a ROM backed struct lfs_config is less appealing than it initially was, so in the future we may move to not requiring struct lfs_config to live as long as lfs_t. Though this may require a major version change.


As I dug deeper I found some solutions that suggested I needed to erase my NOR flash device myself and that would correct the issue.

I'm curious, what led you down this path? littlefs's lfs_format function should be stateless, unless the block device layers below littlefs has some weird external requirement.

Then, suddenly after the sixth or seventh test I could no longer mount the media.

This is all suggesting that the erase callback is not implemented correctly. Out of the factory, your device may be pre-erased, which would allow a small number of commits to be written. But then littlefs will need to erase a block for new commits, which could lead to this error. This would also explain why reformatting didn't work.

from littlefs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.