espflash — ESP32 ROM -käynnistyslataimen laiteohjelmiston flashaaja

Tämä moduuli tarjoaa minimaalisen ESPFlash -toteutuksen, joka kommunikoi ESP32 ROM -käynnistyslataimen kanssa UARTin kautta. Se on tarkoitettu apumoduulien ESP32-laiteohjelmiston järjestelmänsisäisiin päivityksiin (esimerkiksi Arduino-korteissa käytetty U-blox NINA-W10 -moduuli) eikä se korvaa täysimittaista esptool -työkalua. Edistyneitä ominaisuuksia (stub-latain, muut ESP-sirut, deflate, secure boot jne.) ei tarkoituksellisesti tueta.

Ajuri ohjaa RESET - ja GPIO0 -linjoja asettaakseen ESP32:n latausmoodiin ja antaa sitten SLIP-kehystettyjä komentoja flash-muistin koon lukemiseen, SPI-rajapinnan määrittämiseen, laiteohjelmistokuvan kirjoittamiseen ja sen varmentamiseen MD5-tiivisteen avulla.

Esimerkki Arduino Nano RP2040 Connect -kortille (ainoa OpenMV:n tukema kortti, jolla espflash on tällä hetkellä jäädytetty). NINA-W102:n reset- ja boot-strap-nastat ovat RP2040:n GPIO 3 ja GPIO 2, ja NINA:n UART0 on kytketty RP2040:n UART1 -liitäntään (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)

Muodostaa ESPFlash -olion, joka ohjaa ESP32 ROM -käynnistyslatainta.

  • reset on machine.Pin -ilmentymä, joka on kytketty ESP32:n RESET -linjaan ja määritetty ulostuloksi.

  • gpio0 on machine.Pin -ilmentymä, joka on kytketty ESP32:n GPIO0 -linjaan ja määritetty ulostuloksi.

  • uart on machine.UART -ilmentymä, joka on kytketty ESP32:n UART0 -nastoihin. Se on alustettava 115200 baudin nopeudelle nollasta poikkeavalla lukuaikakatkaisulla.

  • log_enabled ottaa käyttöön käynnistyslataimen kanssa vaihdettujen SLIP-kehysten yksityiskohtaisen lokituksen. Hyödyllinen vain vianjäljitykseen.

Muodostin yrittää tuoda hashlib -moduulin. Jos hashlib.md5 on käytettävissä, ESPFlash.flash_verify_file() -funktion käyttämä juokseva MD5-tiiviste lasketaan automaattisesti kirjoituksen aikana.

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

Vaihtaa käynnistyslataimen UART-siirtonopeuden.

  • baudrate on uusi siirtonopeus, johon vaihdetaan. Jos se poikkeaa nykyisestä aktiivisesta siirtonopeudesta, käynnistyslataimelle annetaan CHANGE_BAUDRATE -komento ennen kuin paikallinen UART uudelleenmääritetään.

  • timeout on varattu eikä sitä tällä hetkellä käytetä.

Ei vaikutusta, jos taustalla oleva UART-olio ei toteuta init() -metodia.

bootloader(retry: int = 6) bool

Ohjaa RESET - ja GPIO0 -linjoja siirtyäkseen ESP32 ROM -latausmoodiin ja synkronoituakseen käynnistyslataimen kanssa.

  • retry on reset/sync-yritysten määrä ennen luovuttamista.

Palauttaa True onnistuessa, muuten nostaa Exception -poikkeuksen.

flash_read_size() int

Lukee SPI-flash-muistin JEDEC-tunnuksen ja palauttaa flash-muistin koon tavuina.

Nostaa Exception -poikkeuksen, jos raportoidut kokobitit ovat odotetun 0x12 - 0x19 -alueen ulkopuolella.

flash_attach() None

Liittyy SPI-flash-muistiin. On kutsuttava kerran bootloader() -kutsun jälkeen ja ennen mitä tahansa flash-muistin luku-/kirjoitusoperaatiota.

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

Määrittää SPI-flash-muistin parametrit.

  • flash_size on flash-muistin kokonaiskoko tavuina, tyypillisesti flash_read_size() -funktion palauttama arvo.

Lohko-, sektori- ja sivukoot on kiinnitetty arvoihin 64 KiB, 4 KiB ja 256 tavua.

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

Kirjoittaa laiteohjelmistokuvan flash-muistiin alkaen siirtymästä 0.

  • path on flashattavan laiteohjelmistobinäärin tiedostopolku.

  • blksize on kunkin käynnistyslataimelle lähetetyn datalohkon koko tavuina. Sen on oltava sektorikoon monikerta.

Viimeinen lohko täytetään 0xFF -tavuilla täyteen blksize -kokoon. Jos MD5-tuki on käytettävissä, juokseva MD5-tiiviste päivitetään kirjoituksen aikana, jotta flash_verify_file() voidaan kutsua ilman argumentteja.

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

Varmentaa flash-muistin sisällön laiteohjelmistotiedostoa vastaan.

  • path on referenssilaiteohjelmistobinäärin tiedostopolku; sen koko määrittää varmennettavien tavujen määrän.

  • digest on valinnainen tiedoston esilaskettu heksakoodattu MD5-tiiviste. Jos None, käytetään viimeisimmän flash_write_file() -kutsun aikana laskettua tiivistettä.

  • offset on flash-muistin siirtymä tavuina, josta varmennus alkaa.

Nostaa Exception -poikkeuksen, jos tiivistettä ei ole käytettävissä tai jos flash-muistin sisältö ei vastaa referenssitiivistettä.

reboot() None

Lähettää FLASH_END -komennon, joka ohjeistaa ROM-käynnistyslainta käynnistämään ESP32:n uudelleen ja ajamaan juuri flashatun laiteohjelmiston. Vastausta ei lueta.