这是针对不同微控制器的直接系统内编程(ISP)闪存工具的汇编,所有这些都是作为单个Python脚本编写的。他们的单脚本格式使它们非常容易集成到任何工具链中。此外,这些工具也可以通过PIP安装,然后作为命令行命令执行。
为了使这些工具起作用,必须在系统上安装Python3。为此,请按照以下说明进行操作。此外,必须安装pyusb,正序和pyhidapi。在Linux(基于Debian)上,所有这些都可以使用以下命令来完成:
sudo apt install python3 python3-pip
pip install pyusb pyserial hid
Windows用户特别需要安装Libusb。
使用此工具,几乎所有WCH微控制器(CH5XX,CH6XX,CH32FXXX,CH32VXXX,CH32XXXX和CH32LXXX)都可以通过USB闪烁。
在Linux上,您无需为USB引导加载程序安装驱动程序。但是,默认情况下,Linux不会揭示足够的权限来上传您的代码。为了解决此问题,打开一个终端并运行以下命令:
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
对于Windows,您需要CH372驱动程序。另外,您也可以使用Zadig工具安装正确的驱动程序。在这里,单击“选项” - >“列出所有设备”,然后选择USB模块。然后安装libusb-win32驱动程序。为此,必须连接板,并且微控制器必须处于引导加载模式。
必须手动启动启动加载程序以进行新上传。为此,必须首先将板与USB端口和所有电压来源断开连接。现在按下启动按钮,并在将板重新连接到PC的USB端口时按下按钮。芯片现在以引导程序模式开始,可以释放启动按钮,并且可以通过USB上传新的固件。另外,您可以将板连接到USB端口,按并按住启动按钮,按下并释放重置按钮,然后释放启动按钮以输入引导加载器模式。如果板上没有引导按钮,请查看数据表,以找出需要将哪个引脚拉到MicroController进入启动模式的哪个电压级别。
现在运行以下命令(示例):
python3 chprog.py firmware.bin
在这里看看。
使用此工具,可以使用WCH-LINKE或WCH-LINKW对WCH RISC-V微控制器CH32LXXX,CH32VXXX和CH32XXXX进行编程(通过其串行调试界面,请注意“ E”或“ W”)。
要在Linux上使用WCH-Link,您需要通过执行以下命令事先授予访问权限:
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
在Windows上,如果您需要,则可以使用Zadig工具在WCH接口1上安装Winusb驱动程序。
要上传固件,您应该将以下连接到WCH-Link(CH32V003上不存在SWCLK,因此不需要连接):
WCH-Link RISC-V MCU
+------+ +--------+
| SWCLK| ---> |SWCLK |
| SWDIO| <--> |SWDIO |
| GND| ---> |GND |
| 3V3| ---> |VDD |
+------+ +--------+
如果将蓝色LED连接到USB端口后,WCH-Link上的LED保持照明,则意味着该设备当前处于ARM模式,并且必须最初切换到RISC-V模式。有几种方法可以实现这一目标:
可以在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
在这里看看。
使用此工具,可以通过使用Factory内置嵌入式UART UART BOITLOADER来通过简单的USB到Ser-Ser-Serial转换器来刷新系列PY32F0XX(也许还有其他PY32)的Puya微控制器。
如有必要,必须安装使用USB到串行转换器的驱动程序。
如下:
USB2SERIAL PY32F0xx
+--------+ +-------------------+
| RXD| <--- |PA2 or PA9 or PA14|
| TXD| ---> |PA3 or PA10 or PA15|
| VDD| ---> |VDD |
| GND| ---> |GND |
+--------+ +-------------------+
通过使用以下方法之一将MCU设置为引导加载程序模式:
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
在这里看看。
使用此工具,可以通过使用出厂内置的嵌入式UART UART引导加载程序来通过简单的USB到串行转换器来闪烁STC8G/8H微控制器。
如有必要,必须安装使用USB到串行转换器的驱动程序。
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
在这里看看。
该工具允许您使用预安装的嵌入式USB启动程序通过其USB界面通过其USB界面闪烁STC8H8KXXU微控制器。
由于USB引导程序可作为人类接口设备(HID)功能,因此无需安装驱动程序。但是,Linux最初没有授予访问引导程序的足够权限。要解决此问题,请打开终端并执行以下命令:
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
要启动新上传,需要手动启动引导程序。首先从USB端口拔下电源板并断开所有电源。然后,在将板重新连接到PC的USB端口时,按并按住启动按钮。此操作触发芯片进入引导加载器模式。进入此模式后,您可以释放启动按钮,然后通过USB上传新固件。
如果您的木板没有引导按钮,则需要在连接时将PIN PIN p3.2短在地面上,以达到相同的效果。
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
在这里看看。
使用此工具,可以通过使用工厂内置的UART启动加载程序来通过简单的USB到串行转换器来闪烁一些入门级STM32微控制器。它目前支持以下设备:
如有必要,必须安装使用USB到串行转换器的驱动程序。
如下:
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 |
+--------+ +------------+
通过使用以下方法之一将MCU设置为引导模式:
在STM32G03X/04X微控制器上,启动0引脚最初被禁用。当芯片是全新的或删除了主闪存时,这不是问题,因为嵌入式引导加载程序会自动启动。通过使用STM32ISP工具,将激活Boot0 PIN,以供后续使用。但是,如果以前已经使用其他软件工具对芯片进行了编程,则可能不再可以通过boot0 pin访问引导程序。在这种情况下,必须使用SWD程序员(例如ST-Link和适当的软件)清除用户选项字节中的NBoot_Sel位(设置为0)。
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
在这里看看。
该工具允许使用以特殊方式连接到UPDI PIN(也称为SerialUpdi)的USB到串行转换器对Tinyavr系列0、1和2个微控制器进行编程。更多信息可以在此处找到。
如有必要,必须安装使用USB到串行转换器的驱动程序。
通过USB以及以下所述的电路将USB到Serial转换器连接到微控制器的Updi Pin。
USB2SERIAL tinyAVR
+--------+ +-----------+
| RXD| <------------+---> |UPDI (PA0) |
| | | | |
| TXD| ---|1kOhm|---+ | |
| | | |
| VDD| -----------------> |VDD |
| GND| -----------------> |GND |
+--------+ +-----------+
另外,可以使用预组装的序列化程序员。
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
在这里看看。