Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
5 years, 2 months ago.
LittleFS assert with "Assertion failed: block < lfs->cfg->block_count"
We have several instance of LittleFS assertion on SD card, using UBLOX_C030_U201 device, and happened with different SD cards from different vendors.
After we clone the SD card to new card, the new SD will have the same issue. We narrow down to a particular file, when we try to read the file, it got the following error.
My guess is, the file uses several SD blocks to store the data, one of the block value is corrupted and point to a location beyond the capacity of the SD card.
One instance seems relate to we power cycle the device and run into this issue, another instance happened during normal operation.
Question is: 1. What information we should collect to further help investigation, is there any log or debug we could turn on? 2. We changed the assert to an error message and return, which end up an infinite loop of the error message. Is there a way to return an error when the read failed or run into a bad block?
The error message is
++ MbedOS Error Info ++ Error Status: 0x80FF0144 Code: 324 Module: 255 Error Message: Assertion failed: block < lfs->cfg->block_count Location: 0x0 File: .\mbed-os\features\storage\filesystem\littlefs\littlefs\lfs.c+18 Error Value: 0x0 Current Thread: main Id: 0x2000D430 Entry: 0x8023E09 StackSize: 0x1000 StackMem: 0x2000D490 SP: 0x2000DF18 For more info, visit: https://armmbed.github.io/mbedos-error/?error=0x80FF0144
Many thanks,
1 Answer
5 years, 2 months ago.
Hi Jianping,
LittleFS has 4 levels of debug logging. By default, all logging is enabled except for enable_debug. Setting enable_debug to true makes the log output very verbose, and the output is useful for bug reports.
Please refer here.
https://os.mbed.com/docs/mbed-os/v5.14/reference/storage.html
Regards, Desmond
I turned on all the 4 levels of debug,
mbed_config.h
#define MBED_LFS_ENABLE_ASSERT 1 // set by library:littlefs #define MBED_LFS_ENABLE_DEBUG 1 // set by application[*] #define MBED_LFS_ENABLE_ERROR 1 // set by library:littlefs #define MBED_LFS_ENABLE_INFO 1 // set by library:littlefs #define MBED_LFS_ENABLE_WARN 1 // set by library:littlefs
When read the file, i got this
$ cat temp1909280234.tmp h lfs info:413: file_open(0, "00170d3314aa/00170d5acf2a/temp1909280234.tmp", 0x0) lfs info:415: file_open -> 0 lfs info:441: file_read(20008520, 20008778, 512) C:\software\git\conmet_test_automation\mbed-os\features\storage\filesystem\littlefs\littlefs\lfs.c:1144 test -- assertion failed ++ MbedOS Fault Handler ++ FaultType: HardFault Context: R0 : 00000018 R1 : 00020026 R2 : 20002AF0 R3 : 00000000 R4 : 20008544 R5 : 20008548 R6 : 00000001 R7 : 00000000 R8 : 200033A8 R9 : 00000000 R10 : 0800282C R11 : 00000001 R12 : 08008047 SP : 20002AF8 LR : 080015B5 PC : 08007B3C xPSR : 01000000 PSP : 20002A90 MSP : 20005E00 CPUID: 410FC241 HFSR : 80000000 MMFSR: 00000000 BFSR : 00000000 UFSR : 00000000 DFSR : 0000000A AFSR : 00000000 Mode : Thread Priv : Privileged Stack: PSP ++ MbedOS Error Info ++ Error Status: 0x80FF013D Code: 317 Module: 255 Error Message: Fault exception Location: 0x0 Error Value: 0x8007B3C Current Thread: main Id: 0x20001C58 Entry: 0x800C671 StackSize: 0x1000 StackMem: 0x20001CB8 SP: 0x20005DA0
If i change the MBED_LFS_ENABLE_ASSERT in mbed_config.h to 0, it gets infinity loop as below.
lfs info:443: file_read -> -5003 ffffffff lfs info:441: file_read(20008520, 20008778, 512) lfs info:443: file_read -> -5003 ffffffff lfs info:441: file_read(20008520, 20008778, 512) lfs info:443: file_read -> -5003 ffffffff lfs info:441: file_read(20008520, 20008778, 512)
Hi Jianping,
It seems a issue, would you raise a GitHub issue here? Thanks.
https://github.com/ARMmbed/mbed-os
posted by 16 Oct 2019
created a issue in github https://github.com/ARMmbed/mbed-os/issues/11704
posted by Jianping Shen 17 Oct 2019