espflash — ESP32 ROM rendszerbetöltő firmware-villantó¶
Ez a modul egy minimális ESPFlash implementációt biztosít, amely UART-on keresztül kommunikál az ESP32 ROM rendszerbetöltőjével. Rendszeren belüli (in-system) firmware-frissítésekre szolgál a kísérőmodulok ESP32 firmware-éhez (például az Arduino kártyákon használt U-blox NINA-W10 modulhoz), és nem helyettesíti a teljes esptool segédprogramot. A speciális funkciók (stub loader, más ESP chipek, deflate, secure boot stb.) szándékosan nem támogatottak.
A meghajtó a RESET és a GPIO0 lábak állapotát váltogatva letöltési módba helyezi az ESP32-t, majd SLIP-keretezésű parancsokat ad ki a flash memória méretének beolvasásához, az SPI interfész konfigurálásához, a firmware-kép kiírásához és annak MD5 ellenőrzőösszeggel történő ellenőrzéséhez.
Példa az Arduino Nano RP2040 Connect kártyához (az egyetlen OpenMV által támogatott kártya, ahol az espflash jelenleg be van fagyasztva). A NINA-W102 reset és boot-strap lábai rendre az RP2040 GPIO 3 és GPIO 2 lábai, a NINA UART0-ja pedig az RP2040 UART1-éhez van kötve (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)¶
Létrehoz egy
ESPFlashobjektumot, amely az ESP32 ROM rendszerbetöltőjét vezérli.A reset egy
machine.Pinpéldány, amely az ESP32RESETvonalához csatlakozik, kimenetként konfigurálva.A gpio0 egy
machine.Pinpéldány, amely az ESP32GPIO0vonalához csatlakozik, kimenetként konfigurálva.Az uart egy
machine.UARTpéldány, amely az ESP32UART0lábaihoz csatlakozik. 115200 baud sebességre és nem nulla olvasási időtúllépésre kell inicializálni.A log_enabled engedélyezi a rendszerbetöltővel kicserélt SLIP-keretek részletes naplózását. Csak hibakereséshez hasznos.
A konstruktor megpróbálja importálni a
hashlibmodult. Ha ahashlib.md5elérhető, akkor aESPFlash.flash_verify_file()által használt futó MD5 ellenőrzőösszeg automatikusan kiszámításra kerül az írás közben.- set_baudrate(baudrate: int, timeout: int = 350) None¶
Megváltoztatja a rendszerbetöltő UART átviteli sebességét (baud).
A baudrate az új átviteli sebesség (baud), amelyre váltani kell. Ha eltér a jelenleg aktív sebességtől, a helyi UART újrakonfigurálása előtt egy
CHANGE_BAUDRATEparancs kerül kiadásra a rendszerbetöltőnek.A timeout fenntartott, és jelenleg nincs használatban.
Nincs hatása, ha a mögöttes UART objektum nem implementál
init()metódust.
- bootloader(retry: int = 6) bool¶
Vezérli a
RESETés aGPIO0lábakat az ESP32 ROM letöltési módba lépéséhez, és szinkronizál a rendszerbetöltővel.A retry a reset/szinkronizálási kísérletek száma a feladás előtt.
Sikeresség esetén
Trueértéket ad vissza, egyébkéntExceptionkivételt vált ki.
- flash_read_size() int¶
Beolvassa az SPI flash JEDEC azonosítóját, és bájtban adja vissza a flash memória méretét.
Exceptionkivételt vált ki, ha a jelentett méretbitek a várt0x12-0x19tartományon kívül esnek.
- flash_attach() None¶
Csatlakozik az SPI flash memóriához. Egyszer kell meghívni a
bootloader()után és bármilyen flash olvasási/írási művelet előtt.
- flash_config(flash_size: int = 2 * 1024 * 1024) None¶
Konfigurálja az SPI flash paramétereit.
A flash_size a flash memória teljes mérete bájtban, jellemzően a
flash_read_size()által visszaadott érték.
A blokk-, szektor- és lapméretek rögzítettek, rendre 64 KiB, 4 KiB és 256 bájt.
- flash_write_file(path: str, blksize: int = 0x1000) None¶
Kiír egy firmware-képet a flash memóriába a 0 eltolástól kezdődően.
A path a flash memóriába írandó firmware bináris fájlrendszerbeli elérési útja.
A blksize a rendszerbetöltőnek küldött egyes adatblokkok mérete bájtban. A szektorméret többszörösének kell lennie.
Az utolsó blokk
0xFFértékkel van kitöltve a teljes blksize eléréséig. Ha az MD5 támogatás elérhető, a futó MD5 ellenőrzőösszeg az írás közben frissül, így aflash_verify_file()argumentumok nélkül meghívható.
- flash_verify_file(path: str, digest: bytes | None = None, offset: int = 0) None¶
Ellenőrzi a flash memória tartalmát egy firmware-fájllal összevetve.
A path a referencia firmware bináris fájlrendszerbeli elérési útja; mérete határozza meg az ellenőrizendő bájtok számát.
A digest a fájl opcionális, előre kiszámított, hexadecimálisan kódolt MD5 ellenőrzőösszege. Ha
None, akkor a legutóbbiflash_write_file()hívás során kiszámított ellenőrzőösszeg kerül felhasználásra.Az offset a flash memória eltolása bájtban, ahol az ellenőrzés kezdődik.
Exceptionkivételt vált ki, ha nincs elérhető ellenőrzőösszeg, vagy ha a flash memória tartalma nem egyezik a referencia ellenőrzőösszeggel.