Esta es una compilación de herramientas de flash de programación en el sistema (ISP) directas para diferentes microcontroladores, todos escritos como scripts de Python individuales. Su formato de un solo script los hace increíblemente fáciles de integrar en cualquier cadena de herramientas. Además, estas herramientas también se pueden instalar a través de PIP y luego ejecutarse como comandos de línea de comandos.
Para que estas herramientas funcionen, Python3 debe instalarse en su sistema. Para hacer esto, siga estas instrucciones. Además PyusB, se deben instalar Pyserial y Pyhidapi. En Linux (basado en Debian), todo esto se puede hacer con los siguientes comandos:
sudo apt install python3 python3-pip
pip install pyusb pyserial hid
Los usuarios de Windows en particular también pueden necesitar instalar libusb.
Con esta herramienta, casi todos los microcontroladores WCH (CH5XX, CH6XX, CH32FXXX, CH32VXXX, CH32XXXX y CH32LXXX) que tienen un cargador de arranque de fábrica (V2.XX) se pueden flashear a través de USB.
En Linux no necesita instalar un controlador para el gestor de arranque USB. Sin embargo, por defecto, Linux no expondrá suficiente permiso para cargar su código. Para solucionar esto, abra un terminal y ejecute los siguientes comandos:
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="4348", ATTR{idProduct}=="55e0", MODE="666"' | sudo tee /etc/udev/rules.d/99-ch55x.rules
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="1a86", ATTR{idProduct}=="55e0", MODE="666"' | sudo tee -a /etc/udev/rules.d/99-ch55x.rules
sudo udevadm control --reload-rules
Para Windows, necesita el controlador CH372. Alternativamente, también puede usar la herramienta Zadig para instalar el controlador correcto. Aquí, haga clic en "Opciones" -> "Lista de todos los dispositivos" y seleccione el módulo USB. Luego instale el controlador libusb-win32. Para hacer esto, la placa debe estar conectada y el microcontrolador debe estar en modo de cargador de arranque.
El gestor de arranque debe iniciarse manualmente para nuevas cargas. Para hacer esto, el tablero primero debe desconectarse del puerto USB y todas las fuentes de voltaje. Ahora presione el botón de arranque y manténgalo presionado mientras vuelve a conectar el tablero al puerto USB de su PC. El chip ahora se inicia en modo Bootloader, el botón de arranque se puede lanzar y el nuevo firmware se puede cargar a través de USB. Alternativamente, puede dejar la placa conectada al puerto USB, presionar y presionar el botón BOTAR, y suelta el botón RESET y luego suelte el botón BOTAR para ingresar al modo de Boot Loader. Si no hay un botón de arranque en la placa, mire la hoja de datos para averiguar qué PIN debe extraerse al nivel de voltaje para que el microcontrolador vaya al modo de arranque.
Ahora ejecute el siguiente comando (ejemplo):
python3 chprog.py firmware.bin
Echa un vistazo aquí.
Con esta herramienta, los microcontroladores WCH RISC-V CH32LXXX, CH32VXXX y CH32XXXX se pueden programar con WCH-Linke o WCH-Linkw (preste atención a la "E" o "W" en el nombre) a través de su interfaz debug serie.
Para usar el WCH-Link en Linux, debe otorgar permisos de acceso de antemano ejecutando los siguientes comandos:
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="1a86", ATTR{idProduct}=="8010", MODE="666"' | sudo tee /etc/udev/rules.d/99-WCH-LinkE.rules
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="1a86", ATTR{idProduct}=="8012", MODE="666"' | sudo tee -a /etc/udev/rules.d/99-WCH-LinkE.rules
sudo udevadm control --reload-rules
En Windows, si lo necesita, puede instalar el controlador WinUSB sobre la interfaz WCH 1 usando la herramienta Zadig.
Para cargar firmware, debe hacer las siguientes conexiones con WCH-Link (SWCLK no está presente en el CH32V003 y, por lo tanto, no es necesario conectar)::
WCH-Link RISC-V MCU
+------+ +--------+
| SWCLK| ---> |SWCLK |
| SWDIO| <--> |SWDIO |
| GND| ---> |GND |
| 3V3| ---> |VDD |
+------+ +--------+
Si el LED azul en el enlace WCH permanece iluminado una vez que está conectado al puerto USB, significa que el dispositivo está actualmente en modo ARM y debe cambiarse al modo RISC-V inicialmente. Hay algunas formas de lograr esto:
Se puede encontrar más información en el Manual de usuario de WCH-Link.
Usage: rvprog.py [-h] [-a] [-v] [-b] [-u] [-l] [-e] [-G] [-R] [-f FLASH]
Optional arguments:
-h, --help show help message and exit
-a, --armmode switch WCH-Link to ARM mode
-v, --rvmode switch WCH-Link to RISC-V mode
-b, --unbrick unbrick chip (power cycle erase)
-u, --unlock unlock chip (remove read protection)
-l, --lock lock chip (set read protection)
-e, --erase perform a whole chip erase
-G, --pingpio make nRST pin a GPIO pin (CH32V003 only)
-R, --pinreset make nRST pin a reset pin (CH32V003 only)
-f FLASH, --flash FLASH write BIN file to flash
Example:
python3 rvprog.py -f firmware.bin
Echa un vistazo aquí.
Con esta herramienta, los microcontroladores de Puya de la serie PY32F0XX (y tal vez otro PY32) se pueden flashear a través de un convertidor USB a serial simple utilizando el cargador de arranque UART integrado de fábrica incorporado.
Si es necesario, se debe instalar un controlador para el convertidor USB a serial utilizado.
Conecte su convertidor USB a serial a su PY32F0XX MCU de la siguiente manera:
USB2SERIAL PY32F0xx
+--------+ +-------------------+
| RXD| <--- |PA2 or PA9 or PA14|
| TXD| ---> |PA3 or PA10 or PA15|
| VDD| ---> |VDD |
| GND| ---> |GND |
+--------+ +-------------------+
Configure su MCU en modo de cargador de arranque utilizando uno de los siguientes métodos:
Usage: puyaisp.py [-h] [-u] [-l] [-e] [-o] [-G] [-R] [-f FLASH]
Optional arguments:
-h, --help show this help message and exit
-u, --unlock unlock chip (remove read protection)
-l, --lock lock chip (set read protection)
-e, --erase perform chip erase (implied with -f)
-o, --rstoption reset option bytes
-G, --nrstgpio make nRST pin a GPIO pin
-R, --nrstreset make nRST pin a RESET pin
-f FLASH, --flash FLASH write BIN file to flash and verify
Example:
python3 puyaisp.py -f firmware.bin
Echa un vistazo aquí.
Con esta herramienta, los microcontroladores STC8G/8H se pueden flashear a través de un convertidor USB a serie simple utilizando el cargador de arranque UART integrado de fábrica incorporado.
Si es necesario, se debe instalar un controlador para el convertidor USB a serial utilizado.
USB2SERIAL STC8G/8H
+--------+ +------+
| VCC| --/ --> |VCC | interruptible (for power cycle)
| RXD| --|R|-- |P3.1 | resistor (100R - 1000R)
| TXD| --|<|-- |P3.0 | diode (e.g. 1N5819)
| GND| ------- |GND | common ground
+--------+ +------+
Usage: stc8isp.py [-h] [-p PORT] [-t TRIM] [-e] [-f FLASH]
Optional arguments:
-h, --help show this help message and exit
-p PORT, --port PORT set COM port (default: /dev/ttyUSB0)
-t TRIM, --trim TRIM trim IRC to frequency in Hz (128000 - 36000000)
-e, --erase perform chip erase (implied with -f)
-f FLASH, --flash FLASH write BIN file to flash
Example:
python3 stc8isp.py -p /dev/ttyUSB0 -t 24000000 -f firmware.bin
Echa un vistazo aquí.
Esta herramienta le permite flashear los microcontroladores STC8H8KXXU a través de su interfaz USB, utilizando el cargador de arranque USB integrado preinstalado.
Debido a que el gestor de arranque USB funciona como un dispositivo de interfaz humano (HID), no hay necesidad de instalar controladores. Sin embargo, Linux inicialmente no otorga permisos suficientes para acceder al cargador de arranque. Para resolver este problema, abra un terminal y ejecute los siguientes comandos:
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="34bf", ATTR{idProduct}=="1001", MODE="666"' | sudo tee /etc/udev/rules.d/99-STC-ISP.rules
sudo udevadm control --reload-rules
Para iniciar nuevas cargas, el gestor de arranque debe iniciarse manualmente. Comience desenchufando el tablero desde el puerto USB y desconectando todas las fuentes de energía. Luego, presione y mantenga presionado el botón de arranque mientras vuelve a conectar la placa al puerto USB de su PC. Esta acción desencadena el chip para ingresar al modo de gotador de arranque. Una vez en este modo, puede liberar el botón de arranque y proceder a cargar un nuevo firmware a través de USB.
Si su placa no tiene un botón de arranque, deberá estar corto P3.2 para conectarse mientras se conecta para lograr el mismo efecto.
Usage: stc8usb.py [-h] [-t TRIM] [-e] [-f FLASH]
Optional arguments:
-h, --help show this help message and exit
-t TRIM, --trim TRIM set MCU system frequency
-e, --erase perform chip erase (implied with -f)
-f FLASH, --flash FLASH write BIN file to flash
Example:
python3 stc8usb.py -t 24000000 -f firmware.bin
Echa un vistazo aquí.
Con esta herramienta, algunos microcontroladores STM32 de nivel de entrada se pueden flashear a través de un convertidor USB a serie simple utilizando el cargador de arranque UART incorporado de fábrica. Actualmente admite los siguientes dispositivos:
Si es necesario, se debe instalar un controlador para el convertidor USB a serial utilizado.
Conecte su convertidor USB a serial a su MCU STM32 de la siguiente manera:
USB2SERIAL STM32C011/031
+--------+ +------------+
| RXD| <--- |PA9 (PA11) |
| TXD| ---> |PA10 (PA12) |
| 3V3| ---> |VDD (3V3) |
| GND| ---> |GND |
+--------+ +------------+
USB2SERIAL STM32F03xx4/6
+--------+ +------------+
| RXD| <--- |PA9 or PA14|
| TXD| ---> |PA10 or PA15|
| 3V3| ---> |VDD (3V3) |
| GND| ---> |GND |
+--------+ +------------+
USB2SERIAL STM32G03x/04x
+--------+ +------------+
| RXD| <--- |PA2 or PA9 |
| TXD| ---> |PA3 or PA10 |
| 3V3| ---> |VDD (3V3) |
| GND| ---> |GND |
+--------+ +------------+
USB2SERIAL STM32L01x/02x
+--------+ +------------+
| RXD| <--- |PA2 or PA9 |
| TXD| ---> |PA3 or PA10 |
| 3V3| ---> |VDD (3V3) |
| GND| ---> |GND |
+--------+ +------------+
Configure su MCU en el modo de arranque utilizando uno de los siguientes métodos:
En los microcontroladores STM32G03X/04X, el PIN Boot0 está inicialmente deshabilitado. Cuando el chip es nuevo o se borra la memoria flash principal, este no es un problema, ya que el gestor de arranque integrado se activa automáticamente. Al usar la herramienta STM32ISP, el pin de Boot0 se activará para el uso posterior. Sin embargo, si el chip se ha programado previamente utilizando una herramienta de software diferente, el cargador de arranque podría no estar accesible a través del pin 0. En tales casos, el bit NBOOT_SEL en los bytes de la opción de usuario se debe borrar (configurado en 0) usando un programador SWD como ST-Link y el software apropiado.
Usage: stm32isp.py [-h] [-u] [-l] [-e] [-f FLASH]
Optional arguments:
-h, --help show this help message and exit
-u, --unlock unlock chip (remove read protection)
-l, --lock lock chip (set read protection)
-e, --erase perform chip erase (implied with -f)
-f FLASH, --flash FLASH write BIN file to flash and verify
Example:
python3 stm32isp.py -f firmware.bin
Echa un vistazo aquí.
Esta herramienta permite que se programen los microcontroladores de la serie TinyAVR 0, 1 y 2 utilizando un convertidor USB a serial conectado de manera especial al pin Updi (también llamado SerialUpdi). Se puede encontrar más información aquí.
Si es necesario, se debe instalar un controlador para el convertidor USB a serial utilizado.
Conecte el convertidor USB a serial a través de USB a la PC y a través del circuito descrito a continuación al pin Updi del microcontrolador.
USB2SERIAL tinyAVR
+--------+ +-----------+
| RXD| <------------+---> |UPDI (PA0) |
| | | | |
| TXD| ---|1kOhm|---+ | |
| | | |
| VDD| -----------------> |VDD |
| GND| -----------------> |GND |
+--------+ +-----------+
Alternativamente, se puede utilizar un programador SerialUpdi previamente ensamblado.
Usage: tinyupdi.py [-h] [-d DEVICE] [-e] [-f FLASH] [-fs [FUSES [FUSES ...]]]
Optional arguments:
-h, --help show help message and exit
-d, --device set target device (if not set, it will be auto-detected)
-e, --erase perform a chip erase (implied with --flash)
-f FLASH, --flash FLASH BIN file to flash
-fs [FUSES [FUSES ...]], --fuses [FUSES [FUSES ...]]
fuses to set (syntax: fuse_nr:0xvalue)
-t TRIM, --trim TRIM configure oscillator for given frequency (set fuse 2)
Example:
python3 tinyupdi.py -f firmware.bin -fs 6:0x04 7:0x00 8:0x00 -t 8000000
Echa un vistazo aquí.