Skip to content

littlefs reports Bad block at 0x0 on EEPROM (write == read correctly) #1203

@wfypebd

Description

@wfypebd

Hello,

I'm testing littlefs on an EEPROM device.
My low-level driver works perfectly: data written can be read back exactly the same.

Configuration:

  • read_size = 32
  • prog_size = 32
  • block_size = 128
  • cache_size = 32
  • lookahead_size = 16

But during mounting, I get:
lfs.c:2100:debug: Bad block at 0x0
lfs.c:2106:warn: Superblock 0x0 has become unwritable
lfs.c:1383:error: Corrupted dir pair at {0x1, 0x0}

Full log:

[LFS] Test start
[LFS READ] block=1, off=0, size=32
[LFS READ] addr=0x0080 Data:08 00 01 00 01 00 01 00 01 00 64 01 F4 65 FF FF 09 03 84 05 14 06 A4 08 34 13 88 13 88 C5 FF FF
[LFS READ] complete, read 32 bytes
[LFS ERASE] block=0
[LFS WRITE] block=0, off=0, size=128
[LFS WRITE] pages=0,addr=0x0000,Data:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
[LFS WRITE] pages=1,addr=0x0020,Data:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
[LFS WRITE] pages=2,addr=0x0040,Data:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
[LFS WRITE] pages=3,addr=0x0060,Data:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
[LFS WRITE] complete, wrote 128 bytes
[LFS ERASE] block=0 erased (0xFF)
[LFS READ] block=0, off=64, size=32
[LFS READ] addr=0x0040 Data:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
[LFS READ] complete, read 32 bytes
[LFS WRITE] block=0, off=0, size=32
[LFS WRITE] pages=0,addr=0x0000,Data:53 FD 20 0F 6C 69 74 74 6C 65 66 73 00 E1 01 F6 80 F6 40 F6 FF F6 FF FF FE F6 00 EF 20 20 F4 20
[LFS WRITE] complete, wrote 32 bytes
[LFS WRITE] block=0, off=32, size=32
[LFS WRITE] pages=0,addr=0x0020,Data:00 1A BE BF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
[LFS WRITE] complete, wrote 32 bytes
[LFS SYNC]
[LFS READ] block=0, off=0, size=32
[LFS READ] addr=0x0000 Data:53 FD 20 0F 6C 69 74 74 6C 65 66 73 00 E1 01 F6 80 F6 40 F6 FF F6 FF FF FE F6 00 EF 20 20 F4 20
[LFS READ] complete, read 32 bytes
[LFS READ] block=0, off=32, size=32
[LFS READ] addr=0x0020 Data:00 1A BE BF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
[LFS READ] complete, read 32 bytes
../lfs.c:2100:debug: Bad block at 0x0
../lfs.c:2106:warn: Superblock 0x0 has become unwritable
[LFS READ] block=0, off=0, size=32
[LFS READ] addr=0x0000 Data:53 FD 20 0F 6C 69 74 74 6C 65 66 73 00 E1 01 F6 80 F6 40 F6 FF F6 FF FF FE F6 00 EF 20 20 F4 20
[LFS READ] complete, read 32 bytes
[LFS READ] block=1, off=0, size=32
[LFS READ] addr=0x0080 Data:08 00 01 00 01 00 01 00 01 00 64 01 F4 65 FF FF 09 03 84 05 14 06 A4 08 34 13 88 13 88 C5 FF FF
[LFS READ] complete, read 32 bytes
[LFS READ] block=0, off=0, size=32
[LFS READ] addr=0x0000 Data:53 FD 20 0F 6C 69 74 74 6C 65 66 73 00 E1 01 F6 80 F6 40 F6 FF F6 FF FF FE F6 00 EF 20 20 F4 20
[LFS READ] complete, read 32 bytes
../lfs.c:1383:error: Corrupted dir pair at {0x1, 0x0}
[LFS] Mount failed, formatting... err=-84

All write/read operations are correct, but littlefs still marks block 0 as bad.

Questions:

  1. Is block_size=128 supported on EEPROM?
  2. What is the root cause of this error?
  3. What is the correct configuration for EEPROM?

Thank you very much for your help!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions