Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Calling SD.begin() when no SD-card is inserted and CONFIG_DISABLE_HAL_LOCKS is not set causes LoadProhibited error #10346

Closed
Assignees
Labels
Area: Arduino as ESP-IDF componentIssues about Arduino used as component in ESP-IDF Area: LibrariesIssue is related to Library support. Status: SolvedThe issue has been resolved and requires no further action.
@Gelemikke

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.

Metadata

Metadata

Labels

Area: Arduino as ESP-IDF componentIssues about Arduino used as component in ESP-IDF Area: LibrariesIssue is related to Library support. Status: SolvedThe issue has been resolved and requires no further action.

Type

No type

Projects

No projects

Milestone

No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      AltStyle によって変換されたページ (->オリジナル) /