Esta é uma compilação de ferramentas flash de programação do sistema simples (ISP) para diferentes microcontroladores, todos escritos como scripts individuais de Python. O formato de script único os torna incrivelmente fáceis de integrar em qualquer cadeia de ferramentas. Além disso, essas ferramentas também podem ser instaladas via PIP e executadas como comandos da linha de comando.
Para que essas ferramentas funcionem, o Python3 deve ser instalado no seu sistema. Para fazer isso, siga estas instruções. Além disso, o PYUSB, Pyserial e Pyhidapi devem ser instalados. No Linux (baseado em Debian), tudo isso pode ser feito com os seguintes comandos:
sudo apt install python3 python3-pip
pip install pyusb pyserial hid
Os usuários do Windows, em particular, também podem precisar instalar o libusb.
Com essa ferramenta, quase todos os microcontroladores WCH (CH5XX, CH6XX, CH32FXXX, CH32VXXX, CH32XXXX e CH32LXXX) que possuem um carregador de inicialização de fábrica-builtin (v2.xx) pode ser piscado via USB.
No Linux, você não precisa instalar um driver para o USB Bootloader. No entanto, por padrão, o Linux não exporá permissão suficiente para fazer upload do seu código. Para corrigir isso, abra um terminal e execute os seguintes 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 o Windows, você precisa do driver CH372. Como alternativa, você também pode usar a ferramenta Zadig para instalar o driver correto. Aqui, clique em "Opções" -> "Liste todos os dispositivos" e selecione o módulo USB. Em seguida, instale o driver LibusB-WIN32. Para fazer isso, a placa deve estar conectada e o microcontrolador deve estar no modo de carregador de inicialização.
O carregador de inicialização deve ser iniciado manualmente para novos uploads. Para fazer isso, a placa deve primeiro ser desconectada da porta USB e de todas as fontes de tensão. Agora pressione o botão de inicialização e mantenha -o pressionado enquanto reconecta a placa à porta USB do seu PC. O chip agora é iniciado no modo Bootloader, o botão de inicialização pode ser lançado e o novo firmware pode ser carregado via USB. Como alternativa, você pode deixar a placa conectada à porta USB, pressione e segure o botão de inicialização, pressione e solte o botão Redefinir e, em seguida, solte o botão de inicialização para inserir o modo de bootloader. Se não houver botão de inicialização na placa, consulte a folha de dados para descobrir qual pino precisará ser puxado para qual nível de tensão para o microcontrolador entrar no modo de inicialização.
Agora execute o seguinte comando (exemplo):
python3 chprog.py firmware.bin
Dê uma olhada aqui.
Com esta ferramenta, os microcontroladores WCH RISC-V CH32LXXX, CH32VXXX e CH32XXXX podem ser programados com a WCH-Linke ou WCH-Linkw (preste atenção ao "e" ou "w" no nome) por meio de sua interface de depuração em série.
Para usar o WCH-Link no Linux, você precisa conceder permissões de acesso com antecedência, executando os seguintes 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
No Windows, se você precisar instalar o driver Winusb na interface 1 WCH usando a ferramenta Zadig.
Para fazer upload do firmware, você deve fazer as seguintes conexões com o WCH-Link (o SWCLK não está presente no CH32V003 e, portanto, não precisa ser conectado):
WCH-Link RISC-V MCU
+------+ +--------+
| SWCLK| ---> |SWCLK |
| SWDIO| <--> |SWDIO |
| GND| ---> |GND |
| 3V3| ---> |VDD |
+------+ +--------+
Se o LED azul no link WCH permanecer iluminado quando estiver conectado à porta USB, isso significa que o dispositivo está atualmente no modo ARM e deve ser alterado para o modo RISC-V inicialmente. Existem algumas maneiras de conseguir isso:
Mais informações podem ser encontradas no manual do usuário do 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
Dê uma olhada aqui.
Com esta ferramenta, os microcontroladores PUYA da série PY32F0XX (e talvez outros PY32) podem ser exibidos por meio de um simples conversor USB-serial, utilizando o uploader UART incorporado embutido de fábrica.
Se necessário, um driver para o conversor USB para serial usado deve ser instalado.
Conecte seu conversor USB-Serrial ao seu PY32F0XX MCU da seguinte forma:
USB2SERIAL PY32F0xx
+--------+ +-------------------+
| RXD| <--- |PA2 or PA9 or PA14|
| TXD| ---> |PA3 or PA10 or PA15|
| VDD| ---> |VDD |
| GND| ---> |GND |
+--------+ +-------------------+
Defina seu modo MCU como bootloader usando um dos seguintes 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
Dê uma olhada aqui.
Com esta ferramenta, os microcontroladores STC8G/8H podem ser exibidos por meio de um conversor simples USB-Série, utilizando o uploader UART incorporado embutido de fábrica.
Se necessário, um driver para o conversor USB para serial usado deve ser instalado.
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
Dê uma olhada aqui.
Essa ferramenta permite que você pisque os microcontroladores STC8H8KXXU por meio de sua interface USB, usando o carregador de inicialização USB incorporado pré-instalado.
Como o USB Bootloader funciona como um dispositivo de interface humana (HID), não há necessidade de instalar drivers. No entanto, o Linux não concede permissões suficientes para acessar o carregador de inicialização. Para resolver esse problema, abra um terminal e execute os seguintes 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 novos uploads, o carregador de inicialização precisa ser iniciado manualmente. Comece desconectando a placa da porta USB e desconectando todas as fontes de energia. Em seguida, pressione e segure o botão de inicialização enquanto reconectar a placa na porta USB do seu PC. Esta ação aciona o chip para inserir o modo Bootloader. Uma vez nesse modo, você pode liberar o botão de inicialização e prosseguir para fazer upload de um novo firmware via USB.
Se a sua placa não tiver um botão de inicialização, você precisará curto pino P3.2 para aterrar enquanto se conectar para obter o mesmo efeito.
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
Dê uma olhada aqui.
Com esta ferramenta, alguns microcontroladores STM32 de nível básico podem ser exibidos por meio de um conversor simples USB-serial, utilizando o Utilloader UART embutido de fábrica. Atualmente, ele suporta os seguintes dispositivos:
Se necessário, um driver para o conversor USB para serial usado deve ser instalado.
Conecte seu conversor USB-Série ao seu STM32 MCU da seguinte forma:
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 |
+--------+ +------------+
Defina seu MCU no modo de inicialização usando um dos seguintes métodos:
Nos microcontroladores STM32G03X/04X, o pino de inicialização está inicialmente desativado. Quando o chip é novo ou a memória flash principal é apagada, isso não é um problema, pois o carregador de inicialização incorporado entra automaticamente. Ao usar a ferramenta STM32ISP, o pino de inicialização será ativado para uso subsequente. No entanto, se o chip tiver sido programado anteriormente usando uma ferramenta de software diferente, o carregador de inicialização pode não estar mais acessível através do pino de inicialização. Nesses casos, o bit NBOOT_SEL na opção de usuário bytes deve ser limpo (definido como 0) usando um programador SWD como ST-Link e o software apropriado.
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
Dê uma olhada aqui.
Esta ferramenta permite que os microcontroladores de TinyAVR Series 0, 1 e 2 sejam programados usando um conversor USB-Série conectado de uma maneira especial ao pino Updi (também chamado de SerialUpdi). Mais informações podem ser encontradas aqui.
Se necessário, um driver para o conversor USB para serial usado deve ser instalado.
Conecte o conversor USB para serial via USB ao PC e através do circuito descrito abaixo ao pino Updi do microcontrolador.
USB2SERIAL tinyAVR
+--------+ +-----------+
| RXD| <------------+---> |UPDI (PA0) |
| | | | |
| TXD| ---|1kOhm|---+ | |
| | | |
| VDD| -----------------> |VDD |
| GND| -----------------> |GND |
+--------+ +-----------+
Como alternativa, um programador serialupdi pré-montado pode ser usado.
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
Dê uma olhada aqui.