espflash — ESP32 ROM bootloader aygıt yazılımı flaşlayıcısı

Bu modül, ESP32 ROM bootloader ile UART üzerinden iletişim kuran minimal bir ESPFlash uygulaması sağlar. Yardımcı modüllerdeki ESP32 aygıt yazılımının (firmware) sistem içi güncellemeleri için tasarlanmıştır (örneğin Arduino kartlarında kullanılan U-blox NINA-W10 modülü) ve tam esptool aracının yerini almaz. Gelişmiş özellikler (stub yükleyici, diğer ESP yongaları, deflate, secure boot vb.) kasıtlı olarak desteklenmez.

Sürücü, ESP32’yi indirme moduna almak için RESET ve GPIO0 pinlerini değiştirir, ardından flash boyutunu okumak, SPI arayüzünü yapılandırmak, aygıt yazılımı görüntüsünü yazmak ve bir MD5 özetiyle doğrulamak için SLIP çerçeveli komutlar gönderir.

Arduino Nano RP2040 Connect için örnek (espflash‘in şu anda donduruluğu tek OpenMV destekli kart). NINA-W102’nin reset ve boot-strap pinleri sırasıyla RP2040 GPIO 3 ve GPIO 2‘dir ve NINA’nın UART0‘ı RP2040 UART1‘e bağlıdır (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)

ESP32 ROM bootloader’ı süren bir ESPFlash nesnesi oluşturur.

  • reset, çıkış olarak yapılandırılmış, ESP32 RESET hattına bağlı bir machine.Pin örneğidir.

  • gpio0, çıkış olarak yapılandırılmış, ESP32 GPIO0 hattına bağlı bir machine.Pin örneğidir.

  • uart, ESP32 UART0 pinlerine bağlı bir machine.UART örneğidir. 115200 baud hızında ve sıfır olmayan bir okuma zaman aşımı ile başlatılmalıdır.

  • log_enabled, bootloader ile değiş tokuş edilen SLIP çerçevelerinin ayrıntılı kayıt tutmasını etkinleştirir. Yalnızca hata ayıklama için kullanışlıdır.

Yapıcı, hashlib modülünü içe aktarmaya çalışır. hashlib.md5 mevcutsa, ESPFlash.flash_verify_file() tarafından kullanılan çalışan MD5 özeti, yazma sırasında otomatik olarak hesaplanır.

set_baudrate(baudrate: int, timeout: int = 350) None

Bootloader UART baud hızını değiştirir.

  • baudrate, geçilecek yeni baud hızıdır. Şu anda etkin olan baud hızından farklıysa, yerel UART yeniden yapılandırılmadan önce bootloader’a bir CHANGE_BAUDRATE komutu gönderilir.

  • timeout ayrılmıştır ve şu anda kullanılmamaktadır.

Temel UART nesnesi bir init() metodu uygulamıyorsa hiçbir etkisi yoktur.

bootloader(retry: int = 6) bool

ESP32 ROM indirme moduna girmek ve bootloader ile senkronize olmak için RESET ve GPIO0 pinlerini sürer.

  • retry, vazgeçmeden önceki reset/senkronizasyon denemelerinin sayısıdır.

Başarı durumunda True döndürür, aksi takdirde bir Exception fırlatır.

flash_read_size() int

SPI flash JEDEC kimliğini okur ve flash boyutunu bayt cinsinden döndürür.

Bildirilen boyut bitleri beklenen 0x12-0x19 aralığının dışındaysa bir Exception fırlatır.

flash_attach() None

SPI flash’a bağlanır. bootloader() çağrıldıktan sonra ve herhangi bir flash okuma/yazma işleminden önce bir kez çağrılmalıdır.

flash_config(flash_size: int = 2 * 1024 * 1024) None

SPI flash parametrelerini yapılandırır.

  • flash_size, bayt cinsinden toplam flash boyutudur; tipik olarak flash_read_size() tarafından döndürülen değerdir.

Blok, sektör ve sayfa boyutları sırasıyla 64 KiB, 4 KiB ve 256 bayt olarak sabittir.

flash_write_file(path: str, blksize: int = 0x1000) None

0 ofsetinden başlayarak flash’a bir aygıt yazılımı görüntüsü yazar.

  • path, flaşlanacak aygıt yazılımı ikilisinin dosya sistemi yoludur.

  • blksize, bootloader’a gönderilen her veri bloğunun bayt cinsinden boyutudur. Sektör boyutunun katı olmalıdır.

Son blok, tam bir blksize‘a kadar 0xFF ile doldurulur. MD5 desteği mevcutsa, çalışan MD5 özeti yazma sırasında güncellenir; böylece flash_verify_file() argümansız olarak çağrılabilir.

flash_verify_file(path: str, digest: bytes | None = None, offset: int = 0) None

Flash içeriğini bir aygıt yazılımı dosyasına göre doğrular.

  • path, referans aygıt yazılımı ikilisinin dosya sistemi yoludur; boyutu, doğrulanacak bayt sayısını belirler.

  • digest, dosyanın isteğe bağlı, önceden hesaplanmış hex kodlu MD5 özetidir. None ise, en son flash_write_file() çağrısı sırasında hesaplanan özet kullanılır.

  • offset, doğrulamanın başladığı bayt cinsinden flash ofsetidir.

Hiçbir özet mevcut değilse veya flash içeriği referans özetiyle eşleşmiyorsa bir Exception fırlatır.

reboot() None

ROM bootloader’a ESP32’yi yeniden başlatmasını ve yeni flaşlanan aygıt yazılımını çalıştırmasını söyleyen bir FLASH_END komutu gönderir. Hiçbir yanıt okunmaz.