espflash — programer ESP32 ROM bootloader ugrađenog programa (firmware)¶
Ovaj modul pruža minimalnu implementaciju ESPFlash koja komunicira s ESP32 ROM pokretačem (bootloader) putem UART-a. Namijenjen je za ažuriranje ESP32 ugrađenog programa (firmware) u sustavu na pomoćnim modulima (na primjer, U-blox NINA-W10 modul koji se koristi na Arduino pločama) i nije zamjena za potpuni alat esptool. Napredne značajke (stub loader, drugi ESP čipovi, deflate, secure boot itd.) namjerno nisu podržane.
Upravljački program preklapa RESET i GPIO0 kako bi ESP32 doveo u način preuzimanja, zatim izdaje naredbe uokvirene SLIP protokolom za čitanje veličine flash memorije, konfiguriranje SPI sučelja, zapisivanje slike ugrađenog programa (firmware) i njezinu provjeru putem MD5 sažetka.
Primjer za Arduino Nano RP2040 Connect (jedinu OpenMV-om podržanu ploču gdje je espflash trenutno zamrznut). Pinovi za resetiranje i pokretanje NINA-W102 su RP2040 GPIO 3 odnosno GPIO 2, a NINA-in UART0 je spojen na RP2040 UART1 (TX = GPIO 8, RX = GPIO 9):
from machine import Pin, UART
from espflash import ESPFlash
reset = Pin(3, Pin.OUT) # NINA RESET
gpio0 = Pin(2, Pin.OUT) # NINA GPIO0
uart = UART(1, 115200, timeout=1000)
esp = ESPFlash(reset, gpio0, uart)
esp.bootloader()
esp.set_baudrate(921600)
size = esp.flash_read_size()
esp.flash_attach()
esp.flash_config(size)
esp.flash_write_file("NINA_FW.bin")
esp.flash_verify_file("NINA_FW.bin")
esp.reboot()
class ESPFlash¶
- class espflash.ESPFlash(reset: 'machine.Pin', gpio0: 'machine.Pin', uart: 'machine.UART', log_enabled: bool = False)¶
Konstruira
ESPFlashobjekt koji upravlja ESP32 ROM pokretačem (bootloader).reset je instanca
machine.Pinspojena na ESP32RESETliniju, konfigurirana kao izlaz.gpio0 je instanca
machine.Pinspojena na ESP32GPIO0liniju, konfigurirana kao izlaz.uart je instanca
machine.UARTspojena na ESP32UART0pinove. Mora biti inicijalizirana na 115200 baud s nenultim vremenom čekanja čitanja.log_enabled omogućuje opširno bilježenje SLIP okvira izmijenjenih s pokretačem (bootloader). Korisno samo za otklanjanje pogrešaka.
Konstruktor će pokušati uvesti
hashlib. Ako jehashlib.md5dostupan, tekući MD5 sažetak koji koristiESPFlash.flash_verify_file()automatski će se izračunavati tijekom zapisivanja.- set_baudrate(baudrate: int, timeout: int = 350) None¶
Mijenja brzinu prijenosa (baud) UART-a pokretača (bootloader).
baudrate je nova brzina prijenosa (baud) na koju se prelazi. Ako se razlikuje od trenutno aktivne brzine prijenosa (baud), pokretaču (bootloader) se izdaje naredba
CHANGE_BAUDRATEprije nego što se lokalni UART ponovno konfigurira.timeout je rezerviran i trenutno se ne koristi.
Nema učinka ako temeljni UART objekt ne implementira metodu
init().
- bootloader(retry: int = 6) bool¶
Upravlja s
RESETiGPIO0za ulazak u ESP32 ROM način preuzimanja i sinkronizaciju s pokretačem (bootloader).retry je broj pokušaja resetiranja/sinkronizacije prije odustajanja.
Vraća
Trueu slučaju uspjeha, inače bacaException.
- flash_read_size() int¶
Čita SPI flash JEDEC ID i vraća veličinu flash memorije u bajtovima.
Baca
Exceptionako su prijavljeni bitovi veličine izvan očekivanog raspona0x12-0x19.
- flash_attach() None¶
Pridružuje se SPI flash memoriji. Mora se pozvati jednom nakon
bootloader()i prije bilo kakve operacije čitanja/zapisivanja flash memorije.
- flash_config(flash_size: int = 2 * 1024 * 1024) None¶
Konfigurira parametre SPI flash memorije.
flash_size je ukupna veličina flash memorije u bajtovima, obično vrijednost koju vraća
flash_read_size().
Veličine bloka, sektora i stranice fiksirane su na 64 KiB, 4 KiB odnosno 256 bajtova.
- flash_write_file(path: str, blksize: int = 0x1000) None¶
Zapisuje sliku ugrađenog programa (firmware) u flash memoriju počevši od pomaka 0.
path je putanja datotečnog sustava do binarne datoteke ugrađenog programa (firmware) koju treba zapisati u flash memoriju.
blksize je veličina u bajtovima svakog bloka podataka poslanog pokretaču (bootloader). Mora biti višekratnik veličine sektora.
Posljednji blok dopunjava se s
0xFFdo pune blksize. Ako je podrška za MD5 dostupna, tekući MD5 sažetak ažurira se tijekom zapisivanja tako da seflash_verify_file()može pozvati bez argumenata.
- flash_verify_file(path: str, digest: bytes | None = None, offset: int = 0) None¶
Provjerava sadržaj flash memorije u odnosu na datoteku ugrađenog programa (firmware).
path je putanja datotečnog sustava do referentne binarne datoteke ugrađenog programa (firmware); njezina veličina određuje broj bajtova za provjeru.
digest je opcionalni unaprijed izračunati MD5 sažetak datoteke kodiran u heksadekadskom obliku. Ako je
None, koristi se sažetak izračunat tijekom posljednjeg pozivaflash_write_file().offset je pomak u flash memoriji u bajtovima na kojem počinje provjera.
Baca
Exceptionako nije dostupan nijedan sažetak ili ako se sadržaj flash memorije ne podudara s referentnim sažetkom.