$ ./run.sh chip ESP32, firmware en 0x1000 $ ./run.sh micropython verificado: md5 9e1d0c… $ ./run.sh subir micropython/main.py → /main.py
brasa
Un cargador de ESP32 por línea de comandos. Le graba el firmware al chip, y cuando ya corre MicroPython le lleva y le trae archivos.
- Estado
- Probada con un ESP32 clásico
- Desarrollo
- 4.6 h
Un cargador de ESP32 que se maneja desde la terminal del Mac. Cada orden hace una cosa sobre el chip enchufado al USB. En español al firmware se lo quema. De ahí el nombre.
Con el chip en blanco, brasa lo manda al cargador de fábrica que trae en la ROM y le graba lo que haga falta. Cuando ya corre MicroPython, entra por su REPL. Le sube archivos y le corre programas sin grabarlos.
Lo que se escribe en la flash se compara contra el MD5 que calcula el chip. Si no coincide, lo dice.
Está escrita en Punk. Al lado del código van las carpetas con lo que brasa le manda al chip.
firmware/guarda el binario de MicroPython que graba la ordenmicropython. Un script lo baja de micropython.org.micropython/es lo quesubirpone en la raíz del chip. Trae unmain.pyque hace parpadear el LED de la placa y saluda por el puerto.cpp/es un sketch de Arduino que la ordencppcompila con arduino-cli y graba. Hace lo mismo que elmain.py, en C++.
Funcionalidades
El chip
puertoslista los puertos USB serie. Sin placa, o con un cable que sólo carga, no sale ninguno.chipdice qué chip hay del otro lado y en qué dirección va su firmware. Reconoce el ESP32 y los S2, S3, C3, C6 y H2.- El tamaño de la flash se le pregunta a la propia flash.
seguridadlee los eFuses. La MAC, la revisión y el encapsulado, si hay cifrado de flash o secure boot, el JTAG, y el registro de estado de la flash.- Con el chip cerrado, las órdenes que graban se niegan.
--forzargraba igual. pinsmuestra cada GPIO con su dirección, su nivel, su pull y su función, y para qué sirve ese pin en la DevKit. Por MicroPython se ve lo que el programa configuró. Con--romse ve el estado de arranque.reglee o escribe una palabra de 32 bits en cualquier dirección del chip.resetlo reinicia.bootloaderlo deja esperando en el cargador, con el puerto libre para otra herramienta.
Grabar
borrarpone la flash entera en 0xFF y lo verifica.grabarescribe un binario en una dirección.micropythongraba MicroPython en la dirección de arranque que le toca al chip.cppcompila el sketch y graba lo que sale, recortado hasta el último sector con datos. Con--compilarsólo compila, y no hace falta placa.verificarcompara un archivo con la flash sin escribir nada. Si difieren, dice cuáles sectores de 4 KB.md5da el que la ROM calcula de una región.- Después del enganche la velocidad sube a 921.600 baudios. Con
--lentose queda en 115.200.
Leer la flash
leersaca una región por la ROM, sin MicroPython. Sirve con un firmware de C++ o con un chip que no arranca.dumphace el volcado hexadecimal de una partición, por MicroPython. Bootloader, tabla, nvs, phy_init, factory o vfs. Con--decode, la nvs sale clave por clave.respaldarbaja la flash entera a un archivo. Lo borrado no viaja.restaurargraba esa imagen en 0x0 y la verifica.
MicroPython
subirmanda un archivo, o la carpeta con sus subcarpetas, a la raíz del chip.bajartrae un archivo al Mac. Uno que ya exista se pisa sólo con--pisar.correrejecuta en el chip un archivo del Mac, sin grabarlo, y muestra lo que imprime hasta que termina.replcorre una línea de Python y muestra la salida.estadoda la versión de MicroPython, la frecuencia de la CPU, la flash y la RAM libre, el sistema de archivos, el id del chip y la causa del último reinicio.listarda el árbol de archivos con sus tamaños, yvermuestra uno.quitarborra un archivo o una carpeta.limpiarvacía la raíz y MicroPython queda.- Al terminar, el chip se reinicia en blando y el
main.pyarranca de nuevo. monitormuestra lo que el chip escribe por el puerto.rmonitorlo reinicia primero, y se ven los mensajes de arranque.
Cómo se usa
Una placa nueva, de punta a punta:
./build.sh # brasa, en bin/
./firmware/bajar.sh # el binario de MicroPython
./run.sh chip # qué hay del otro lado
./run.sh borrar # la flash entera, verificada
./run.sh micropython # graba MicroPython
./run.sh subir # micropython/ a la raíz del chip
./run.sh monitor # lo que imprime el main.py
Con --puerto=/dev/cu.xxx se elige el puerto. Sin él, brasa toma el primer cu.usb*.