ESP32 esptool.py Running stub... StopIteration beheben
Problem:
Beim Flashen eines ESP32, insbesondere beim Remote-Flashen, sehen Sie die folgende Protokollmeldung:
Serial port rfc2217://10.1.2.3.105:4418
Connecting...
Device PID identification is only supported on COM and /dev/ serial ports.
..
Chip is ESP32-S2
Features: WiFi, No Embedded Flash, No Embedded PSRAM, ADC and temperature sensor calibration in BLK2 of efuse V2
Crystal is 40MHz
MAC: 60:55:f9:f0:3a:16
Uploading stub...
Running stub...
Traceback (most recent call last):
File "/usr/local/bin/esptool.py", line 34, in <module>
esptool._main()
File "/usr/local/lib/python3.8/dist-packages/esptool/__init__.py", line 1004, in _main
main()
File "/usr/local/lib/python3.8/dist-packages/esptool/__init__.py", line 684, in main
esp = esp.run_stub()
File "/usr/local/lib/python3.8/dist-packages/esptool/loader.py", line 912, in run_stub
p = self.read()
File "/usr/local/lib/python3.8/dist-packages/esptool/loader.py", line 307, in read
return next(self._slip_reader)
StopIterationLösung
Dieses Problem tritt nicht wegen eines Hardware-Defekts auf, sondern weil die Latenz der Verbindung recht hoch ist und daher das Timeout auftritt, bevor die Kommunikation zwischen Skript und Bootloader stattfinden kann.
Um es zu beheben, müssen Sie das hartcodierte Standard-Timeout in der esptool.py-Installation bearbeiten!
Zuerst müssen Sie den Speicherort von loader.py in Ihrer Installation identifizieren. Sie können dies einfach anhand des folgenden Teils des Stack-Trace tun:
File "/usr/local/lib/python3.8/dist-packages/esptool/loader.py", line 912, in run_stub p = self.read()In diesem Fall befindet sich loader.py unter
/usr/local/lib/python3.8/dist-packages/esptool/loader.pySie müssen die folgende Zeile bearbeiten:
MEM_END_ROM_TIMEOUT = 0.05 # short timeout for ESP_MEM_END, as it may never respondund das Timeout erhöhen – meine Empfehlung ist, es auf 2.5 Sekunden zu erhöhen.
… oder Sie können das Timeout einfach mit dem folgenden Befehl ändern:
sed -i -e 's/MEM_END_ROM_TIMEOUT = 0.05/MEM_END_ROM_TIMEOUT = 2.5/g' /usr/local/lib/python3.8/dist-packages/esptool/loader.pyDanach sollte Ihr Upload einwandfrei funktionieren.