Firmware Espruino

Oficiální desky Espruino mají potřebný firmware od výroby a případný update lze provést v aplikaci Web IDE jedním kliknutím. My se ale chystáme používat desku ESP32 (je levnější a má širší škálu použití), takže potřebujeme na desku přeflashovat firmware ručně. Zde tlumočené instrukce lze číst též na espruino.com/esp32.

Stažení

Stáhneme aktuální verzi firmware z webu espruino.com/download. Pod nadpisem "Find a binary" zvolíme typ desky ESP32 a stáhneme tři soubory odpovídající některé verzi: bootloader.bin, partitions_espruino.binespruino_esp32.bin. V době psaní tohoto návodu je aktuální verze 2.04.

Pro flashování budeme potřebovat skript esptool, který je psaný v jazyce Python. Pokud na počítači nemáte Python, nejdřív ho nainstalujte – buďto z webu python.org/downloads anebo například z Microsoft Store, v závislosti na operačním systému. Nebudeme potřebovat v Pythonu nic programovat, stačí potřebný skript nainstalovat a spustit.

Abychom nainstalovali esptool, nejsnazší je použít balíčkovací systém pip. V příkazové řádce svého operačního systému spusťte: python -m pip install esptool. Pokud se instalace nedaří, můžete místo toho stáhnout soubor esptool.py z repozitáře github.com/espressif/esptool – v tom případě ale budete potřebovat ještě ručně opatřit modul serial a následující příkazy v tomto návodu upravit, abyste spouštěli příslušný stažený soubor.

Ovladač pro Windows

Na Windows je potřeba doinstalovat ovladač sériového portu z webu silabs.com. Ostatní operační systémy obvykle ovladač už mají.

Připojení

Desku ESP32 připojíme k počítači USB kabelem. Na většině desek se už v tu chvíli rozsvítí dioda napájení.

Rádi bychom si ověřili, že deska má všech pět pohromadě. Spustíme proto příkaz python -m serial.tools.list_ports. Měl by vypsat něco jako:

/dev/ttyUSB0        
1 ports found

V tomto případě je deska připojená na virtuálním seriovém portu /dev/ttyUSB0. Může se stát, že to budeme potřebovat vědět.

Pokud se nevypíše žádný port, chybí nám ovladač sériového portu (to je lepší možnost), anebo je deska vadná (to je horší). Některé desky jsou vadné už z výroby, například můžou být některé SMD součástky připájené nakřivo. Jiné se v důsledku výrobní vady spálí až během používání, to se nejčastěji týká výkonových součástek okolo USB konektoru. Pokud věříme svým elektrotechnickým schopnostem a máme jinou funkční desku pro srovnání, můžeme najít problémovou součástku a opatrně ji přepájet. Jinak můžeme zkusit desku reklamovat u prodejce.

Flashování

Je potřeba provést postupně tři kroky:

Začneme smazáním paměti:

python -m esptool --chip esp32 erase_flash

Pokud mazání proběhne v pořádku, měl by příkaz vypsat něco takového:

esptool.py v2.7
Found 1 serial ports
Serial port /dev/ttyUSB0
Connecting........_
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, Coding Scheme None
Crystal is 40MHz
MAC: 30:ae:a4:73:a8:d4
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 1.2s
Hard resetting via RTS pin...

Druhým příkazem nahrajeme zároveň bootloader a firmware. Potřebujeme se v příkazové řádce dostat do adresáře, kde máme stažené tři soubory ze začátku návodu. Potom spustíme:

python -m esptool --baud 921600 write_flash -z --flash_mode dio --flash_freq 40m 0x1000 bootloader.bin 0x8000 partitions_espruino.bin 0x10000 espruino_esp32.bin

Příkaz by měl vypsat něco v tomto smyslu:

esptool.py v2.7
Found 1 serial ports
Serial port /dev/ttyUSB0
Connecting........_____..
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, Coding Scheme None
Crystal is 40MHz
MAC: 30:ae:a4:73:a8:d4
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 15392 bytes to 10130...
Wrote 15392 bytes (10130 compressed) at 0x00001000 in 0.1 seconds (effective 1005.4 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 166...
Wrote 3072 bytes (166 compressed) at 0x00008000 in 0.0 seconds (effective 6472.0 kbit/s)...
Hash of data verified.
Compressed 1366240 bytes to 883347...
Wrote 1366240 bytes (883347 compressed) at 0x00010000 in 13.0 seconds (effective 843.2 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

V tu chvíli je flashování hotové a deska připravená k použití.

Řešení chyb

Desky se od sebe liší prostě podle toho, která čínská fabrika ji zrovna vyráběla.

Některé desky při připojení můžou vyžadovat, abyste při nahrávání zmáčkli tlačítko BOOT zabudované na desce. Taková chyba se projevuje tak, že se esptool zasekne při připojování:

Connecting........________........________........________........________

A fatal error occurred: Timed out waiting for packet header

Kromě desek ESP32 se vyskytuje ještě hodně podobných, například ESP8266. Může se stát, že si omylem objednáme jinou desku, anebo nám nekompetentní obchodník pošle jinou, než jsme si objednali. Dost možná ale bude deska i tak sloužit, pokud stáhneme správný firmware a nainstalujeme ho podle tohoto návodu. Konkrétně desky ESP8266 se chovají docela pěkně.

Jak bylo zmíněno v oddíle [Připojení], někdy dostaneme prostě vadnou desku a zdaleka ne vždy jde taková chyba řešit.