Die grundlegende Funktionsweise des ESPTool

Im Beispiel des vorherigen Kapitels erscheint der Einsatz des ESPTool sehr übersichtlich. Mit nur wenigen Anweisungen erlaubt das ESPTool auf einfachstem Wege einen ESP8266 zu beschreiben. Zwar funktioniert das Beschreiben eines ESP8266 bereits auf diesem einfachen Weg schlussendlich ist das ESPTool aber maßgeschneidert für den ESP8266. Diesbezüglich empfiehlt es sich die Funktionsweise im Detail zu betrachten.

Die grundlegende Funktionsweise erklärt sich bereits sehr einfach aus der vorherigen Befehlszeile innerhalb des Terminal:

python esptool.py --port /dev/tty.wchusbserialfd3110 -b 115200 write_flash 0x00000 nodemcu-master.bin

Das Python ESPTool Beispiel im Detail

Zunächst wird mittels

python esptool.py

die Anwendung Python 2.7. innerhalb von Terminal aufgerufen um das Pythonscript esptool.py auszuführen. Zur Ausführung bedarf es jedoch folgender, grundlegender Parameter.

Durch den Parameter

--port /dev/tty.wchusbserialfd3110

wird ESPTool mitgeteilt auf welche Schnittstelle zugegriffen wird.

Ein weiterer wichtiger Parameter ist die Baudrate / Übertragungsgeschwindigkeit

-b 115200

mit der die serielle Kommunikation zum ESP8266 hergestellt wird. Je nach Modul und vor allem Kabel / Verbindung kann die Übertragungsgeschwindigkeit entsprechend variieren. Detaillierte Informationen zur seriellen UART Schnittstelle finden sich hier.

Der nächste Parameter

write_flash

ist der Befehl der innerhalb der esptool.py Datei aufgerufen um die Firmware in den Speicher / SPI Flash zu schreiben.

Zu diesem Befehl bedarf es jedoch zusätzlich die Startposition anzugeben sowie was überhaupt ab dieser angegebenen Position geschrieben werden soll. Im vorherigen Beispiel

0x00000 nodemcu-master.bin

Hier spiegelt sich auch die Eingangs erwähnten Schichten des Kernels wieder, denn ohne Kernel, bzw. Firmware ist der Speicher / SPI Flash lediglich ein Speichermedium mit Sektoren ohne jedwede Speicher oder Dateiordnung.

Willkommen in der Welt der embedded Systems.

Auch kann die Firmware aus mehreren Binaries bestehen, grundlegend wird dabei die jeweilige Startposition, gefolgt von der jeweiligen bin Datei angegeben.

Nachfolgend ein Beispiel einer Firmware bestehend aus mehreren Binaries.

0x00000 file1.bin 0x01000 file2.bin 0x11000 file3.bin 0xdc000 file4.bin

Neben diesen grundlegenden Parametern gibt es zusätzlich nachgenannte Argumente die zum optimalen Beschreiben eines ESP8266 die in der Befehlszeile übergeben werden.

Die Flashgröße des jeweiligen ESP8266 an ESPTool übergeben

Die Flashgröße bezeichnet das Speichervolumen des jeweiligen ESP8266 Modul. Üblicherweise wird die Flashgröße nicht in MB Mega Byte sondern in Mb Mega bit angegeben. Da sich 1 Byte aus 8 bit zusammensetzt erklärt sich selbstredend das die Flashgröße stets in Mb als Mega bit angegeben wird. Die Übergabe der Flashgröße erfolgt beispielsweise im Bezug auf einen ESP-12E mit 32 Mbit Flash durch folgendes Argument im vorherigen Beispiel:

python esptool.py --port /dev/tty.wchusbserialfd3110 -b 115200 write_flash --flash_size 32m 0x00000 nodemcu-master.bin

Der ESP8266EX kann derzeit  eine maximale Größe von 32 Mbit verwalten, je nach ESP8266 Modul, bzw. verbauter Flashgröße sind folgende Argumente möglich:

  • –flash_size 4m für 4Mbit SPI Flash (512 Byte)
  • –flash_size 2m  für 2Mbit SPI Flash (256 Byte)
  • –flash_size 8m  für 8Mbit SPI Flash (1024 Byte)
  • –flash_size 16m  für 16Mbit SPI Flash (2048 Byte)
  • –flash_size 32m  für 32Mbit SPI Flash (4096 Byte)

zusätzlich zu den Standardparametern gibt es zusätzlich

  • –flash_size 16m-c1
  • –flash_size 32m-c1
  • –flash_size 32m-c2

Selbstredend bezieht sich die Flashgröße stets auf dem im jeweiligen ESP8266 Modul verbauten SPI Flash / Speicher oder besser gesagt auf dessen Größe. Insofern man keine Kenntnis über die Speichergröße des jeweiligen ESP8266 Modul hat, kann diese innerhalb der NodeMCU Firmware ausgelesen werden.

Die Flash Frequenz / die Taktfrequenz des Speichers

Wie bereits bei den Schichten des Kernels erwähnt werden hier auch die laufenden und anstehenden Prozesse verwaltet. Im praktischen Sinne reicht der Kernprozessor dabei die Daten an den Prozessor des SPI Flash gemäß der Taktfrequenz / Geschwindigkeit des Prozessors des SPI Flash (Speicher) weiter. Zwar kann der ESP8266EX, als Kernprozessor anstatt mit 90 MHz. auch mit 180 MHz. betrieben werden, allerdings kommt das nicht beim Beschreiben / Flashen zu tragen. Erst nachdem ein ESP8266 Modul mit einer Firmware beschrieben wurde kann die Taktfrequenz des ESP8266EX entsprechend umgeschaltet werden. Dementsprechend stehen folgende Argumente beim Beschreiben eines ESP8266 Modul zur Verfügung:

  • –flash_freq 40m für 40MHz. Taktfrequenz des SPI Prozessors
  • –flash_freq 26m für 26MHz. Taktfrequenz des SPI Prozessors
  • –flash_freq 20m für 20MHz. Taktfrequenz des SPI Prozessors
  • –flash_freq 80m für 80MHz. Taktfrequenz des SPI Prozessors

Aktuelle und originale Module verfügen über einen SPI Flash mit einer Taktfrequenz von 80 MHz. (bis auf den ESP-01 dessen SPI Flash arbeitet mit 120 MHz.). In Anlehnung an das vorgenannte Beispiel eines ESP-12 wird das Argument dabei wie folgt übergeben:

python esptool.py --port /dev/tty.wchusbserialfd3110 -b 115200 write_flash --flash_size 32m --flash_freq 80m 0x00000 nodemcu-master.bin

Den Flash Modus des SPI Flash / Ram übergeben

Der Flash Modus ist bezeichnend für die Anzahl der Datenkanäle zwischen dem ESP8266EX als Kernprozessor und dem SPI Flash (Speicher). Prinzipiell wird hier zwischen 2 Datenkanälen und 4 Datenkanälen unterschieden. So werden hier typischerweise im dio (dual input / output)  Modus lediglich 2 Kanäle zur Datenübertragung verwendet. Die zu optionale Argumente innerhalb der Anweisung sind wie folgt

  • –flash_mode qio für 4 Kanäle In Output
  • –flash_mode qout für 4 Kanäle Out
  • –flash_mode dio für 2 Kanäle In / Output
  • –flash_mode dout für 2 Kanäle Out

Einige ESP8266 Module wie beispielsweise der ESP201 verwendet den GPIO9 und GPIO10 zusätzlich zum Datentransfer zwischen dem Kernprozessor ESP8266EX und dem SPI Flash. Die Größe des Flash SPI (RAM / Speicher) beträgt hingegen lediglich 8Mbit (1024 MByte) mit einer SPI Flash Taktfrequenz  von 80 MHz.. Dem zur Folge müsste der ESP8266 ESP-201 durch die Übergabe folgender Parameter beschrieben werden:

python esptool.py --port /dev/tty.wchusbserialfd3110 -b 115200 write_flash --flash_size 8m --flash_freq 80m --flash_mode qio 0x00000 nodemcu-master.bin

 Neben der Flash Funktion verfügt das ESPTool über die hier erläuterten Funktionen.