So - nun hab ich's raus.
Nach langer rumsucherei fand ich unter Incompatibility in pin assignments between esptool and esp8266/Arduino · Issue #91 · esp8266/Arduino · GitHub folgenden Text:
When flashing with esptool the setup sequence looks like this:
RTS goes LOW
DTR goes LOW
RTS goes HIGH
DELAY
DTR goes HIGH
which means that your wiring looks like this...
RTS -> CH_PD (i.e reset)
DTR -> GPIO0
When flashing with the Arduino IDE
RTS and DTR go LOW
DTR goes HIGH
DELAY
RTS goes HIGH
which means that your wiring looks like this...
RTS -> GPIO0
DTR -> CH_PD (i.e reset)
Dazu passend fand ich unter Supported Hardware · ESP8266 Arduino Core eine Schaltung "ESP to Serial ^" (etwa mitte der Seite) welche das Scenario mit flashen durch ESPTOOL darstellt.
Das wird sicherlich soweit funktionieren, aber es gibt da ein paar Kleinigkeiten zu beachten:
RTS-RESET und DTR-GPIO0 sind dirkt verbunden und mit PullUp-Rs versehen.
Schaut man sich mal das Datenblatt z.B. eines CP2102 an, liest man dort:
"Unused handshaking pins should be left floating to avoid any bus contention. This will prevent a condition where the host application inadvertantly sets a handshaking pin to a state opposite the state to which the pin is tied. For instance, a pin could be set to a high state when the pin has been grounded. This contention will cause excessive supply current, and may violate the USB power specifications."
Auf Deutsch:
Alle Handshake-Ausgänge (hier DTR und CTS) des CP2102 (auch FTDI232 und CH340G) sind richtige Digitalausgänge - KEINE OPEN-COLLECTOR !
Im inaktivem Zustand liegen hier definitive HIGH-Pegel an, was einen PullUp-R eigentlich unnötig macht.
Möchte man aber nun ggf. zusätzlich einen Taster von RESET nach Masse haben, verursacht dieser einen (wenn auch kurzen) Kurzschluss im CP2102 - was das IC ggf. zerstören könnte.
Gleichermaßen ist GPIO0 für weitere Verwendung unbrauchbar - Problem wie vor, wenn dieser Pin als OUT oder auch IN mit mit weiteren Schaltungen (OC) nutzen will.
Es gibt da nun div. Lösungen mit RTS & DTR, bekannteste offensichtlich die auf dem NodeLUA-Boards benutzte Schaltung mit 2 npn-Transistoren. wie z.B. hier diskutiert / gezeigt: Different circuit neeeded for automatic upload using CP210x · Issue #480 · esp8266/Arduino · GitHub - 9. Posting.
Allerdings liest man auch des öfteren, dass das nicht wirklich funktioniert, was mich nicht wundert - denn hier gehen GPIO0 und REST niemals gleichzeitig auf LOW.
Schaltungsvarianten mit Kondensatoren, Dioden u. a., welche nur mittels DTR nicht nur Reset sondern auch zeitversetzt GPIO0 bedienen halte ich für nicht wirklich tauglich, landet der ESP nach "normalem Reset (Monitor) immer im Flash-Modus.
Meine Lösung sieht so aus:
Man entkopple RTS und DTR mittels 2 PNP-Transistoren.
Sind RTS und DTR inaktiv (HIGH), liegen RESET und GPIO0 ganz normal über den PullUps an 3V3 und man kann die Pins auch zusätzlich anderweitig beschalten.
RESET z.B. mit GPIO16 für DeepSleep o. manuellem Reset, bzw. GPIO0 als Aus- oder Eigang (PullDown über OC).
Mit den dargestellten Lötbrücken kann man den "Anschlusstyp" anpassen (Hier für's Platinenlayout gedacht, damit später keine Leiterbahnkratzerei nötig ist).
Beim Betrieb mit der Ardino IDE löst DTR wie bisher einen normalen Reset aus (was auch der Monitor tut) und RTS versetzt den ESP in den Flash-Modus per UART.