espflash — прошивальник мікропрограми ESP32 ROM завантажувача¶
Цей модуль надає мінімальну реалізацію ESPFlash, яка спілкується з ROM завантажувачем ESP32 через UART. Призначений для оновлення мікропрограми ESP32 у супутніх модулях прямо в системі (наприклад, модуль U-blox NINA-W10, що використовується на платах Arduino), і не є заміною повноцінної утиліти esptool. Розширені функції (stub loader, інші чіпи ESP, стиснення, безпечне завантаження тощо) навмисно не підтримуються.
Драйвер перемикає RESET та GPIO0, щоб перевести ESP32 у режим завантаження, після чого надсилає SLIP-фреймовані команди для читання розміру флеш-пам’яті, налаштування інтерфейсу SPI, запису образу мікропрограми та його верифікації через MD5-дайджест.
Приклад для Arduino Nano RP2040 Connect (єдина плата з підтримкою OpenMV, де espflash наразі заморожений). Піни скидання та завантаження NINA-W102 відповідають RP2040 GPIO 3 та GPIO 2, а UART0 NINA підключений до 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)¶
Створює об’єкт
ESPFlash, який керує ROM завантажувачем ESP32.reset — екземпляр
machine.Pin, підключений до лініїRESETESP32, налаштований як вихід.gpio0 — екземпляр
machine.Pin, підключений до лініїGPIO0ESP32, налаштований як вихід.uart — екземпляр
machine.UART, підключений до виводівUART0ESP32. Має бути ініціалізований зі швидкістю 115200 бод та ненульовим таймаутом читання.log_enabled вмикає докладне журналювання SLIP-фреймів, що обмінюються з завантажувачем. Корисно лише для налагодження.
Конструктор намагатиметься імпортувати
hashlib. Якщоhashlib.md5доступний, поточний MD5-дайджест, що використовуєтьсяESPFlash.flash_verify_file(), обчислюватиметься автоматично під час запису.- set_baudrate(baudrate: int, timeout: int = 350) None¶
Змінює швидкість передачі UART завантажувача.
baudrate — нова швидкість передачі. Якщо відрізняється від поточної активної, команда
CHANGE_BAUDRATEнадсилається до завантажувача перед перенастройкою локального UART.timeout зарезервований і наразі не використовується.
Не має ефекту, якщо об’єкт базового UART не реалізує метод
init().
- bootloader(retry: int = 6) bool¶
Керує
RESETтаGPIO0для входу в режим завантаження ROM ESP32 та синхронізації з завантажувачем.retry — кількість спроб скидання/синхронізації перед відмовою.
Повертає
Trueу разі успіху, інакше генерує виключенняException.
- flash_read_size() int¶
Зчитує JEDEC ID SPI флеш-пам’яті та повертає її розмір у байтах.
Генерує
Exception, якщо повідомлені біти розміру виходять за межі очікуваного діапазону0x12-0x19.
- flash_attach() None¶
Підключається до SPI флеш-пам’яті. Має бути викликано один раз після
bootloader()і перед будь-якою операцією читання/запису флеш-пам’яті.
- flash_config(flash_size: int = 2 * 1024 * 1024) None¶
Налаштовує параметри SPI флеш-пам’яті.
flash_size — загальний розмір флеш-пам’яті в байтах, зазвичай значення, повернуте
flash_read_size().
Розміри блоку, сектора та сторінки фіксовані: 64 КіБ, 4 КіБ і 256 байт відповідно.
- flash_write_file(path: str, blksize: int = 0x1000) None¶
Записує образ мікропрограми у флеш-пам’ять починаючи зі зміщення 0.
path — шлях у файловій системі до бінарного файлу мікропрограми для прошивки.
blksize — розмір у байтах кожного блоку даних, що надсилається до завантажувача. Має бути кратним розміру сектора.
Останній блок доповнюється значеннями
0xFFдо повного blksize. Якщо підтримка MD5 доступна, поточний MD5-дайджест оновлюється під час запису, щобflash_verify_file()можна було викликати без аргументів.
- flash_verify_file(path: str, digest: bytes | None = None, offset: int = 0) None¶
Перевіряє вміст флеш-пам’яті відносно файлу мікропрограми.
path — шлях у файловій системі до еталонного бінарного файлу мікропрограми; його розмір визначає кількість байтів для верифікації.
digest — необов’язковий попередньо обчислений MD5-дайджест файлу в шістнадцятковому кодуванні. Якщо
None, використовується дайджест, обчислений під час останнього викликуflash_write_file().offset — зміщення у флеш-пам’яті в байтах, з якого починається верифікація.
Генерує
Exception, якщо дайджест недоступний або вміст флеш-пам’яті не відповідає еталонному дайджесту.