espflash --- pemflash firmware bootloader ROM ESP32¶
Modul ini menyediakan implementasi minimal ESPFlash yang berkomunikasi dengan bootloader ROM ESP32 melalui UART. Modul ini ditujukan untuk pembaruan firmware ESP32 secara in-system pada modul kompanion (misalnya, modul U-blox NINA-W10 yang digunakan pada papan Arduino), dan bukan pengganti utilitas esptool lengkap. Fitur-fitur lanjutan (stub loader, chip ESP lain, deflate, secure boot, dll.) tidak didukung secara sengaja.
Driver ini mengaktifkan RESET dan GPIO0 untuk menempatkan ESP32 ke mode unduh, kemudian mengeluarkan perintah bertingkai SLIP untuk membaca ukuran flash, mengonfigurasi antarmuka SPI, menulis citra firmware dan memverifikasinya melalui digest MD5.
Contoh untuk Arduino Nano RP2040 Connect (satu-satunya papan yang didukung OpenMV di mana espflash saat ini dibekukan). Pin reset dan boot-strap NINA-W102 adalah RP2040 GPIO 3 dan GPIO 2 masing-masing, dan UART0 NINA dihubungkan ke 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)¶
Membuat objek
ESPFlashyang mengendalikan bootloader ROM ESP32.reset adalah instans
machine.Pinyang terhubung ke jalurRESETESP32, dikonfigurasi sebagai output.gpio0 adalah instans
machine.Pinyang terhubung ke jalurGPIO0ESP32, dikonfigurasi sebagai output.uart adalah instans
machine.UARTyang terhubung ke pinUART0ESP32. Harus diinisialisasi pada laju baud 115200 dengan timeout baca bukan nol.log_enabled mengaktifkan pencatatan verbose dari bingkai SLIP yang dipertukarkan dengan bootloader. Berguna hanya untuk debugging.
Konstruktor akan mencoba mengimpor
hashlib. Jikahashlib.md5tersedia, digest MD5 yang berjalan yang digunakan olehESPFlash.flash_verify_file()akan dihitung secara otomatis saat penulisan.- set_baudrate(baudrate: int, timeout: int = 350) None¶
Ubah laju baud UART bootloader.
baudrate adalah laju baud baru untuk beralih. Jika berbeda dari laju baud yang aktif saat ini, perintah
CHANGE_BAUDRATEdikirim ke bootloader sebelum UART lokal dikonfigurasi ulang.timeout dicadangkan dan saat ini tidak digunakan.
Tidak berpengaruh jika objek UART yang mendasarinya tidak mengimplementasikan metode
init().
- bootloader(retry: int = 6) bool¶
Aktifkan
RESETdanGPIO0untuk masuk ke mode unduh ROM ESP32 dan sinkronisasi dengan bootloader.retry adalah jumlah percobaan reset/sinkronisasi sebelum menyerah.
Mengembalikan
Truejika berhasil, jika tidak maka akan memunculkanException.
- flash_read_size() int¶
Baca JEDEC ID flash SPI dan kembalikan ukuran flash dalam byte.
Memunculkan
Exceptionjika bit ukuran yang dilaporkan berada di luar rentang0x12-0x19yang diharapkan.
- flash_attach() None¶
Sambungkan ke flash SPI. Harus dipanggil sekali setelah
bootloader()dan sebelum operasi baca/tulis flash apa pun.
- flash_config(flash_size: int = 2 * 1024 * 1024) None¶
Konfigurasikan parameter flash SPI.
flash_size adalah total ukuran flash dalam byte, biasanya nilai yang dikembalikan oleh
flash_read_size().
Ukuran blok, sektor, dan halaman ditetapkan masing-masing pada 64 KiB, 4 KiB, dan 256 byte.
- flash_write_file(path: str, blksize: int = 0x1000) None¶
Tulis citra firmware ke flash mulai dari offset 0.
path adalah jalur filesystem dari biner firmware yang akan di-flash.
blksize adalah ukuran dalam byte dari setiap blok data yang dikirim ke bootloader. Harus merupakan kelipatan dari ukuran sektor.
Blok terakhir diisi dengan
0xFFhingga blksize penuh. Jika dukungan MD5 tersedia, digest MD5 yang berjalan diperbarui selama penulisan sehinggaflash_verify_file()dapat dipanggil tanpa argumen.
- flash_verify_file(path: str, digest: bytes | None = None, offset: int = 0) None¶
Verifikasi isi flash terhadap berkas firmware.
path adalah jalur filesystem dari biner firmware referensi; ukurannya menentukan jumlah byte yang akan diverifikasi.
digest adalah digest MD5 yang dikodekan hex yang telah dihitung sebelumnya secara opsional dari berkas tersebut. Jika
None, digest yang dihitung selama pemanggilanflash_write_file()terbaru digunakan.offset adalah offset flash dalam byte di mana verifikasi dimulai.
Memunculkan
Exceptionjika tidak ada digest yang tersedia atau jika isi flash tidak cocok dengan digest referensi.