これは、個々のPythonスクリプトとして記述された、さまざまなマイクロコントローラー用の簡単なインシステムプログラミング(ISP)フラッシュツールの編集です。シングルスクリプト形式により、あらゆるツールチェーンに非常に簡単に統合できます。さらに、これらのツールはPIP経由でインストールし、コマンドラインコマンドとして実行することもできます。
これらのツールが機能するためには、Python3をシステムにインストールする必要があります。これを行うには、これらの指示に従ってください。さらに、pyusb、pyserial、およびpyhidapiを設置する必要があります。 Linux(Debianベース)では、これらすべてを次のコマンドで実行できます。
sudo apt install python3 python3-pip
pip install pyusb pyserial hid
特にWindowsユーザーもLibusbをインストールする必要がある場合があります。
このツールを使用すると、ほぼすべてのWCHマイクロコントローラー(CH5XX、CH6XX、CH32FXXX、CH32VXXX、CH32XXXX、およびCH32LXXX)を使用します。
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ツールを使用してWCHUSBドライバーをWCHインターフェイス1にインストールできます。
ファームウェアをアップロードするには、WCH-Linkへの次の接続を作成する必要があります(SWCLKはCH32V003に存在しないため、接続する必要はありません):
WCH-Link RISC-V MCU
+------+ +--------+
| SWCLK| ---> |SWCLK |
| SWDIO| <--> |SWDIO |
| GND| ---> |GND |
| 3V3| ---> |VDD |
+------+ +--------+
WCHリンクの青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ブートローダーを利用することにより、単純なUSBからシリアルコンバーターを介してフラッシュできます。
必要に応じて、使用されるUSBからシリアルコンバーターのドライバーをインストールする必要があります。
次のように、USBからシリアルコンバーターを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
ここを見てください。
このツールを使用すると、STC8G/8Hマイクロコントローラーは、工場で組み込まれた組み込みUARTブートローダーを使用することにより、シンプルなUSBからシリアルへのコンバーターを介してフラッシュできます。
必要に応じて、使用される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インターフェイスを介して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経由で新しいファームウェアをアップロードすることができます。
ボードにブートボタンがない場合は、接続して同じ効果を達成するために、ピン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
ここを見てください。
このツールを使用すると、いくつかのエントリーレベルのSTM32マイクロコントローラーを、工場の内蔵UARTブートローダーを利用することにより、シンプルなUSBからシリアルへのコンバーターを介してフラッシュできます。現在、次のデバイスをサポートしています。
必要に応じて、使用されるUSBからシリアルコンバーターのドライバーをインストールする必要があります。
次のように、USBからシリアルコンバーターを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 PINが最初に無効になっています。チップが新品またはメインフラッシュメモリが消去された場合、埋め込みブートローダーが自動的にキックインするため、これは問題ではありません。STM32ISPツールを使用すると、Boot0ピンがアクティブになり、その後の使用がアクティブになります。ただし、チップが以前に別のソフトウェアツールを使用してプログラムされていた場合、ブートローダーにはboot0ピンからアクセスできなくなる可能性があります。このような場合、ユーザーオプションバイトのnboot_selビットは、ST-Linkや適切なソフトウェアなどのSWDプログラマーを使用してクリア(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つのマイクロコントローラーを、UPDI PIN(SerialUpdiとも呼ばれる)に特別な方法で接続されたUSBからシリアルコンバーターを使用してプログラムできます。詳細については、こちらをご覧ください。
必要に応じて、使用されるUSBからシリアルコンバーターのドライバーをインストールする必要があります。
USBからシリアルへのコンバーターをUSBから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
ここを見てください。