Esp32-s3

Genauso wie es auf dem Foto zu sehen ist baue ich auch meine SD Karten Adapter. Diese funktionieren am besten, ohne irgenwelche Serien- oder PullUp Widerstände. :grinning:
Ein nicht zu vernachlässigender Vorteil des S3 ist die Verwendung des PSRAM gleichberechtigt zum SRAM. Das meint, dass Variablen auch im PSRAM angelegt werden können. Und so wird gerade bei größeren Projekten ein möglicher temporärer Speichermangel vermieden. Das stellt mit der Quad- oder Octo (SPI) Anbindung aus zeitlicher Sicht kein Problem mehr dar. Support for External RAM - ESP32-S3 - — ESP-IDF Programming Guide latest documentation

Ich konnte jetzt USB MSC OTG erfolgreich testen.
USB MSC OTG => SD-Karte über den USB Anschluss auf den PC durchschleifen

Das geht sehr einfach mit diesem Projekt:
EspTinyUSB/sd_msc.ino at master · chegewara/EspTinyUSB · GitHub

Funktioniert Alles fein, ich kann Alles auf der SD-Karte über den Explorer sehen & bearbeiten. Die SD-Karte wird hier allerdings über SPI eingebunden und die Transferraten sind mehr als mau:

Schreibrate: 237 KByte/s
Leserate: 493 KByte/s
H2testw v1.4

Evt. mache ich noch einen SD_MMC Test, kann mir aber vorstellen das die Datenrate auch nicht viel höher liegen wird. Solange man hier unter 400KB/s für den Upload liegt macht das nicht wirklich Spaß…

1 „Gefällt mir“

An die S3-Spezies @tuniii , @tueddy und @Wolle

Ich habe ein paar Fragen zum S3.
Ich hatte vor einigen Monaten ein neues DevKit auf Basis des A1S angefangen. Die 2 Hauptgründe waren und sind es noch:

  1. Laderegler auch für LiFePo4
  2. Seperater LDO für Audio. Ich hatte es damals mal zur Probe fliegend aufgebaut und hatte deutlich weniger Störgeräusche.

Da ich mit dem A1S auch nicht so glücklich war, habe ich es pausiert. Jetzt mit dem S3 will ich nochmals starten. Ich habe mein aktuelles DevKit ohne UART aufgebaut, jedoch mit Kontaktierungen für einen externen FTDI-Adapter. Ich hatte das gemacht in der Hoffnung 1 mal flashen und dann nur noch per OTA. Leider hat sich gezeigt dass der ESP32 eine Zicke ist und gefühlt zu oft von der falschen Partition bootet und dann doch ein UART erforderlich ist.
Deshalb dazu meine Fragen

  1. Habt ihr das mit dem S3 auch schon gehabt, der ProS3 erfordert ja auch das Drücken der Tasten ? Ich möchte auch weiterhin aus Platzgründen keinen UART einsetzen.
  2. Wird der 2. Onboard-LDO (betrifft ProS3) mit Version 5.2.0 zuverlässig geschaltet. Ich habe mit meinem Board, auf dem ich den Einschaltcontroller LTC2954 benutze, seit einiger Zeit ( ca. 03/2022 ) Probleme. Zirka 2 Sekunden nach dem Einschalten oder Reboot gibt es auf dem Power_Pin eine LOW-Impuls von ca. 500ms Dauer und der LTC2954 schaltet ab. Mit 3.5.0 habe ich das gefixt aber mit 5.2.0 sehe ich im Moment kein Land. Ich finde die Lösung mit dem AND-Gatter auf dem ProS3-Board genial , befürchte aber, da ja High-aktiv (wie mein LTC2954) es auch da Probleme gibt. Habt ihr das schonmal gehabt? Evtl. merkt ihr das nicht, allenfalls flackert kurz die Power-Led am Cardreader.

Mein China-Clone ESP32-S3-DevKit, mit UART aber ohne 2. LDO ist unterwegs.

Das war es erstmal
Danke schonmals

VG

Also wenn ich das richtig verstehe, dann ist das Drücken von Tasten nur dann erforderlich, wenn die USB-Konsole nicht aktiviert ist. Wenn du die Firmware aber schon vorher geflasht hast, dann könntest du diese ja dauerhaft aktivieren.
https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-guides/usb-otg-console.html#uploading-the-application

Dem würde ich entnehmen: Es macht sicher Sinn, diese Tasten zu haben, da man sie zur Not nutzen kann. Aber wenn mal eine FW drauf ist, dann sollte es nicht mehr notwendig sein.

Der S3 von Wemos mal zum Vergleich.

Hi @tuniii ,

kannst du mir bei der Verkabelung helfen, ESP32-s3 zu PN5180?
Mit dem esp32-wroom klappts wunderbar, aber mit dem s3 schaff ichs nicht…

Welche Lib verwendet ihr?
Hab bisher diese: GitHub - ATrappmann/PN5180-Library: PN5180 library for Arduino

Danke & Gruß

Welche Lib verwendet ihr?

Hab’s jetzt noch nicht selbst verkabelt/ausprobiert, aber die PN5180-Bibliothek habe ich vor kurzem erweitert, man kann jetzt eine SPI-Klasse mit beliebigen Pins übergeben. Diese Bibliothek wird auch vom ESPuino verwendet:

danke für die Antwort @tueddy !

Hab gestern auch noch ne kleine Nachtschicht eingelegt und den S3 und den PN5180 mit folgender Verkabelung zum laufen gebracht:
RST <> IO9
NSS <> IO10
MOSI <> IO11
MISO <> IO13
SCK <> IO12
BUSY <> IO14

10, 11, 12, 13 sind die „Standard“-SPI-Pins (siehe arduino-esp32/pins_arduino.h at bcc1d758fc343887de03affeedfbb33522ff2523 · espressif/arduino-esp32 · GitHub)
=> da war dann auch keine Anpassung in der lib notwendig :slight_smile:

1 „Gefällt mir“

USB MSC OTG => SD-Karte über den USB Anschluss auf den PC durchschleifen

Für das langsame USB MSC hatte ich mal den Autor angeschrieben, er hat mittlerweile eine neue Bibliothek veröffentlicht die etwas schneller ist und auch SD_MMC verwenden kann.
Aber die Messwerte liegen noch deutlich unter 1MB/s lesen und 800K/s schreiben. Hab’s mit SD_MMC (1 Bit) getestet auf Win7/11 und MacOS. Teils dauert es ewig bis die durchgeschleifte SD-Karte im Finder/Explorer erscheint und das Kopieren auf die Karte ist auch zum abgewöhnen.

Fazit: (Noch) nicht brauchbar :frowning:

Danke fürs Testen.

Das Übertragen von größeren Daten ist natürlich sehr naheliegend und dann ist natürlich auch die Geschwindigkeit entscheidend. Interessant fände ich aber auch die Konfiguration über ein Mass Storage Device. Man könnte somit zum Beispiel die initiale Wifi-Konfig ohne AP Mode machen.

1 „Gefällt mir“

Man könnte somit zum Beispiel die initiale Wifi-Konfig ohne AP Mode machen.

+1
Oder eine neue Firmware einspielen wie es beim BBC-Microbit gemacht wird.

Leider gehen die neuen Möglichkeiten zu Lasten der Bluetooth-Audio Anbindung. Man gewinnt etwas Neues und verliert etwas bekanntes…

1 „Gefällt mir“

Nach einigen Wochen Arbeit an meinem Fork für den S3 möchte ich hier an der Stelle mal kurz meine Erfahrungen mitteilen:

  • https://github.com/pschatzmann/ESP32-A2DP.git muss in der platform.ini auskommentiert werden
  • Da ich ein eigenes Board entwickelt habe, nutze ich die GPIO Matrix (CONFIG_SOC_SDMMC_USE_GPIO_MATRIX) und lege die SD_MMC/I2C-Ports (SS/MOSI etc) auf andere, besser zu routende Pins. Dazu habe ich eine gepatchte pins_arduino.h geschrieben, die im Buildprozess die eines Basis-Boards überschreibt (Lilygo T7 S3) - ich habe keine Ahnung, wie man eine eigene Boarddefinition erstellen sollte.
  • Ein Port-Expander ist nicht mehr nötig, da der S3 ausreichend viele Pins mitbringt
  • PN5180/RC522 und 1-Bit SD_MMC (auch 4bit, ich habe aber keine Vorteile messen können), LEDs, Touch-Buttons und Drehencoder funktionieren tadellos ohne weitere Anpassungen.
  • Aufgrund eines Bugs mit dem Deep Sleep und Serial-Funktionen (Arduino IDE ESP32-C3 USB CDC problems · Issue #6089 · espressif/arduino-esp32 · GitHub) musste ich in der System.h ein Serial.flush() auskommentieren
  • Um das Wakeup aus dem Deep Sleep via Button mit den eingebauten Pullup-Widerständen reproduzierbar zu ermöglichen, habe ich in der Button.cpp die Zeile
    rtc_gpio_pullup_en((gpio_num_t)WAKEUP_BUTTON);
    eingefügt. Das sorgt dafür, dass auch während des Deep Sleeps der Pulldown aktiviert bleibt, da er andernfalls floatet. Eigentlich müsste das auch bei allen anderen ESP32 notwendig sein - ich verstehe noch nicht ganz, warum das beim Lolin D32 Pro kein Problem darstellt.
  • Die Akkumessung habe ich analog zu https://github.com/Xinyuan-LilyGO/T7-S3/blob/6da73f50a73dcb9cc86283cce1bf64d1c0d03620/examples/test/test.ino#L85 umgebaut, das erzielt deutlich genauere Ergebnisse.
    In einer zweiten Boardversion nutze ich den MAX17055, der scheint auch ok zu sein.
  • In der SdCard.cpp ist ein hartkodiertes pinMode(2, INPUT_PULLUP); drin - das musste ich entfernen (wäre generell gut)
2 „Gefällt mir“

Ja, BT verliert man halt. Das ist der Nachteil mit dem S3.

Ich hatte mir von 4bit ja irgendwie mehr versprochen, aber letztlich, nachdem der Durchsatz im dev-Branch nun deutlich gestiegen ist, passt’s auch mit 1bit.

Was meinst du mit generell gut? Das wird für den ESP32 gebraucht.

@kkF Danke für’s Deiner Erfahrungen!
Generell bin ich raus beim S3 wg. fehlender Bluetooth-Unterstützung, trotzdem sollte der ESPuino-Code mit Null Patches lauffähig sein.:

Mit einer schlauen Compiler-Bedingung könnte man es für ESP-32 + S3 lauffähig bekommen ohne zu patchen. Kriege den universellen #Define auf die Schnelle nicht hin, aber evt. mit so einer bestehnden PIN-Definition, siehe auch die Bedingungen für den S3 in SD_MMC.cpp?

Um das Wakeup aus dem Deep Sleep via Button mit den eingebauten Pullup-Widerständen reproduzierbar zu ermöglichen, habe ich in der Button.cpp die Zeile
rtc_gpio_pullup_en((gpio_num_t)WAKEUP_BUTTON);
eingefügt.

In welcher Zeile genau hast Du das eingefügt? Bei mir hat liegt der WAKEUP_BUTTON auf dem Drehenkoder & der hat Hardware Pullup-Widerstand & ich habe damit tatsächlich keine Probleme.

Wir hatten für den S3 doch irgendwie ein spezielles define, oder? Ich find’s leider gerade nicht. Vielleicht ist das im dev auch alles rausgeflogen!?

Edit:
Hab’s gefunden in der Port.h: CONFIG_IDF_TARGET_ESP32S3

Vor dem esp_sleep_enable_ext0_wakeup().
Ich habe gerade mal die zwei Drehencoder die ich hier hab durchgemessen - da kann ich keinen Pullup feststellen - mysteriös.

Wir verwenden beim ESP-32 ja meist GPIOs 34-39 und die haben keine internen Pullups, Drehenkoder auch nicht. Die Widerstände müssen also extern am Drehenkoder angelötet werden.

@kkF Stellst Du Dein Board mal vor? War sicher 'ne Menge Arbeit…

Das ist pauschal nicht korrekt. Also Drehencoder an sich, also der Schalter, nicht - klar. Aber oft haben die Boards, auf die sie aufgelötet sind, sowas drauf. Da sieht man dann an der Unterseite schön die drei PullUps - wie auch hier zB: https://www.amazon.de/Rotary-Encoder-Module-Drehgeber-Drehwinkelgeber/dp/B0BXLCDYW3.

1 „Gefällt mir“

Jo, sobald ich die erste Version in den Händen hab, die keine Bodge Wire mehr benötigt :wink:

Generell wird ja bei ACTIVE_STATE = 0 der interne Pullup verwendet, z.B. so:

if (BUTTON_1_ACTIVE_STATE)
	pinMode(PREVIOUS_BUTTON, INPUT);
else
	pinMode(PREVIOUS_BUTTON, INPUT_PULLUP);

Sobald einer dieser Buttons dann als Wakeup-Source definiert wird, müsste also mMn auch rtc_gpio_pullup_en() aufgerufen werden - falls keine externen Pullups vorhanden sind.

Ist natürlich schwierig, das programmatisch alles so abzufragen…

Ich denke, ich werde ansonsten für die nächste Revision alle Button-Inputs mit einem Pullup versehen um das nicht in Software machen zu müssen - wobei man dann ja nun auch wieder ggf. doppelte Pullups hat, wenn die standardmäßig mit INPUT_PULLUP initialisiert werden.

USB MSC => SD-Karte über den USB Anschluss auf den PC durchschleifen

Bin zufällig durch diesen Artikel wieder auf dieses ältere Thema gekommen:

Ein schneler Test mit meinem neuen Lolin S3 Pro brachte jetzt nicht die 1MB/s Schreibgeschwindigkeit, allerdings habe ich den eingebauten SD-Slot verwendet und das ist wohl SPI, nicht SD-MMC und schon gar nicht mit 4 Datenleitungen.
Funktioniert aber insgesamt recht gut ohne die voherigen Abstürze.

Wer einen ESP-S3 hat & sich dafür interessiert kann sich das Demo ja mal anschauen: