Damit der ESP sich aus dem Deep Deep Sleep aufwecken kann, müssen XPD
und Reset extern verbunden werden. Zum Flashen muss diese Verbindung
aber wieder geöffnet werden. Ich suche eine low cost Lösung, bei der die
Verbindung default geschlossen ist, aber zum Flashen automatisch
geöffnet werden kann.
Das Billigste wäre wohl die Verbindung der Pins über einen Widerstand,
der beim Flashen "überstimmt" wird - weiss jemand, wie niederohming die
Verbindung sein muss, um zuverlässig zu funktionieren?
wireless schrieb:> Ich suche eine low cost Lösung, bei der die> Verbindung default geschlossen ist, aber zum Flashen automatisch> geöffnet werden kann.
Ist GPIO16/XPD beim Flashen Hochohmig?
=> wahrscheinlich Nein, denn sonst würde es eine Schottkydiode tun.
Jumper?
=> zu umständlich
Wenn nicht, dann zwei Dioden und ein NPN oder ein Logiclevel-NMOS.
Ein CMOS-Analogschalter wäre Ideal. Die gibt es auch SMD als
Einzelgatter.
GPIO0 kann beim Flashen ja dauerhaft GND gezogen werden.
Ungefähr sowas schwebt mir da vor:
1
3.3v VCC o--*----*--------*-----+
2
| | | |
3
10k 10k 10k 10k
4
| | | |
5
GPIO0 o--* | | |
6
| | | |
7
RST o--)----)----*---)-----*
8
| | | | |
9
| | \|__| |
10
| | Q1 V| * |
11
| | | | |
12
GPIO16/XPD o--)----*----+ | |
13
| | |
14
_|_ _|_ |
15
_V_ D1 _V_ D2 |
16
| | |
17
*-------------+ |
18
| |
19
* *
20
/ S1 / S2
21
* Flashen * Reset
22
| |
23
GND o--*-------------------+
mfg mf
PS: jaja der NPN ist extra sch***e gezeichnet
Keine Ahnung, ob das für Deine konkrete Schaltung eine Option darstellt,
aber:
Für den zum Flashen nötigen Reset kann man m.W.n. zwischen nRESET und
CH_PD wählen; statt direkt den nRESET-Pin zu steuern, könntest Du
stattdessen den CH_PD-Pin steuern und Dir so jegliche zusätzliche
Bauteile sparen.
Wenn du den Timer-Ausgang mit dem Reset Eingang verbindest und dann noch
per Taster den Reset Eingang auf Low ziehst, bekommst du genau genommen
einen Kurzschluss.
Allerdings bewirkt der Reset, dass der Timerausgang hochohmig wird. Der
Kurzschluss ist also nur von sehr kurzer Dauer.
Meine Erfahrung ist, dass der Chip davon keinen Schaden nimmt.
Sicherheitshalber könnte man eine Diode dazwischen schalten, oder einen
Widerstand.
Auf jeden Fall ist es nicht notwendig, die Verbindung ganz zu trennen,
um Firmware hochzuladen.
Joachim S. schrieb:> Für den zum Flashen nötigen Reset kann man m.W.n. zwischen nRESET und> CH_PD wählen; statt direkt den nRESET-Pin zu steuern, könntest Du> stattdessen den CH_PD-Pin steuern und Dir so jegliche zusätzliche> Bauteile sparen.
Ich benutze schon immer und nur CH_PD zum Flashen, war in der ersten
Anleitung, die ich in die Hände bekam, so beschrieben.
MfG Klaus
Danke für die hilfreichen Antworten. Einfach CH_PD zu nutzen wäre
attraktiv, gibt es dafür "belastbarere" Quellen, dass das sicher und
immer funktioniert?
Falls das für Dich belastbar genug ist: im Quellcode von "esptool.py",
das mittlerweile von Esprissif persönlich maintained wird, findet sich
z.B. bestätigt, dass das zum Resetten des ESPs verwendete RTS-Signal
wahlweise mit nRESET oder CH_PD verbunden werden kann:
1
# issue reset-to-bootloader:
2
# RTS = either CH_PD/EN or nRESET (both active low = chip in reset
3
# DTR = GPIO0 (active low = boot to flasher)
Und wie Klaus benutze auch ich CH_PD statt nRESET bei manchen
ESP8266-Schaltungen zum Flashen, bislang ohne Probleme.
@stefanus: Nichts für ungut, aber eine offizielle Angabe und ein
"funktioniert bei mir" ist noch was anderes ;)
@oyo: Sowas meinte ich, danke
Ich habe auch noch was gefunden. Das DB vom ESP8285 scheint das nicht zu
erwähnen, aber im DB des ESP8266EX wird das auch beschrieben:
1
Pin7 CH_EN can also be used as a reset pin. ESP8266EX will power off when CH_EN pin
2
is held low and the input level is below 0.6V and stays for at least 200 μs.
Ich würde sagen, das Thema ist damit erledigt, danke allen!
> Nichts für ungut, aber eine offizielle Angabe und ein> "funktioniert bei mir" ist noch was anderes
Ganz recht. Den offiziellen Angaben des Chipherstellers kannst du
weniger glauben, als meinen Angaben. Denn sie sind unvollständig,
ungenau und oft auch einfach falsch.
Ich erinnere nur an die Stromaufnahme im Deep Sleep Modus, um nur einen
Klopper zu nennen. (Erst waren es max. 10µA, dann max. 20µA und jetzt
sind es "typisch" 20µA aber bei 2,5V). Vor zwei Jahren war der Chip noch
"Ultra Low Power", jetzt nur noch "Energy Efficient".
Es ist nicht so dass der Chip schlechter wurde, sondern das Datenblatt
wurde ehrlicher. Was die Händler jedoch nicht davon abhält, komplette
Module immer noch mit "max 10µA" anzupreisen. Wie soll das gehen, wenn
der Chip alleine schon mehr Strom aufnimmt?
> ESP8266EX will power off when CH_EN pinis held low
Das ist nur halb richtig. Wenn der Pin bereits beim Anlegen der
Stromversorgung Low ist, zieht der Chip ca 25mA. Wenn man ihn jedoch
NACH dem Booten auf Low legt, zieht der Chip nur noch ca 20µA.
Für das Flashen der Firmware spiel dieses Detail keine Rolle, aber für
den Batteriebetrieb danach schon. Die richtigen Angaben findest du auf
meiner Homepage.
Sorry wenn ich so hart klinge. Normalerweise poche ich immer darauf, die
Datenblätter zu lesen und sich darauf zu verlassen. Aber beim ESP8266
ist das leider genau die falsche Taktik.