ESP32 lässt sich nicht flashen

Ich wollte endlich mal das Thema Complete angehen und habe eine Platine designed, die ich heute gelötet habe. Leider kriege ich den ESP32 nicht geflasht. Das Fehlerbild sieht wiefolgt aus:

CURRENT: upload_protocol = esptool
Looking for upload port…
Auto-detected: /dev/cu.usbserial-210
Uploading .pio/build/lolin_d32_pro_sdmmc_pe/firmware.bin
esptool.py v3.1
Serial port /dev/cu.usbserial-210
Connecting…
Chip is ESP32-D0WD-V3 (revision 3)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: c0:49:ef:ed:09:e0
Uploading stub…
Running stub…
Stub running…
Changing baud rate to 460800
Changed.
Configuring flash size…
Warning: Could not auto-detect Flash size (FlashID=0x0, SizeID=0x0), defaulting to 4MB
Flash will be erased from 0x00001000 to 0x00005fff…
Flash will be erased from 0x00008000 to 0x00008fff…
Flash will be erased from 0x0000e000 to 0x0000ffff…
Flash will be erased from 0x00010000 to 0x00223fff…
Compressed 18624 bytes to 12073…
Writing at 0x00001000… (100 %)
A fatal error occurred: Timed out waiting for packet header
*** [upload] Error 2

Das ist mir in der Form neu muss ich sagen. Denn wenn es Probleme gibt, dann kenne ich das so, dass es zu einem langen Timeout kommt (30s vielleicht). Hier ist es jedoch so, dass der Flash-Speicher nicht richtig erkannt wird. Anschließend startet der Flash-Vorgang scheinbar(?), abr bricht dann ziemlich schnell ab (2-3 s).
Wie auch auf meinen Develboards für LiPo und FePo habe ich eine Autoflash-Schaltung verwendet.

Die einzige Änderung, die ich vorgenommen habe, ist Eingang 4 von CH340 auf 3.3 V zu brücken. Bislang hatte ich an Eingang 4 immer einen 100nF-Kondensator gegen GND. Das braucht’s, um den internen Spannungswandler zu aktivieren. Aber hier haben wir eh 3.3 V, so dass das eigentlich nicht notwendig ist. Wie auch immer: Man findet im Netz dazu unterschiedliche Implementierungen. Ok, und die Diode an der USB-Buchse ist neu.

ESP32-seitig sieht es dann so aus:

Im ersten Anlauf ist mir ein doofer Fehler passiert: Ich habe (aus Gewohnheit) den CH340C falsch rum eingelötet. Ich habe dann, weil der ESP32 nicht geflasht werden konnte (gleiches Fehlerbild wie jetzt), einen neuen CH340C eingelötet. Gleiches Problem. Dann habe ich den ESP32 getauscht und zum Anschluss auch noch UMH3N. Hat aber alles nix gebracht.

Was zu funktionieren scheint ist der TP5000 - immerhin :slight_smile:

Hat vielleicht irgendwer ne Idee?

Was auch schon kam ist sowas:

Configuring flash size…
Warning: Could not auto-detect Flash size (FlashID=0xffe4ff, SizeID=0xff), defaulting to 4MB
Flash will be erased from 0x00001000 to 0x00005fff…
Flash will be erased from 0x00008000 to 0x00008fff…
Flash will be erased from 0x0000e000 to 0x0000ffff…
Flash will be erased from 0x00010000 to 0x00223fff…
Compressed 18624 bytes to 12073…
Writing at 0x00001000… (100 %)
Wrote 18624 bytes (12073 compressed) at 0x00001000 in 0.5 seconds (effective 321.1 kbit/s)…
File md5: 8c20610bddf349c2f63e6fb00ca7eaab
Flash md5: 34e1dee5a31bf2c3abf8790cd6dfcdaa
MD5 of 0xFF is aaf2e36bc576d52a3ae92de0e335db33

Spannungen stabil?

Wo gehen die 5V vom USB alles hin? Auch zum ESP?
(Die 5V Diode hat bei mir bei div. ESP Boards Probleme gemacht, raus damit und alles ist gut)

Auf dem Oszilloskop habe ich es mir noch nicht angeschaut. Aber mit dem Multimeter sah es zumindest gut aus.

Zum ESP nicht, der verträgt ja nur 3 :slight_smile:
Hinter der Diode geht’s geht’s zum TP5000, zu einem ext-Pinheader, zum Mosfet/LDO und zur LED, die das Aufladen signalisiert.

Welche Probleme hat die denn gemacht?

Edit: Diode entfernen und Brücke stattdessen rein hat auf jeden Fall nix geändert.

ok schade zu einfach gewesen…

hatte div. Resets beim Aufstarten, gefühlt sobald der WLAN Teil losging kam erstmal ein Reset…

Ok, da bin ich ja quasi noch lange nicht, hehe.

Hab’s gefunden.
Ich Depp habe einen PullUp auf GPIO2 gelegt. Der sollte eigentlich auf SD.SCK.

1 „Gefällt mir“

Und ich wundere mich noch, warum der Neopixel nix anzeigt…


So eine Verbindung wäre ne feine Sache gewesen :rofl:.

Fazit: Es scheint alles zu laufen, aber ich habe Störgeräusche auf dem Kopfhörer. Insbesondere wenn von SD abgespielt wird.

Du verwendest doch MS6324 für den KH , oder ? Ich hatte mal ein Board damit erstellt in Kombi mit NS4150 . Das sollte Weihnachten verschenkt werden . Leider habe ich das gleiche Problem , auch beim Booten und generell bei SD-Zugriff . Mich würde interessieren ob es auch mit SD_SPI ist . Hast du die Möglichkeit das zu testen ?

Da muss ich leider passen. Ich habe den SD-Slot nur mit drei gpios angebunden.
Aber ansonsten muss das ja eher ein Routing/Platzierung-Problem sein. Weil bei einer getrennten Kopfhörerplatine (und ja, ich verwende ms6324 und tda1308) habe ich diese Störgeräusche nicht. Ja ok, vielleicht kurz beim Booten oder beim Ausschalten, aber das finde ich jetzt dramatisch.
Ich werde da mal etwas tiefer einsteigen und es mal mit einem 4lagigen PCB probieren. Da muss ich vorher aber erst ein bisschen lesen.

So sieht die erste Iteration dann in fertig aus. Die Sache mit dem Neopixel habe ich unten per Drahtbrücke gelöst.
Jetzt muss ich also noch den Kopfhörerteil ohne Geräusche beim Abspielen hinkriegen.

1 „Gefällt mir“

cool das du es gefunden hast, sieht gut aus die Platine.

Das mit den Störgeräuschen bekommt man hin, 4 Lagen kann was bringen

Teile besser räumlich trennen, zwischen VCC und VCC_Kopfhörer Teil eine Entstördrossel machen kann auch helfen, oder auch in den GND…

Oder generell die Massen trennen und nur an einem Punkt zusammenführen

Nochmal kurz die Problembeschreibung:

  • Auf dem Lautsprecher ist alles ok - keine Störgeräusche.
  • Auf dem Kopfhörer sind keine Störgeräusche, wenn nichts läuft.
  • Ganz leichte Geräusche hat man, wenn man die Lautstärke lauter/leiser macht. Da hört man quasi die Rasterung; das ist auch vorhanden, wenn der Neopixelring nicht angeschlossen ist (gefühlt sogar einen Tick lauter).
  • Hört man Webradio, so sind leichte Störgeräusche vorhanden. Im Grunde hört man das (oder zumindest ich, mit leichtem Tinnitus) nur, wenn man komplett auf lautlos dreht.
  • Ausgeprägt wird es dann, wenn man etwas von SD abspielt. Das ist auf jeden Fall nicht mehr tolerabel und zeigt sich als zyklisches Klopfen/Knattern.

Also grundsätzlich habe ich mich bemüht, die Bauteile räumlich auf dem PCB in Gruppen anzuordnen. Das wären aus meiner Sicht

  • ESP32 (Kondensatoren + Reset)
  • SD (Kondensatoren + Widerstände)
  • USB (Buchse, Widerstände, CH340C + Kondensatoren, Schottky)
  • Port-Expander (Widerstände, Kondensator)
  • Laderegler (TP5000, Spule, Kondensatoren, Widerstände)
  • Verstärker für Lautsprecher (MAX98357a, Widerstände, Kondensatoren, ggf. Ferrite)
  • Kopfhörerteil (Buchse mit potentialfreien Schaltkontakten, TDA1308, MS6324, Widerstände, Kondensatoren)

Also nehmen wir mal an, dass ich jetzt mal ein 4lagiges Design teste. Wie gehe ich denn vor?

  1. Ich hätte dann eine Powerplane. Und ich hätte auch eine Powerplane.
    a) Bei der Powerplane geht’s ja im Prinzip schon damit los, dass ich switched power und power habe. Vermutlich muss man diese Plane dann halt aufteilen.
    b) Ich konnektiere dann per Via durch, wo ich GND oder POWER brauche, korrekt? Muss aber beachten, dass JLC keine blind und burried Vias unterstützt. D.h. ich muss an dieser Stelle auf allen Lagen Platz haben.

  2. Ich schaue, dass ich die analogen Leiterbahnen kurz halte.

  3. Wie gehe ich denn bei der GND-Plane vor, wenn ich sage, dass ich für den analogen Teil eine eigene Plane will? Dann muss ich ja im Prinzip die große GND-Plane in dieser Ecke aussparen und eine eigene Plane machen mit einer kleinen Freifläche außen herum. Und zur Verbindung der beiden Planes könnte ich dann zB eine Entstördrossel setzen.

Das wäre dann bei 4lagig irrelevant, weil eh gegeben. Oder?

Also bin da gern für Input dankbar. Ansonsten schaue ich halt mal, was ich im Netz so finde.

schade , ich habe es mit SPl nicht . Die Beschreibung der Geräusche deckt sich mit meinen Erfahrungen. Ich experimentiere seit 2 Jahren damit rum . MAX98357 ist sauber , alle anderen DAC´s , PT8211, MS6324 , PCM5102A und AC101 auf dem ESP32-A1S , machen es mehr oder weniger . Manchmal dachte ich ich habe die Lösung . Es liegt definitiv an SD_MMC . Wenn ich mein Devilboard räumlich vom Hauptboard trenne ( Devilboard auf ein Breadboard gesteckt und alles per Dupont-Kabel mit der Fassung des Hauptboards gebrückt ) ist es ok. Hatte deswegen mal die Boards mittels Abschirmblech getrennt , das Layout anders geroutet , alles für die Katz. Ich habe 2 absolut identische Boards hier mit PCM5102A , TDA1308 und NS4150. Beide am gleichen Tag mit den gleichen Bauteilen bestückt. Seltsamerweise macht ein Board Geräusche , das andere nicht ??? Ich glaube es liegt an der gemeinsamen Spannungsversorgung. Ich hatte es letztens mit einem 2.Spannungsregler nur für die Peripherie versucht. Fliegend verdrahtet und es war ok. Aber da ist dann auch wieder Abstand dazwischen. Habe bei Ali noch Teile bestellt , werde aber wegen Urlaub in Kanada erst im nächstenJahr testen können . Mein neuer Ansatz wird eine komplett getrennte Spannungsversorgung für ESP und Audio sein. Der letzte Versuch . Den Kindern ist es egal und man kann auch damit leben , ist halt nicht optimal. Oft liegt es auch an @Wolle ´s Lib , gleichzeitige Verbindung mit einem Browser oder an Arduino , keine Ahnung wie man dem beikommen soll . Wenn es den Fehler mit Datenverlust bei SD_SPI nicht gäbe hätte ich alles bei meinem ersten Board gelassen - MAX98357 und KH-Platine . Da waren nie Störungen .

Mit der mini-Platine und der externen Kopfhörerplatine ist auch alles fein. Der Grund, warum ich das jetzt (endlich) doch nochmal angehe, ist einfach der, dass mich doch regelmäßig Leute anschreiben, die eine solche Platine (mini+Develboard+Kopfhörerplatine+Anschlussleitungen) gerne hätten. Und die meisten Leute hätten das auch gerne in fertig gelötet, was ich ursprünglich eigentlich nur mal als Backup angedacht hatte für Leute, die nicht löten können. Aber ich verstehe das natürlich auch, dass man der fertigen Variante dann eher den Vorzug gibt. Das in dieser Form löten zu lassen ist einfach zu teuer, weil es halt um drei Platinen geht. Aber ich kann auf Dauer auch nicht ständig so viel Zeit aufwenden, um das von Hand zu löten (mit Test locker ne Stunde pro Set). Speziell die Develboards sind schon echt Arbeit. Insofern möchte ich das gerne auf einer Platine vereinen, so dass ich das löten lassen kann und dann lediglich noch MS6324, Kopfhörerbuchse und JST-Buchsen nachlöten muss.

2 „Gefällt mir“

Hi @biologist
Ich möchte das Problem mal zusammenfassen. Ich dachte bis heute es wäre nur mit meinen Boards und mein alleiniges Problem. Jetzt muss ich feststellen das es das nicht ist und wir ( ich schon ca.1,5 Jahre ) nicht recht weiterkommen. Das Problem tritt mit SD_SPI nicht auf, mit den ersten Versionen ging es immer einwandfrei. Und der MAX98357 ist scheinbar resistent, ich denke der hat wegen des weiten Versorgungsspannungsbereiches einen internen LDO. Der Stress fing eigentlich erst mit meiner Idee für eine Kopfhörerplatine an und dann in Verbindung mit SD_MMC. Da bei SD_MMC die Übertragungsrate und damit auch die Taktrate höher ist gehe ich mal von Zeitproblemen aus, die es an anderen Stellen auch schon gab und noch gibt.

Neopixel flackert - gefixt
spor. verzögerte Reaktion RFID-Reader - gefixt
bei mir Bootproblem mit LTC2954 - mit 3.5.0 gefixt , mit 5.2.0 leider noch nicht
Darstellungsproblem im Browser mit großen Cover in MP3-Files
Geräusche bei Zugriff über Browser

Gab es das Problem schon vor dem Refactoring , ich kann mich daran nicht mehr erinnern?

Ich suche schon länger eine Lösung für den Kopfhörer ohne zusätzlichen DAC, also Anschluß am Ausgang des einen oder für Stereo zwei MAX98357. Es gibt im Netz div. Vorschläge für PAM8403/6, habe es aber noch nie ausprobiert. Zum MAX98357 scheint es keine Alternative zu geben . Von Realtek gibt es den ALC5628 mit KH-Ausgang und Mono-Endstufe. Gibt es preiswert bei Ali und eigentlich optimal. Leider nur in QFN und nicht erhältlich bei JLCPCB.

Ich glaube auch nicht wirklich an ein Hardwareproblem. Ich hatte vor einiger Zeit @Wolle ´s Webradio ausprobiert . Läuft auf gleicher Hardware ohne Störung. Ebenso dieses fantastische Projekt.

Also frage ich mich … liegt es am Code ( Freetos ) ?
Vielleicht ist Audio als Task nicht optimal. Oder die Cores, Prios ändern ? Ich kann es nicht beurteilen ob da noch was möglich ist.

Vielleicht können @tuniii oder @tueddy es mal am ESP32-S3 im SD_MMC 4Bit-Mode testen?

Ich habe auch keine Lust mehr noch mehr Zeit zu investieren. Der nächste , letzte Versuch muss klappen. Dazu werde ich ab Januar folgendes ausprobieren.

  1. Eigener LDO für Audio. Der ALC5628 und der PCM5102A haben nicht ohne Grund die Möglichkeit die Spannungsversorgung für analog und digital zu trennen. Dazu will ich auf die vorhandenen Boards eine kleine Zusatzplatine anbringen.
  2. Sollte der Rechenaufwand für Audio für den ESP32 zu hoch sein, was wäre wenn ein DAC das erledigt?
    Der VS1053 kann es , hallo @Wolle , du verwendest das im Webradio-Player , denkst du das es hier laufen würde? RFID und VS1053 am gleichen SPI ? Übrigens !! im Moment eiert TellIP bei mir !!
  3. Alternativ S3 mit mehr Pins.
    a) einfacheres Layout wegen flexibleren Pins vor allem für SD_MMC,
    b) kein UART erforderlich
    c) geringer Ruhestrom

und überhaupt weil es der neuere , aktuellere Chip ist.
Warum Bluetooth mit S3 noch nicht geht verstehe ich nicht und kann mir das jemand erklären. Grundsätzlich muss es doch gehen . Libraries gibt es doch schon, klar , es muss umgesetzt werden.

Ich weiß das nicht alles hierhin gehört , aber ich wollte das mal los werden.

VG

@compactflash ist kann hier nur die Fragen bzgl. des ESP32-S3 beantworten:

Vielleicht können @tuniii oder @tueddy es mal am ESP32-S3 im SD_MMC 4Bit-Mode testen?

Den SD_MMC 1-Bit Modus konnte ich auf dem S3 auf Anhieb zum laufen bringen, den 4-Bit Modus jedoch nicht. Ich meine es gibt hier noch ein Problem mit dem Arduino Framework. 4-Bit Modus bringt nur wenig Performance Vorteil zu Lasten von drei zusätzlichen Pins. Ich habe es erstmal nicht weiter verfolgt…

Warum Bluetooth mit S3 noch nicht geht verstehe ich nicht und kann mir das jemand erklären.

Classic-Bluetooth wird beim S3 vom Arduino-Framework nicht unterstützt. Das bestätigt auch der Autor der BT-Audio Bibliothek. Kein BT-Audio auf dem S3, aus diesem Grund scheidet der S3 für mich schon fast aus…

Habe es kapiert . Ich hatte auch beim Autor angefragt und hier steht es auch eindeutig.

Stell dir vor die KH Platine wäre wie vorher extra vorhanden, obwohl im selben Schaltplan. Dann hättest du GND für den Teil ESP und so weiter und für den KH Teil GND_KH.
Nur die Signale die vorher auch schon „rüber“ gingen sind auf beiden Teilen gleich, alle Versorgungen (dazu gehören GNDs) werden seperat geführt und dann an einem Punkt über eine Entstördrossel „kurzgeschlossen“
Ja der KH hat dann extra Planes auch allen 4 Lagen…

Naja, es war ja vorher GND-technisch auch nicht getrennt. Es ist das gleiche GND. Der Unterschied ist nur, dass es auf einer eigenen Platine hockt und an einer Leitung mit 20 cm Länge hängt :slight_smile: