espflash — programator oprogramowania układowego bootloadera ROM ESP32¶
Ten moduł udostępnia minimalną implementację ESPFlash, która komunikuje się z bootloaderem ROM ESP32 przez UART. Jest przeznaczony do aktualizacji oprogramowania układowego ESP32 w systemie na modułach towarzyszących (na przykład module U-blox NINA-W10 używanym na płytkach Arduino) i nie zastępuje pełnego narzędzia esptool. Zaawansowane funkcje (loader pośredniczący, inne układy ESP, deflate, secure boot itp.) celowo nie są obsługiwane.
Sterownik przełącza RESET i GPIO0, aby wprowadzić ESP32 w tryb pobierania, a następnie wysyła komendy w ramkach SLIP w celu odczytania rozmiaru pamięci flash, skonfigurowania interfejsu SPI, zapisania obrazu oprogramowania układowego i zweryfikowania go za pomocą sumy MD5.
Przykład dla Arduino Nano RP2040 Connect (jedynej płytki obsługiwanej przez OpenMV, na której espflash jest obecnie zamrożony). Piny resetu i bootstrap NINA-W102 to odpowiednio GPIO 3 i GPIO 2 RP2040, a UART0 modułu NINA jest podłączony do UART1 RP2040 (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)¶
Tworzy obiekt
ESPFlash, który steruje bootloaderem ROM ESP32.reset to instancja
machine.Pinpodłączona do liniiRESETESP32, skonfigurowana jako wyjście.gpio0 to instancja
machine.Pinpodłączona do liniiGPIO0ESP32, skonfigurowana jako wyjście.uart to instancja
machine.UARTpodłączona do pinówUART0ESP32. Musi być zainicjalizowana z szybkością transmisji (baud) 115200 i niezerowym limitem czasu odczytu.log_enabled włącza szczegółowe rejestrowanie ramek SLIP wymienianych z bootloaderem. Przydatne wyłącznie do debugowania.
Konstruktor spróbuje zaimportować
hashlib. Jeślihashlib.md5jest dostępne, bieżąca suma MD5 używana przezESPFlash.flash_verify_file()zostanie obliczona automatycznie podczas zapisu.- set_baudrate(baudrate: int, timeout: int = 350) None¶
Zmienia szybkość transmisji (baud) bootloadera na UART.
baudrate to nowa szybkość transmisji (baud), na którą należy przełączyć. Jeśli różni się od aktualnie aktywnej szybkości, do bootloadera wysyłana jest komenda
CHANGE_BAUDRATEprzed ponownym skonfigurowaniem lokalnego UART.timeout jest zarezerwowany i obecnie nieużywany.
Nie ma efektu, jeśli bazowy obiekt UART nie implementuje metody
init().
- bootloader(retry: int = 6) bool¶
Steruje
RESETiGPIO0, aby wejść w tryb pobierania ROM ESP32 i zsynchronizować się z bootloaderem.retry to liczba prób resetu/synchronizacji przed rezygnacją.
Zwraca
Truew przypadku powodzenia, w przeciwnym razie zgłaszaException.
- flash_read_size() int¶
Odczytuje identyfikator JEDEC pamięci flash SPI i zwraca rozmiar pamięci flash w bajtach.
Zgłasza
Exception, jeśli raportowane bity rozmiaru są poza oczekiwanym zakresem0x12-0x19.
- flash_attach() None¶
Podłącza się do pamięci flash SPI. Musi być wywołane raz po
bootloader()i przed jakąkolwiek operacją odczytu/zapisu pamięci flash.
- flash_config(flash_size: int = 2 * 1024 * 1024) None¶
Konfiguruje parametry pamięci flash SPI.
flash_size to całkowity rozmiar pamięci flash w bajtach, zazwyczaj wartość zwracana przez
flash_read_size().
Rozmiary bloku, sektora i strony są ustalone odpowiednio na 64 KiB, 4 KiB i 256 bajtów.
- flash_write_file(path: str, blksize: int = 0x1000) None¶
Zapisuje obraz oprogramowania układowego do pamięci flash, zaczynając od przesunięcia 0.
path to ścieżka w systemie plików do binarnego pliku oprogramowania układowego, które ma zostać zapisane do pamięci flash.
blksize to rozmiar w bajtach każdego bloku danych wysyłanego do bootloadera. Musi być wielokrotnością rozmiaru sektora.
Ostatni blok jest uzupełniany wartością
0xFFdo pełnego blksize. Jeśli obsługa MD5 jest dostępna, bieżąca suma MD5 jest aktualizowana podczas zapisu, dzięki czemuflash_verify_file()można wywołać bez argumentów.
- flash_verify_file(path: str, digest: bytes | None = None, offset: int = 0) None¶
Weryfikuje zawartość pamięci flash względem pliku oprogramowania układowego.
path to ścieżka w systemie plików do referencyjnego binarnego pliku oprogramowania układowego; jego rozmiar określa liczbę bajtów do zweryfikowania.
digest to opcjonalna, wstępnie obliczona suma MD5 pliku zakodowana szesnastkowo. Jeśli
None, używana jest suma obliczona podczas ostatniego wywołaniaflash_write_file().offset to przesunięcie w pamięci flash w bajtach, od którego rozpoczyna się weryfikacja.
Zgłasza
Exception, jeśli żadna suma nie jest dostępna lub jeśli zawartość pamięci flash nie zgadza się z sumą referencyjną.