ESP32 P4 micro SD nutzen

Hallo,

Ich versuche jetzt schon eine ganze Zeit den SD Kartenslot eines

Waveshare ESP32-P4-ETH zur Zusammenarbeit zu bewegen.

Alle gefundenen Beispiele bringen das gleiche Ergebins, nicht gemounted.

Sowohl SD als auch SD_MMC modus. Die Karte (8Gb) ist frisch FAT32 formatiert. (vollständig, nicht schnell)

Pin 45 auf LOW für Spannungsversorgung ein.

Hat jemand das Board erfolgreich mit SD im Einsatz ?

Und Hinweise oder Beispiel, wie es definitiv geht.

Danke im voraus,
Gruß Achim

IDE: Version: 2.3.9-nightly-20260429
Datum: 2026-04-29T04:23:30.337Z
CLI Version: 1.4.1
esp32\3.3.8

Mich würde interessieren was für SD Modul wird benutzt und wie der ist angeklemmt.
Der P4 hat ja IDE mäßig SPI Pins anders belegt als "Normaler" ESP32. Du kannst ja versuchen herausfinden wie die IDE das macht.

#include <SPI.h>
#include <Wire.h>

void setup() {
 Serial.begin(115200);
 delay(1000);
 Serial.println("****** SPI Pins Test *****");
 Serial.print("MOSI = ");
 Serial.println(MOSI);
 Serial.print("MISO = ");
 Serial.println(MISO);
 Serial.print("SCK = ");
 Serial.println(SCK);
 Serial.println( );
 Serial.println("****** I2C Pins Test ******");
 Serial.print("SDA = ");
 Serial.println(SDA);
 Serial.print("SCL = ");
 Serial.println(SCL);

}

void loop() {
 // put your main code here, to run repeatedly:

}

Dazu muss sagen das der ESP hat eigene SD Bibliothek.
Du kannst ja auch eigene GPIO für SPI nutzen nur dann sollte man das im Setup bekannt machen

#include <SPI.h>
// Define custom pins
#define VSPI_MISO   12
#define VSPI_MOSI   13
#define VSPI_SCLK   14
#define VSPI_SS     15

SPIClass *vspi = NULL;

void setup() {
 vspi = new SPIClass(VSPI);
 // Initialize with custom pins
 vspi->begin(VSPI_SCLK, VSPI_MISO, VSPI_MOSI, VSPI_SS);
 pinMode(VSPI_SS, OUTPUT);
}

Das Ergebnis von new sollte man immer prüfen, ob das Objekt auch angelegt wurde. z.B.:

SPIClass *vspi = nullptr;
vspi = new SPIClass(VSPI);
if (vspi) {
  // ok, mache was
}
else {
  // Fehler
}

Gruß Tommy

Ein Schaltplan kann helfen ESP32-P4-ETH/Resources-And-Documents

Hallo,

das ESP32-P4-ETH hat einen micro SD-Slot, SDIO Schnittstelle am P4:
D2=41, D3=42, CMD=44, CLK=43, D0=39, D1=40, für MMC 1Line oder 4Line
an der gleichen Schnittstelle auch über SPI die äquivalenten Pins.
Die VDD wird über 45 und einen MosFet gesteuert vom P4 LDO4.
(Die SDIO ist fest verdrahtet, auch im P4 "dedicated" wenn ich mich recht erinnere).

Also die Pinbelegung stimmt, und die Internen Beispiele sollen laut Gugel laufen.
Daher meine Frage nach genau dem Board, und ob das jemant Nutzt mit SD.

Wobei beim Querlesen mehr Probleme mit SPI als mit SDIO zu finden sind.

Der P4 ist in Arduino ja noch so LaLa supported, und zusammen mit meinem Halbwissen,
nicht die Ideale Kombi.

Es gibt noch Infos im Netz zwecks Spannungsregelung für MMC

#include "sd_pwr_ctrl_by_on_chip_ldo.h" sd_pwr_ctrl_ldo_config_t ldo_config; ldo_config.ldo_chan_id = BOARD_SDMMC_POWER_CHANNEL; sd_pwr_ctrl_handle_t pwr_ctrl_handle = NULL; sd_pwr_ctrl_new_on_chip_ldo(&ldo_config, &pwr_ctrl_handle); sd_pwr_ctrl_set_io_voltage(pwr_ctrl_handle, 3300));

macht aber Probleme beim kompilieren, oder Kapiere ich nicht.
Geht wohl um welchen Pin, und ob er High oder Low gezogen werden muss, für Regelung.
Da ich aber ne SD habe, habe ich Pin45 fest auf Low, und somit 3,3V an der SD.

Es soll da drausen funktionieren mit 45 Low.

Gruß Achim

Dort ist die Sd als SPI gezeigt,

Du hast meinen Beitrag nicht verstanden. Außerdem bezog er sich auf #2 von @fony

Gruß Tommy

Ja, habe ich gestern glaube ich 3mal Probiert, mit angepassten Gpio's
Schreibt er ja auch, ist das integrierte Beispiel für ESP32.
Und ich werde es nochmal probieren, Vielen Dank für denn Link.

Ich habe gerade bei der suche was neues gefunden.

I figured it out after doing some digging. Seems the ESP32-P4 has 4 channels of LDOs. And with the Esp32 Arduino Core I'm currently on (v3.2.0), the 3rd and 4th LDOs are not initialized by default.

ESP LDO Channel State:
Index ID    ref_cnt    voltage_mv   adjustable
0     1     1          3300         no   
1     2     1          1900         no   
2     -1    0          0            yes  
3     -1    0          0            yes  

Here's a simple sketch to output and initialize the LDOs:

Muss ich mal schauen ob das vieleicht noch ne Rolle spielt.

Gruß Achim

Hallo,

Beitrag verstanden, und falschen Antworten Button erwischt.

Gruß Achim

Du sollst deine passende GPIO nehmen du brauchst ja nur CS, MOSI, MISO und SCK-SCL.
der Rest ist für uns uninteresant

Tue mal auf 2.0.74

OK, jetz bin ich leicht überfordert.

Wie ändere ich das, und wo finde ich den aktuellen stand.
Das habe ich gemacht, Arduino installiert, passende Boards über Bordverwaltung installiert,
die passenden Libs die ich Brauche, und vor einer Weile mal was von Espressif aber ob das
noch Installiert ist weiss ich nicht. Schon zig mal neu Installiert.

Wenn das das bei der Boardverwaltung ist, dann ist meine Version 3.3.8, die Aktuell.

Gruß Achim

Ich werde nochmal Das Beispiel SPI mit meinen Pins testen,

Ich hab mal das PRG, Problem mit den LDO's laufen lassen, hat sich bei 3.3.8 noch nicht geändert.
ESP-ROM:esp32p4-eco2-20240710
Build:Jul 10 2024
rst:0x1 (POWERON),boot:0x30f (SPI_FAST_FLASH_BOOT)
SPI mode:DIO, clock div:1
load:0x4ff33ce0,len:0x1174
load:0x4ff29ed0,len:0xccc
load:0x4ff2cbd0,len:0x34fc
entry 0x4ff29ed0
[ 7][I][esp32-hal-psram.c:106] psramAddToHeap(): PSRAM added to the heap.
ESP LDO Channel State:
Index ID ref_cnt voltage_mv adjustable
0 1 1 3300 no
1 2 1 1800 no
2 -1 0 0 yes
3 -1 0 0 yes
LDO index 2 acquired
LDO index 3 acquired
LDO index 2 voltage adjusted
LDO index 3 voltage adjusted
ESP LDO Channel State:
Index ID ref_cnt voltage_mv adjustable
0 1 1 3300 no
1 2 1 1800 no
2 3 1 3300 yes
3 4 1 3300 yes

Da LDO mit ID4 für die SD zuständig ist werde ich den bei Test mal auf 3,3V stellen.

Vieleicht klappt es dann,

Gruß Achim

Schau mal in Schaltplan dort ist ja gezeigt wie der MOSFET vom SD wird angesteuert, da ist nichts mit ID4

Hallo,

hab ich, der Fet schaltet die SD komplett Ein/Aus, der Einstellbare Spannungsregler im P4
mit Bezeichnung ESP_LDO_V04 bringt die PullUp-Widerstände auf das richtige Niveau. (1,8V/3,3V)

Wenn ich das richtig gelesen habe müssen die Datenleitungen alle mit PullUp versehen sein,
damit die µSD richtig funktioniert, Hier also 3,3V. Daher mein Versuch damit.
Leider noch nicht Aussagekräftig, entweder die SD-Lib sperrt denn Zugriff auf den LDO oder
es klappt mal.

Ich habe Teile des Code für den LDO 4 aus dem Link mal in das Beispiel SD Test integriert, einmal nur zum Anzeigen der eingestellten Spannung. Und einmal aktiv eingestellt.
Da war es aber schon Spät, nur Auslesen brachte 0V, aktiv einstellen brachte einmal 3,3V, und einmal gespeert durch andere Anwendung/Thread, im Log.

Ich warte gerade auf ein Adapter-Kabel µSD auf SD und eine 2Gb SD, und werde mit der SD nochmal testen, und bescheid geben. (Kommt Heute)
Leider habe ich mich jetzt auf das Board festgelegt, Viel Ram und Flash, je 32Mb, und viel wichtiger, kein Wlan und keine Bluetooth. Und 3 Stück hier.
Die ersten Gehversuche mit LVGL und dem 10,1" DSI Touchdisplay waren vielversprechend, und passen mit in mein Konzept, dort könnte ich einzelne Daten am Display ändern. Statt am Rechner.

Ich habe auch keine anderen "kleinen" µSD mehr da, sonst hätte ich mit denen probiert.
SD ist vieleicht auch besser, da einfacher zu händeln wenn der Inhalt am Rechner geändert wird.

Gruß Achim

So,

kaum macht man was anderst schon gehts.
Wieder Beispiel SD Test aus dem Beispielordner für Esp32 öffnen, 4 Pins anpassen, Flashen, und gut.
Warum auch immer, Adapter µSD auf SD rein, billige 2Gb SD rein. Ergebniss siehe unten.

Jetzt kann es weitergehen, weil der einzige Zweck des Board (jedenfalls erstmal) ist es,
genau eine Datei, für die anderen ESP's über Http Get zur verfügung zu Stellen.

Da sollten sich ja genug Beispiele finden lassen. Falls es nen DAU-tauglichen Tip gibt, immer her damit.
Hatte ich auch schon halb am Laufen, war eher ein Problem die Dateien dafür ins Flash zu bekommen, die Seite sah bescheiden aus. War halt ein Test für das LAN. Und das geht.

Jetzt kommt alles auf die SD und gut. Wobei ich mich gerade frage, ich hatte bei meiner Suche was gefunden, wo die Dateien(der Aufbau) für die Web-Seite des Servers im Code waren.
Das ist vieleicht noch besser, weil da kann sie keiner versehentlich Ändern oder Löschen.
Speicher ist ja genug da. Muss ich wohl wieder Suchen.

Endausbau wäre natürlich das Editieren der Datei über ein Display. (LVGL) Aber ganz zum Schluß.

Gruß Achim

ESP-ROM:esp32p4-eco2-20240710
Build:Jul 10 2024
rst:0x1 (POWERON),boot:0xf (SPI_FAST_FLASH_BOOT)
SPI mode:DIO, clock div:1
load:0x4ff33ce0,len:0x1174
load:0x4ff29ed0,len:0xccc
load:0x4ff2cbd0,len:0x34fc
entry 0x4ff29ed0
[ 7][I][esp32-hal-psram.c:106] psramAddToHeap(): PSRAM added to the heap.
SD Card Type: SDSC
SD Card Size: 1919MB
Listing directory: /
FILE: test.txt SIZE: 1048576
FILE: foo.txt SIZE: 13
Creating Dir: /mydir
Dir created
Listing directory: /
FILE: test.txt SIZE: 1048576
FILE: foo.txt SIZE: 13
DIR : mydir
Removing Dir: /mydir
Dir removed
Listing directory: /
FILE: test.txt SIZE: 1048576
FILE: foo.txt SIZE: 13
Writing file: /hello.txt
File written
Appending to file: /hello.txt
Message appended
Reading file: /hello.txt
Read from file: Hello World!
Deleting file: /foo.txt
File deleted
Renaming file /hello.txt to /foo.txt
File renamed
Reading file: /foo.txt
Read from file: Hello World!
1048576 bytes read for 2407 ms
[ 3294][W][sd_diskio.cpp:176] sdCommand(): no token received
1048576 bytes written for 3032 ms
Total space: 1918MB
Used space: 1MB

Warum legst Du die html, js und css-Dateien nicht ins LittleFS-Dateisystem?
Beispiele dazu gibt es bei Fips und hier eine Anleitung zu Fips.
Die Beispiele sind zwar für den "normalen" ESP32 sollten aber auch auf Deinem laufen. Dazu gibt es einen Dateimanager, mit dem Du die Dateien bequem im Browser hochladen kannst.

Gruß Tommy

So waren meine ersten Versuche, bis ich erstmal die beiden Pugins gefunden hatte um den DATA Ordner in das jeweils verwendete Dateisytem zu bekommen.

Drei möglichkeiten für Dateisystem und keine Ahnung, naja.
Nach den ersten Fehlschlägen habe ich dann weitergesucht und eine Beispiel gefunden, wo ein Seitenaufbau als FailSave direkt im Code war (Dateibrowser, und Formatieren).

Das finde ich eigentlich Paktisch, sollte ich was anpassen müssen, kann ich die Änderungen vornehmen, zum Gerät fahren, anstöpseln, Flashen und Fertig.

Es ist noch nicht klar, ob die Datei überhaupt über Netzwerk von einem Rechner ereichbar sein wird.
Warscheinlich eher nicht. Daher auch die Datei auf SD.

Wer immer die Datei anpasst, geht zum Gerät schaltet aus nimmt die SD und schreibt die angepasste Datei wieder auf die SD, steckt rein, Schaltet ein und fertig.
Deswegen auch nur die eine Datei auf der SD.

Die ESP's werden nach jetzigem Stand in einem eigenem Netzwerk laufen,
ohne Zugriff von oder nach aussen. Ich befürchte ein Zeitserver muss deshalb auch dran.
Aber das ist zum Glück das kleinste Problem, Dank GPS-Emfängern, Kleine Kiste auf Fensterbank.
Versogt werden sowieso alle über POE. Hab ich noch rumliegen.
Auf jedenfall besser als der IT zu sagen, aber darauf müssen die ESP's Zugriff haben,
dann wird erst mal eine Arbeitsgruppe gegründet................

Also eingentlich nur die eine Datei von SD zugänglich für die anderen ESP's über Netzwerk machen.
Alles andere ist nicht notwendig. Oder sogar nicht erwünscht.....
Ich hätte auch lieber den Upload von einem Rechner, Ist aber nicht möglich, es sei denn, es wird ein Rechner der nur für das bearbeiten der einen Datei da ist. Weil isoliertes Netzwerk.

Vielen Dank für den Tip mit dem Sketch,

Gruß Achim

Mit dem Filemanager von Fips kannst Du die Dateien problemlos vom Browser ins Filesystem hoch laden, ohne hin fahren zu müssen.
Auch fürs Programm flaschen gibt es OTA (Over The Air) ohne hinfahren.

Gruß Tommy

Hallo,

hab ich mir gerade schon mal kurz angeschaut, sehr Interesant, und für zuHause bestimmt auch einiges für mich dabei.

Bei dem was ich hier gerade Versuche aufzubauen, gibt es klare Grenzen, die nicht angepasst werden können.
Die IT stellt innerhalb des Firmennetzwerks ein Isolierte Netzwerk zur Verfügung, für diese Anwendung. Da geht nix rein oder raus. Kein Zugriff von irgendwo.

Ich Versuche die Gratwanderung zwischen dem, was mir möglich ist, den Wünschen an das Sytem für die Nutzer, und dem was die IT zulässt.
Da gewinnt die IT Haushoch.
Änderungen in der Datei müssen leicht durchführbar sein, ohne das dabei was anderes beeinträchtigt wird. Also nur die eine Datei auf der SD.
Ich denke das mit der SD Karte ist für die Nutzer am einfachsten.

Ich könnte auch einen Raspberry pi als server aufsetzten, aber wofür.
Die einzige Anforderung ist, eine Datei von ca. 30kb stabil für die andere ESP's bereitzustellen.

Wäre es nur ein Standort müsste ich wahrscheinlich Leitungen ziehen, da es aber mehrere Standorte sind, gibt es das Netzwerk.

Gruß Achim