BOB-Platine für FiPy

und

Wenn wir das Löten auf dem Breakout den Imkern nicht zumuten können / wollen wäre das ein Kompromiss:

@Didi, was hälst du von diesen Veränderungen für die nächste Revision? E- und GND sollten ja möglichst direkt verbunden werden, damit da Platz ist müsste der trace zu SCK umgelegt werden und die “alte” Verbindung zu GND über den “Abschirmungs” Jumper-Block kann weg. Dafür sollten wir Shield direkt verbunden und das nicht optional lassen, der 3er pin-header könnte so komplett weg.

Das werde ich machen.
Aber ich wollte vorher noch Testreihen von den Varianten machen mit einer genauen Aufzeichnung auf SD-Karte, dann kann ich jeden einzelnen Ausreisser mit Gnuplot darstellen.

1 Like

Für den USB to TTL-Adabpter bräuchten wir nur die Pins TX, RX, Vin und GND auf einer Stifteleiste, “Standard” bei vielen TTL / FTDI-Anschlüssen ist aber

Rechner / TLL/FTDI-Kabel
GND CTS 5V TX RX RTS
zu
GND CTS Vin RX TX RTS
FiPy / WiPy

CTS und RTS brauchen wir glaube ich nicht (bzw. habe ich bisher nicht genutzt), ich weiß aber nicht, was man mit denen dann macht (beim Stalker-board ist CTS z.B. mit GND verbunden).

RTS und CTS wurden früher bei V24 ( 9-pol. Canon-Buchse am PC ) von einiger Software benutzt, aber seit 20 Jahren zu USB-Zeiten kaum noch, obwohl aus Kompabilitätsgründen die Pins noch vorhanden sind.

Es wird nur GND RX und TX gebraucht.
VIn schließe ich aus Sicherheitsgründen nie mit an.
Hat auch einen anderen gewaltigen Vorteil man jederzeit einfach das Kabel anschließen und ins bereits laufende Programm schauen.

Der Save Boot Button ist auch nicht zwingend von Nöten, hilft aber ungemein beim Flaschen einer neuen Firmware.
Mann kann aber auch den Reset Button längere Zeit drücken.

EDIT: geht anscheinend nicht mehr.

Beim Programm aufspielen ist er nicht nötig.
Wenn das Programm ein Aufspielen verhindert in der Repl mit Ctrl +C abbrechen und das Neue Progr. Aufspielen.

Nochmal etwas gegoogelt: Vielleicht können wir die beiden pins doch noch brauchen und sparen uns so die beiden Taster “Flash” und “Reset”, siehe:

esptool.py can automatically enter the bootloader on many boards by using the RTS and DTR modem status lines to toggle GPIO0 and EN automatically.

Make the following connections for esptool.py to automatically enter the bootloader:

ESP32 Pin Serial Pin
EN RTS
GPIO0 DTR

Hmmmm …

Note that some serial terminal programs (not esptool.py) will assert both RTS and DTR when opening the serial port, pulling them low together and holding the ESP32 in reset. If RTS is wired directly to EN then RTS/CTS “hardware flow control” needs to be disabled in the serial program to avoid this.

Development boards (including all Espressif boards) usually use additional circuitry to avoid this problem - if both RTS and DTR are both asserted together, this doesn’t reset the chip. Consult Espressif development board schematics for the specific details.

(Some third party ESP32 development boards use an automatic reset circuit for EN & GPIO pins, but don’t add a capacitor on the EN pin. This results in unreliable automatic reset, especially on Windows. Adding a 100nF (or higher) value capacitor between EN pin and GND may make automatic reset more reliable…)

Auf manchen Platinen / Kabeln steht DTR statt RTS, hmm, aber es ist ja schon was anderes? rs232 - Major difference between DTR signal and RTS signal? - Arduino Stack Exchange

2020-02-29 16_10_21-09716-SparkFun_FTDI_Basic_Breakout_-_5V-02.jpg (JPEG-Grafik, 600 × 600 Pixel) -

Das sind unterschiedliche Signale:
DTR = Data Terminal Ready
RTS = Ready To Send
CTS = Clear To Send
Ich würde sie nicht mehr benutzen, sie wurden in der Anfangszeit der seriellen Datenübertragung ( 70er bis 90er Jahre ) für den Hardware-Handshake gebraucht. Das macht man heute per Software.
Die analogen Modems ( tüdeldilüt ) wurden so angesteuert.

Schön, daß Du die Anfänge hochhälst (sonst wäre ich ja der einzige hier, der das machen müßte! :) ) , aber:

Das ist Quatsch. XON/XOFF als software-handshaking macht man wegen fehlender Binärdaten-Transparenz genau nicht mehr. Man kann auch heute hardware-handshaking nicht einfach durch Software ersetzen.
Schau’ Dir die Datenblätter von modernen LTE-Modems an (Quectel, Simcom, Telit …), alle haben sie außer dem USB noch ein oder zwei serielle Schnittstellen, von denen diejenige, die auch mehr als 115200 bps macht (230400…921600 bps), natürlich RTS/CTS -Leitungen haben, um die beteiligten FIFOs zu steuern.

Das hat nicht nur Kompatibiltätsgründe: wenn ich über so eine Schnittstelle mit single-ended Signalen und hoher Geschwindigkeit ein firmware-update fahre, dann habe ich u.U. nur ein einziges Mal die Chance, das funktionierend hinzubekommen, bevor es “bricked” ist (und das alles vielleicht noch over-the-air) - dafür bleibt hardware handshake willkommen, und das auch noch gegenwärtig und nicht nur in der Vergangenheit.
Selbst auf Deinem FiPy werden die RTS- und CTS-Leitungen des Sequans-LTE-Modem (intern) mit denjenigen des ESP32 verbunden und die entsprechende UART für PPP-Betrieb und Modem-upgrade auch so initialisiert.

USB selbst verwendet ganz andere Mechanismen als RTS/CTS flow control, beherrscht aber in der USB CDC class deren Signalisierung, daher haben entsprechende Wandler-ICs (FT232BM, FT232R, CP2102/9, CP2103, CP2105… und selbst CH340/341) u.a. RTS/CTS herausgeführt.

Und genau darum nämlich ging es @clemens hier: wenn man diese Signale nicht braucht, kann man sie auch als GPIO verwenden, um z.B. einen bootloader zu aktivieren, ohne Taster drücken zu müssen - das macht die AVR-basierte Arduino-Gemeinde seit anderthalb Jahrzehnten so. Und die ESP-Leute sparen sich den bootloader-Button sowie das folgende reset, indem der GPIO0 per DTR-Signal einen low-Pulse bekommt und dann nach dem Programmieren der nRESET- bzw. EN-Eingang per RTS ebenfalls low-gepulst wird. @clemens’ Überlegung war nun, welche Pins für einen “FTDI-Adapter”-Anschluß man vorsehen möchte, um auch gleich komfortabel programmieren zu können, ohne Taster drücken zu müssen usw.

2 Likes

Wie schon geschrieben wir zum programmieren definitiv nur RX0 (P0) TX0 (P1) und GND gebraucht.
zum Flaschen neuer Firmware muß beim Starten/Reset noch zusätzlich der P2 gegen GND (Flash Button)
Hier noch etwas Interessantes zu dem Thema das Board von robert-HH habe ich mir aber mangels installierten KICAD nicht angeschaut.

Wie ich schon mehrfach geschrieben habe würde ich mir diese Pins auch bei einem Neuen Boarddesign wünschen und natürlich auch noch die Möglichkeit ein SD Breakout oder SD Sockel anzuschließen bzw zu löten.
Ich habe damit schon etwas experimentiert das SD Breakout darf auf alle fälle kein 5 to 3V3 Pegelwandler haben. Das Pycom expansion board kann dann meiner Meinung direkt ins Museum.
Meines liegt seit Ewigkeiten nur noch rum.

soviel is klar…

Aha!
Und das zu ändern, war @clemens’ Idee. Dafür nun braucht es bei Espressif zwei zusätzliche, an der seriellen exisiterende Signale, nämlich RTS und DTR, sowie vier bzw. fünf Bauelemente (die auch THT sein dürfen):

@robert-hh verwendet in der von Dir zitierten Schaltung die von Espressif auf deren eigenen devel boards verwendete Logik. An die Transistoren werden keine Ansprüche gestellt, unspezifische einfache TUN reichen, also z.B. BC547 usw. R1 und R2 können auch 10k sein; R3 funktioniert bei vielen ESP32 besser mit 10k. @robert-hh hat R3 weggelassen: GPIO0 (“P2”) hat einen internen weak pull-up.


(aus: https://tttapa.github.io/ESP8266/Chap06%20-%20Uploading.html)

Dieses Schaltungsdetail wird nicht nur von robert-hh und Espressif selbst, sondern auch etlichen anderen Herstellern auf deren Boards verwendet: nodeMCU, nodeLua, Wemos/Lolin, M5Stack…

Die Schaltung könnt Ihr mit einfachen Mitteln testen und bei Gefallen (ich bin sicher, viele haben sie schon unwissentlich benutzt auf entsprechenden boards! ;) ) auch auf einer Version 2 der Platine integrieren.
Voraussetzung ist, daß ein für die Programmierung verwendbarer USB-Seriell-Adapter also neben Rx und Tx die Signale RTS und DTR herausgeführt hat.


Der Vollständigkeit halber: legt man Wert darauf, daß sich GPIO0 noch anderweitig verwenden läßt, muß man PNP-Transistoren gemäß diesem Vorschlag verwenden (bislang noch nicht selbst probiert):


(aus: https://forum.arduino.cc/index.php?topic=446651.0)

4 Likes

Ist jetzt hier umgesetzt:

1 Like