ESP8266 - DTR & RTS für automatischen Upload ?!


bekannterweise wird ein arduino mittels dtr-signal via com/usb resettet und kann dann auch neu geflasht werden.
ein esp braucht zu flashen dazu jedoch 2 info's: rst masse und gpio-0 masse.
und zwar in der reihenfolge: gpio-0 h -> l, reset h -> l -> h, gpio-0 l -> h.

es gibt da nun eine reihe von schaltungs-tricks im www, die sich nur des dtr bedienen, ich recht "unglücklich" gelöst finde, wenn dtr oft mals automatisch beim programmstart div. progs gesetzt wird (auch der ide-monitor).

nodenmu benutzt dazu ein flipflop (siehe hier: https://raw.githubusercontent.com/nodemcu/nodemcu-devkit/master/documents/nodemcu_devkit_sch.png), dessen sinn mir nicht ganz klar wird, da hier rts nicht während dtr "wirkt".

leider bin ich im web bisher nicht schlau geworden, ob die arduino-ide neben dtr auch rts setzt - und wenn ja: in welcher sequenz.
weiß da jemand (relativ) zuverlässig ? oder hat einen link zur entsprechenden info ?
mega-dank dafür im voraus !

ps - bevor fragen kommen....
ja, könnte ich auch selbst austesten. aber: a) mit speicher-scope wäre das einfacher und b) muss ich hier sehr zeitnah ein umfangreiches platinen-layout zum fertiger geben, wo diese "reset-/flash-mimik" richtig implementiert ist.


so - nun hab ich's raus.
nach langer rumsucherei fand ich unter https://github.com/esp8266/arduino/issues/91 folgenden text:
quote
when flashing esptool setup sequence looks this:
rts goes low
dtr goes low
rts goes high
delay
dtr goes high
which means wiring looks this...
rts -> ch_pd (i.e reset)
dtr -> gpio0

when flashing arduino ide
rts , dtr go low
dtr goes high
delay
rts goes high
which means wiring looks this...
rts -> gpio0
dtr -> ch_pd (i.e reset)
dazu passend fand ich unter http://esp8266.github.io/arduino/versions/2.0.0/doc/boards.html#generic-esp8266-modules eine schaltung "esp 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:
quote
"unused handshaking pins should left floating avoid bus contention. prevent condition host application inadvertantly sets handshaking pin state opposite state pin tied. instance, pin set high state when pin has been grounded. contention cause excessive supply current, , may violate 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, 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 - 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: https://github.com/esp8266/arduino/issues/480 - 9. posting.

allerdings liest man auch des öfteren, dass das nicht wirklich funktioniert, 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 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 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.



Arduino Forum > International > Deutsch (Moderator: uwefed) > ESP8266 - DTR & RTS für automatischen Upload ?!


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor