Description
Board
LilyGo T-SIM7000, LilyGo T-SIM7600
Device Description
Hardware Configuration
Version
v3.0.4
IDE Name
PlatformIO
Operating System
Windows 11
Flash frequency
40MHz
PSRAM enabled
yes
Upload speed
115200
Description
Calling SD.begin()
when no SD card is inserted and CONFIG_DISABLE_HAL_LOCKS is not set
in sdkconfig causes a LoadProhibited error and crashes the code. The expectation is that SD.begin()
would instead return false
when no SD card is inserted.
Following the backtrace, the error is caused when xSemaphoreGive(spi->lock);
is called in void spiEndTransaction(spi_t *spi)
. I assume this fails because spi->lock
does not point to a valid mutex. However, I can't figure out why that would be the case since do {} while (xSemaphoreTake(spi->lock, portMAX_DELAY) != pdPASS)
appears to be called a little bit earlier in sdcard_uninit
and there it does not throw an error.
I unfortunately don't have a working debugger at the moment, so I can't properly step through the code in any more detail. Setting CONFIG_DISABLE_HAL_LOCKS=y
in sdkconfig appears to be a working remedy but has its side effects as it disables all HAL mutexes.
Sketch
#include <Arduino.h>
#include <FS.h>
#include <SPI.h>
#include <SD.h>
#define SD_MISO 2
#define SD_MOSI 15
#define SD_SCLK 14
#define SD_CS 13
extern "C" void app_main()
{
initArduino();
//Initialize SDCard
SPI.begin(SD_SCLK, SD_MISO, SD_MOSI, SD_CS);
pinMode(SD_CS,OUTPUT);
digitalWrite(SD_CS,HIGH);
if (SD.begin(SD_CS)){ // This crashes if no SD-card is inserted and CONFIG_DISABLE_HAL_LOCKS is not set
}
}
Debug Message
Guru Meditation Error: Core 0 panic'ed (LoadProhibited). Exception was unhandled.
Core 0 register dump:
PC : 0x400d8f3b PS : 0x00060730 A0 : 0x800d1ae1 A1 : 0x3ffbbb90
A2 : 0xcc491807 A3 : 0x00000000 A4 : 0x00000014 A5 : 0x00000063
A6 : 0x00000063 A7 : 0x00000054 A8 : 0x80085d55 A9 : 0x3ffbbb70
A10 : 0x3ffb8000 A11 : 0x00000000 A12 : 0x00000000 A13 : 0x00000000
A14 : 0xb33fffff A15 : 0xb33fffff SAR : 0x0000001f EXCCAUSE: 0x0000001c
EXCVADDR: 0xcc49180b LBEG : 0x40089f89 LEND : 0x40089f99 LCOUNT : 0xfffffffc
Backtrace: 0x400d8f38:0x3ffbbb90 0x400d1ade:0x3ffbbbb0 0x400d2c6e:0x3ffbbbd0 0x400d1ca3:0x3ffbbc00 0x400d1845:0x3ffbbc30 0x400fc45e:0x3ffbbc60 0x4008e6ba:0x3ffbbc80
#0 0x400d8f38 in spiEndTransaction at C:/Users/mikfr01/.platformio/packages/framework-arduinoespressif32/cores/esp32/esp32-hal-spi.c:1126
#1 0x400d1ade in SPIClass::endTransaction() at C:/Users/mikfr01/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src/SPI.cpp:193
#2 0x400d2c6e in sdcard_uninit(unsigned char) at C:/Users/mikfr01/.platformio/packages/framework-arduinoespressif32/libraries/SD/src/sd_diskio.cpp:451
(inlined by) sdcard_uninit(unsigned char) at C:/Users/mikfr01/.platformio/packages/framework-arduinoespressif32/libraries/SD/src/sd_diskio.cpp:685
#3 0x400d1ca3 in fs::SDFS::begin(unsigned char, SPIClass&, unsigned long, char const*, unsigned char, bool) at C:/Users/mikfr01/.platformio/packages/framework-arduinoespressif32/libraries/SD/src/SD.cpp:39
#4 0x400d1845 in app_main at src/main.cpp:20
#5 0x400fc45e in main_task at C:\Users\mikfr01\.platformio\packages\framework-espidf\components\freertos/app_startup.c:208 (discriminator 13)
#6 0x4008e6ba in vPortTaskWrapper at C:\Users\mikfr01\.platformio\packages\framework-espidf\components\freertos\FreeRTOS-Kernel\portable\xtensa/port.c:162
Other Steps to Reproduce
No response
I have checked existing issues, online documentation and the Troubleshooting Guide
- I confirm I have checked existing issues, online documentation and Troubleshooting guide.