이것은 개별 Python 스크립트로 작성된 다양한 마이크로 컨트롤러를위한 간단한 내장 프로그래밍 (ISP) 플래시 도구를 편집 한 것입니다. 단일 스크립트 형식을 사용하면 툴체인에 통합하기가 매우 쉽습니다. 또한 이러한 도구는 PIP를 통해 설치 한 다음 명령 줄 명령으로 실행할 수도 있습니다.
이러한 도구가 작동하려면 Python3을 시스템에 설치해야합니다. 이렇게하려면 다음 지침을 따르십시오. 또한 pyusb, pyserial 및 pyhidapi를 설치해야합니다. Linux (데비안 기반) 에서이 모든 것은 다음 명령으로 수행 할 수 있습니다.
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 포트에 연결하고 부팅 버튼을 누르고 누르고 누르고 재설정 버튼을 눌러 부팅 버튼을 놓아서 부트 로더 모드를 입력 할 수 있습니다. 보드에 부팅 버튼이없는 경우 데이터 시트를보고 마이크로 컨트롤러가 부팅 모드로 들어갈 수있는 전압 레벨을 당기는 핀을 찾으십시오.
이제 다음 명령 (예)를 실행합니다.
python3 chprog.py firmware.bin
여기서 살펴보세요.
이 도구를 사용하면 WCH RISC-V 마이크로 컨트롤러 CH32LXXX, CH32VXXX 및 CH32XXXX는 직렬 디버그 인터페이스를 통해 WCH-LINKE 또는 WCH-LINKW (이름의 "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에 다음을 연결해야합니다 (SWCLK는 CH32V003에 없으므로 연결할 필요가 없습니다).
WCH-Link RISC-V MCU
+------+ +--------+
| SWCLK| ---> |SWCLK |
| SWDIO| <--> |SWDIO |
| GND| ---> |GND |
| 3V3| ---> |VDD |
+------+ +--------+
WCH-Link의 파란색 LED가 USB 포트에 연결되면 조명 상태로 유지되면 장치가 현재 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
여기서 살펴보세요.
이 도구를 사용하면 시리즈 PY32F0XX (및 기타 PY32)의 PUYA 마이크로 컨트롤러는 공장 내장 내장 UART Bootloader를 사용하여 간단한 USB- 시리얼 컨버터를 통해 플래시 할 수 있습니다.
필요한 경우 사용 된 USB-to-Serial 변환기의 드라이버를 설치해야합니다.
USB-Serial Converter를 다음과 같이 PY32F0XX MCU에 연결하십시오.
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 Bootloader를 사용하여 간단한 USB-to-Serial Converter를 통해 STC8G/8H 마이크로 컨트롤러를 플래시 할 수 있습니다.
필요한 경우 사용 된 USB-to-Serial 변환기의 드라이버를 설치해야합니다.
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 인터페이스를 통해 STC8H8KXXU 마이크로 컨트롤러를 플래시 할 수 있습니다.
USB Bootloader는 HID (Human Interface Device)로 기능하기 때문에 드라이버를 설치할 필요가 없습니다. 그러나 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를 통해 새 펌웨어를 업로드 할 수 있습니다.
보드에 부팅 버튼이없는 경우 동일한 효과를 달성하기 위해 연결하는 동안 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 Bootloader를 사용하여 간단한 USB-To-Serial Converter를 통해 일부 엔트리 레벨 STM32 마이크로 컨트롤러를 플래시 할 수 있습니다. 현재 다음 장치를 지원합니다.
필요한 경우 사용 된 USB-to-Serial 변환기의 드라이버를 설치해야합니다.
USB-Serial Converter를 다음과 같이 STM32 MCU에 연결하십시오.
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 마이크로 컨트롤러에서 Boot0 핀이 처음에는 비활성화되었습니다. 칩이 새롭거나 메인 플래시 메모리가 지워지면 내장 된 부트 로더가 자동으로 시작되므로 문제가되지 않습니다. STM32ISP 도구를 사용하면 후속 사용을 위해 Boot0 핀이 활성화됩니다. 그러나 칩이 다른 소프트웨어 도구를 사용하여 이전에 프로그래밍 된 경우 더 이상 Boot0 핀을 통해 부트 로더에 액세스 할 수 없습니다. 이러한 경우, 사용자 옵션 바이트의 nboot_sel 비트는 ST-Link와 같은 SWD 프로그래머 및 적절한 소프트웨어를 사용하여 (0으로 설정) 지우야합니다 (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
여기서 살펴보세요.
이 도구를 사용하면 TinyAVR 시리즈 0, 1 및 2 마이크로 컨트롤러가 업데이트 핀 (SerialUpdi라고도 함)에 특별한 방식으로 연결된 USB-to-Serial 변환기를 사용하여 프로그래밍 할 수 있습니다. 자세한 내용은 여기를 참조하십시오.
필요한 경우 사용 된 USB-to-Serial 변환기의 드라이버를 설치해야합니다.
USB를 통해 USB-Serial Converter를 PC에 그리고 아래에 설명 된 회로를 통해 마이크로 컨트롤러의 Updi 핀에 연결하십시오.
USB2SERIAL tinyAVR
+--------+ +-----------+
| RXD| <------------+---> |UPDI (PA0) |
| | | | |
| TXD| ---|1kOhm|---+ | |
| | | |
| VDD| -----------------> |VDD |
| GND| -----------------> |GND |
+--------+ +-----------+
또는 사전 조립 된 SerialUpdi 프로그래머를 사용할 수 있습니다.
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
여기서 살펴보세요.