Neustart schlägt fehl, abhängig von SD-Karte

Beim Neustart klappt anschließend das Initialisieren der SD-Karte nicht, es kommt immer nur die Meldung

E (19832) sdmmc_common: sdmmc_init_ocr: send_op_cond (1) returned 0x107
E (19833) vfs_fat_sdmmc: sdmmc_card_init failed (0x107).
[ 19837][E][SD_MMC.cpp:148] begin(): Failed to initialize the card (0x107). Make sure SD card lines have pull-up resistors in place.
E [19849] SD-Karte konnte nicht gemountet werden.

Wenn ich eine alte 4GB Karte von Transcend stecken habe, geht der Neustart. Aber mit einer neueren 16GB Karte von Toshiba nicht. Der normale Start und dann auch Abspielen geht aber.
Ich habe die mini-4Layer-Platine mit D32 pro LiFePo4.
Kann es sein, dass da eine Spannung für die SD-Karte grenzwertig ist?

Also im Akkubetrieb bringt ein LiFePO4-Akku 3,2 V. Das ist geringfügig unter den vorgesehenen 3,3 V. Aber wie sieht’s denn aus, wenn du das ganze per USB betreibst? Weil das sind ja auf jeden Fall 3.3 V. Wenn’s damit nicht geht, dann würde ich eine andere Karte nehmen.

Mit USB geht es auch nicht. Ich habe extra diese Karte genommen, weil sie sehr robust ist.

Wird beim Neustart der SD-Karte die Spannung weggeschaltet oder wird sie weiter versorgt?
Im ersten Fall könnte die Zeit zu kurz sein, so dass es nur einen kleinen Spannungseinbruch gibt, durch den sich der Controller der SD-Karte aufhängt.
Im zweiten Fall wäre denkbar, dass ohne einen Reset die Initialisierung fehlschlägt, denn es wurde ja bereits initialisiert. Da bin ich mit dem Protokoll der SD-Karten nicht vertraut, aber solche Details sind gern unzureichend spezifiziert.

Ja, die Spannung wird weggeschaltet.
Ich verwende hier Sandisk und da gibt es keine Probleme.

Ist der Start erfolgreich, wenn du die Karte auswirfst und wieder einststeckst, wenn der Fehler auftritt?

Ja, die Karte kurz zu entfernen und wieder zu stecken, lässt den Neustart erfolgreich durchlaufen.

Das Problem habe ich auch mit 2 Karten. Deswegen vermute ich, dass es nicht an der Spannung liegt, sondern, dass der Controller der Karte zu langsam ist oder sowas.
@biologist könnte man die Abfrage der Karte noch einmal wiederholen, wenn das Initialisieren fehl schlägt? Vielleicht würde sowas ja das Problem umgehen…

Versucht doch mal, ob es ein Delay von vielleicht 500 ms davor schon löst.

Ich kann es leider nicht mehr testen…irgendwie hatten die Karten Selbstheilungskräfte. Das Problem tritt bei mir nicht mehr auf.

Vielleicht ist die 3.3v Schiene doch grenzwertig und manchmal kann es dann am SD Slot zu eng werden - wenn das WLAN sich verbindet und vielleicht noch anderes läuft oder Steckkontakte nicht 100%ig sind (Vermutung)

Mit einem delay(4000) in setup() vor dem Aufruf von System_Init() klappt der Neustart fast immer. Mit weniger eher selten. Das ist jetzt kein sinnvoller Workaround, nur ein Testergebnis.
Es hätte wohl jede Stelle vor SdCard_Init() gereicht.
Eine Wartezeit in System_Restart() bringt nichts, da (falls überhaupt) die Spannung irgendwo in ESP.restart() abgeschaltet wird, was aber der letzte Aufruf in der Funktion ist.

Ich habe leider gerade kein funktionsfähiges Oszi, aber wenn beim Neustart SW_POWER3.3 abgeschaltet wird, dann nur so kurz, dass es mein Multimeter nicht bemerkt.
Daran ändert auch die lange Wartezeit nichts, die ich ja testweise eingebaut habe.
Die sehe ich allerdings sehr deutlich beim Einschalten, da bleibt SW_POWER3.3 nämlich weiter für 4 Sekunden bei 0,94V.
Also würde ich sagen, dass beim Neustart keine Spannung abgeschaltet wird, und das Problem mit der SD-Karte eher auf SDMMC.SCK oder dem SD-Karten-Protokoll allgemein zu suchen ist.

Hi @biologist
Das klingt doch ähnlich wie mein Problem.
Messe doch bitte mal mit dem Logiktester den Power_pin bei Reboot mit und ohne PE

Ich kann das überhaupt nicht nachvollziehen. Mit mini4L+FePo-Develboard habe ich drei Situationen mit Multimeter gemessen:
a) Aus dem Deepsleep heraus nur mit Akku
b) Aus dem Deepsleep heraus nur mit USB
c) Kaltstart => USB wird eingesteckt

In den Fällen a+b war die Spannung initial knapp über 0,8 V. Und sofort (wenige 100 ms) nach dem Einschalten sind da 3.3 V am Start.
Im Fall c dauert es ein klein wenig länger, aber auch hier ist es unter einer Sekunde.

Ich sehe allerdings gerade, dass keine Kopfhörerplatine angesteckt war. Ich glaube zwar nicht, dass das was ändert, aber ich erwähne es zur Vollständigkeit.

@compactflash Ja, ich weiß, ich wollte das für dich nochmal messen mit dem Oszi. Ich arbeite mit diesem ziemlich selten und brauche dann immer ne Weile, bis ich wieder gerafft habe, was ich wie alles einstellen muss :slight_smile:.

geht mir auch so , deshalb der Logiktester. Du musst den natürlich vor dem Einschalten an Spannung haben weil der lange zum booten braucht. Bei Reset passiert das aber auch.

Die 4 Sekunden Delay sind von mir wie beschrieben vor dem Aufruf von System_Init() zum Test eingefügt worden. Ohne das ist der Start natürlich auch bei mir sehr schnell.
Es zeigt nur, dass beim Neustart keine Spannung abgeschaltet wird.
Die 0,94V im ausgeschalteten Zustand kommen mir auch recht hoch vor, aber das hat bisher keine sichtbaren Probleme gemacht.

Gibt’s da einen speziellen Grund für, warum du das Delay dort einfügst? Eingefügt hätte ich es in SdCard_Init() ganz oben halt. Weil die Hypothese ist doch, dass der Zeitraum zwischen „Power On“ und SD-Initialisierung zu kurz ist. Dieses Problem behebst du ja nicht, wenn du das Delay viel früher einbaust.

Meine Hypothese war mehr, dass beim Neustart die Spannung zu kurz abgeschaltet wird und deswegen nicht weit genug abfällt, um dem SD-Karten-Controller einen Reset zu verpassen.
Deswegen wollte ich die Wartezeit zwischen Spannung aus und an verlängern.

Ich habe mir SW_POWER3.3 jetzt mal mit dem Oszi angesehen und da ist doch eine kurze Unterbrechung von 12,5 Millisekunden.
Die kommt sowohl beim Start:

als auch beim Neustart:

Beim Start fällt die Spannung langsamer ab, so dass die Zeit, die sie unter 2V bleibt, nur ca. 5 Millisekunden lang ist.
Beim Neustart geht das deutlich schneller und die Spannung liegt praktisch die ganzen 12,5 ms unter 2V.

Die 2V ist jetzt mal willkürlich von mir gewählt worden, aber da hören langsam auch sehr tolerante Bausteine auf, zu funktionieren.

Wo diese Spannungsunterbrechung herkommt, kann ich mir nicht erklären.

Es sieht so aus als ob bei Dir kurzzeitig die Spannung zusammenbricht.
Hast Du einen Neopixel dran? Wenn ja einmal abziehen oder die Starthelligkeit in der Weboberfläche auf Minimum schalten.

Ist die VIN Schiene stabil? Weil beim Einschalten von WiF zieht der ESP32 in Spitze 800mA. Hilft ein 1000uF Kondensator zwischen 5V & GND? Wie sieht danach Dein Spannungsdiagramm aus?

Ich habe Null(!) Probleme mit SD-Karte und alle möglichen Varianten hier…

Ja das ist das Problem, von dem @compactflash immer berichtet hat. Bei ihm erzeugt das mit dem LTC2954 jedoch Probleme, weil das als Ausschaltsignal gewertet wird.