right, thanks I overlooked that I should actually use I2C!
I tried to run the code proposed here instead but also without any luck.
#include "FS.h"
#include "SD.h"
#include "SPI.h"
#include <SDCard.h>
#include "Audio.h"
// Digital I/O used
#define I2S_DOUT 25
#define I2S_BCLK 27
#define I2S_LRC 26
#define SD_CS 13
#define SPI_MOSI 15
#define SPI_MISO 2
#define SPI_SCK 14
Audio audio;
void listDir(fs::FS &fs, const char *dirname, uint8_t levels)
{
Serial.printf("Listing directory: %s\n", dirname);
File root = fs.open(dirname);
if (!root)
{
Serial.println("Failed to open directory");
return;
}
if (!root.isDirectory())
{
Serial.println("Not a directory");
return;
}
File file = root.openNextFile();
while (file)
{
if (file.isDirectory())
{
Serial.print(" DIR : ");
Serial.println(file.name());
if (levels)
{
listDir(fs, file.name(), levels - 1);
}
}
else
{
Serial.print(" FILE: ");
Serial.print(file.name());
Serial.print(" SIZE: ");
Serial.println(file.size());
}
file = root.openNextFile();
}
}
void setup()
{
Serial.begin(115200);
// Initialize SD card
SPIClass spi = SPIClass(VSPI);
spi.begin(SPI_SCK, SPI_MISO, SPI_MOSI, SD_CS);
if (!SD.begin(SD_CS, spi))
{
Serial.println("Error: SD card initialization failed.");
return;
}
delay(2000);
uint8_t cardType = SD.cardType();
if (cardType == CARD_NONE)
{
Serial.println("No SD card attached");
return;
}
Serial.print("SD Card Type: ");
if (cardType == CARD_MMC)
{
Serial.println("MMC");
}
else if (cardType == CARD_SD)
{
Serial.println("SDSC");
}
else if (cardType == CARD_SDHC)
{
Serial.println("SDHC");
}
else
{
Serial.println("UNKNOWN");
}
uint64_t cardSize = SD.cardSize() / (1024 * 1024);
Serial.printf("SD Card Size: %lluMB\n", cardSize);
listDir(SD, "/", 0);
Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
delay(1000);
audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
audio.setVolume(21); // 0...21
audio.connecttoSD("/320k_test.mp3");
delay(2000);
}
void loop()
{
Serial.println("Playing sample 1");
audio.loop();
}
After the 3 time stepping into audio.loop() it fails with Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
:
Full output:
rst:0xc (SW_CPU_RESET),boot:0x33 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:1184
load:0x40078000,len:13132
load:0x40080400,len:3036
entry 0x400805e4
[ 10][D][esp32-hal-cpu.c:244] setCpuFrequencyMhz(): PLL: 480 / 2 = 240 Mhz, APB: 80000000 Hz
SD Card Type: SDHC
SD Card Size: 30436MB
Listing directory: /
FILE: test.txt SIZE: 0
FILE: life.wav SIZE: 169086
FILE: foo.txt SIZE: 13
FILE: 320k_test.mp3 SIZE: 9610227
Total space: 30424MB
Used space: 9MB
Connect to SD file /320k_test.mp3
[ 13420][V][ssl_client.cpp:324] stop_ssl_socket(): Cleaning SSL connection.
info Reading file: 320k_test.mp3
1
info ID3 version=3
ID3 framesSize=4342
info ID3 framesSize=4342
info ID3 normal frames
id3data Title: No Cover Song [Abseed Remix]
id3data Year: 2010
id3data Comment: engVocals by : Deep SpiritMusic by : MTBD & Dj PaPa Br��n (Abseed)Copyright: Abcd 2010Official Release : Abcd lease : Abcd
id3data BeatsPerMinute: 143
id3data Comment: sveE-Mail : Abseed_music@hotmail.coo
id3data Album:
id3data Publisher: Magnus L�nberg, Johannes Bruun
id3data Artist: Deep Spirit
Playing sample 1
[ 15534][I][Audio.cpp:692] loop(): bcw = 1600
[ 15534][I][Audio.cpp:693] loop(): m_inBuffwindex = 0
[ 15534][I][Audio.cpp:694] loop(): m_inBuffsize = 1600
[ 15538][I][Audio.cpp:695] loop(): m_inbuffrindex = 0
[ 15542][I][Audio.cpp:696] loop(): m_inBuff = 1073524221
[ 15547][I][Audio.cpp:700] loop(): res = 1600
info stream ready
info stream ready
info syncword found at pos 0
info SampleRate=44100
info Channels=2
info BitsPerSample=16
info Bitrate=320000
Playing sample 1
[ 15614][I][Audio.cpp:692] loop(): bcw = 1044
[ 15614][I][Audio.cpp:693] loop(): m_inBuffwindex = 556
[ 15614][I][Audio.cpp:694] loop(): m_inBuffsize = 1600
[ 15618][I][Audio.cpp:695] loop(): m_inbuffrindex = 1044
[ 15623][I][Audio.cpp:696] loop(): m_inBuff = 1073524221
[ 15628][I][Audio.cpp:700] loop(): res = 1044
info stream ready
Playing sample 1
[ 15654][I][Audio.cpp:692] loop(): bcw = 1045
[ 15654][I][Audio.cpp:693] loop(): m_inBuffwindex = 555
[ 15654][I][Audio.cpp:694] loop(): m_inBuffsize = 1600
[ 15658][I][Audio.cpp:695] loop(): m_inbuffrindex = 1045
[ 15663][I][Audio.cpp:696] loop(): m_inBuff = 1073524221
[ 15668][I][Audio.cpp:700] loop(): res = 1045
info stream ready
Playing sample 1
[ 15693][I][Audio.cpp:692] loop(): bcw = 1045
[ 15693][I][Audio.cpp:693] loop(): m_inBuffwindex = 555
[ 15693][I][Audio.cpp:694] loop(): m_inBuffsize = 1600
[ 15697][I][Audio.cpp:695] loop(): m_inbuffrindex = 1045
[ 15702][I][Audio.cpp:696] loop(): m_inBuff = 1073524221
Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0x400e1a8f PS : 0x00060c30 A0 : 0x800dbc6a A1 : 0x3ffb2530
A2 : 0x800e2658 A3 : 0x000000ff A4 : 0x00003d5b A5 : 0x0000f9c0
A6 : 0x3ffd4600 A7 : 0x3ffcadfd A8 : 0x800e2658 A9 : 0x00000000
A10 : 0x3beb0000 A11 : 0xf9c00000 A12 : 0x3ffd4600 A13 : 0x00060c23
A14 : 0x00060c20 A15 : 0x00000001 SAR : 0x0000000a EXCCAUSE: 0x0000001c
EXCVADDR: 0x800e2658 LBEG : 0x40084475 LEND : 0x4008447d LCOUNT : 0x00000027
Backtrace:0x400e1a8c:0x3ffb25300x400dbc67:0x3ffb2550 0x400dbf81:0x3ffb2570 0x400dc025:0x3ffb2590 0x400dc431:0x3ffb25c0 0x400dc45e:0x3ffb25e0 0x40100296:0x3ffb2600 0x40100c3e:0x3ffb2620 0x40101be6:0x3ffb2640 0x40103a0f:0x3ffb2680 0x400ed6aa:0x3ffb26b0 0x40086f6d:0x3ffb26d0 0x40086eb1:0x3ffb26f0 0x4012520e:0x3ffb2710 0x401252a1:0x3ffb2750 0x4012424f:0x3ffb2770 0x400db8c3:0x3ffb2790 0x400d75f2:0x3ffb27b0 0x400db34b:0x3ffb2800 0x400e2655:0x3ffb2820
Is there anything I’m doing wrong? The issue seems to be too much data loaded into memory?