CH32V203K8T6をbootloaderでarduinoから使う方法
安価なマイコンとしてCHシリーズのいくつかを使ってきたが,新たにCH32V203を使ってみることにした. このマイコンは,USBを正式に使える32ビットマイコンの中で,最も安いものの一つであろう. 入手しやすくて,ピンの数がそれなりに多いものとして,32ピンのCH32V203K8T6について,USBからプログラムを書き込んで,使ってみることにした. しかし,予想よりもかなり苦労したので,その使い方を書いておこうと思う.
USBを使うためには,三端子レギュレータとコンデンサーで,5Vから3.3Vを作って電源に供給する. 電源が3ピン,グランドが2ピンあるので,そのすべてを接続する. そして,USBのDPとDMを繋ぐ. すると,BOOT0を3.3Vにしながら,USBを繋ぐと,bootloaderが起動する. 通常はBOOT0は0Vにしておくために,適当な抵抗を介して,pull downしておくと良い.
bootloaderが起動した状態で,dmesgを確認すると,以下のように表示される.
usb 3-4: new full-speed USB device number 79 using xhci_hcd usb 3-4: New USB device found, idVendor=4348, idProduct=55e0, bcdDevice=27.00 usb 3-4: New USB device strings: Mfr=0, Product=0, SerialNumber=0
USBが認識したので,あとは簡単だろうと思ったら,大間違いだった. 書き込むソフトとして,minichlinkやopenocdを試したが,ダメだった. いろいろと探したり試したりして,wchispを使うと書き込めることが分かった. Arduinoからこのマイコンを使うには,主に以下の二つの方法がある.
一つは,arduinoのwch公式サポートを使う方法である. インストールの仕方は省略する. しかし,そのままではwchispは使えないので,一旦,コンパイルしたバイナリを出力する. wchispのバイナリをここから取ってきて,展開してchmod u+x wchispで実行可能とする. bootloaderが立上がった状態で,情報を表示するコマンドと,バイナリファイルtest.binを書き込むコマンドは以下の通りである.
./wchisp info ./wchisp flash test.bin
もう一つは,arduinoのWCHサポートのフォークを使う方法である. そのために,環境設定のところに以下のURLを追加する.
https://raw.githubusercontent.com/verylowfreq/board_manager_ch32/main/package_ch32v_index_sz.json
board managerからCH32V Boards by M.S.を見つけたら,インストールできる. WCHの公式を入れているときには必要無いが,ユーザー権限で書き込みができるようにするためには, ~/.arduino15/packages/WCH_sz/tools/beforeinstall/1.0.0/50-wch.rules を/etc/udev/rules.d/にコピーして,sudo udevadm control –reload-rulesを実行する. ボードの設定は,Board - CH32V EVT Boards Support - CH32V20xとするが,WCH公式と共存している場合には,CH32V EVT Boards Supportが二つ出てくるので,CH32V20xだけがある方を選ぶ. USBから直接書き込む場合には,upload methodとしてWCH-ISPを選択する. これで,プログラムを書いたら,書き込むことができる.
しかし,後者の方法ではPB6やPB7などの一部のGPIOがうまく動かないことが分かった. 調べてみると,サポートしているボードでは,これらのピンはGPIOとしては使われていないからか,その設定ファイル中にはGPIOとして使えないようにしてあった. いろいろと試した結果,その部分についてはWCH公式のファイルに置き換えることによって,これらのピンが使えるようになることを発見した. 具体的な作業は以下のコマンドで実行できる.
cd ~/.arduino15/packages/WCH_sz/hardware/ch32v/1.0.4+sz8/variants/CH32V20x mv CH32V203C8_Suzuno32RV CH32V203C8_Suzuno32RV0 cp -r CH32V203C8 CH32V203C8_Suzuno32RV cd CH32V203C8_Suzuno32RV mv variant_CH32V203C8.h variant_CH32V203C8_Suzuno32RV.h mv variant_CH32V203C8.cpp variant_CH32V203C8_Suzuno32RV.cpp
まだ,GPIOがそれなりにうまく動くことを確認しただけだが,これで開発の環境が一応できたと言えるだろう. C8はK8よりもピンの数が多いので,C8の設定ファイルでK8を動かしても,それほど問題にならないのかな.
CH32V20xなどについては,arduinoでの開発環境は,まだ完成には程遠いように感じる. 別の開発環境を使うべきかもしれないが,それに慣れるのも大変なので,しばらくはマイコンのプログラムはarduinoを中心に使うことになるのかな.