WCH社のCH32の使い方


半導体不足になって,マイコンの入手が困難な時期があった. その時期にはWCH社などの中国製のマイコンがもてはやされ,普及が進んだ気がする. そのWCH社のマイコンの代表の一つがCH32シリーズです.

ch32には,いくつかの開発環境がある. 公式にCH32向けに開発されたMounRiver Studioに加えて,Arduinoや,個人が開発したch32funwagiminatorさんの開発環境などもある. さらに,Arduinoにも何種類かの環境が発表されている. WCHの公式は,サイズが大きくなるらしく,いくつかの機能も使えないなどの欠点があるようです. これをインストールするには,File-PreferencesのAdditional Boards Manager URLsに

https://github.com/openwch/board_manager_files/raw/main/package_ch32v_index.json

を加えて,Tools-Board-Boards ManagerからCH32 MCU EVT Boardsを選べば良い. AlexanderManderaさんの環境は,ch32funをベースにしたもののようで,同様に

https://alexandermandera.github.io/arduino-wch32v003/package_ch32v003_index.json

を追加してWCH Boardsをインストールすればよい. ちょっと変わったものとしては, ch32を載せたボード用にch32funをカスタマイズした UIAPduino もある.

安価に入手が可能なCH32V003F4P6をArduinoのWCH公式サポートを用いて使ってみたので,そのやり方を書いておく. Arduinoでのインストールの仕方はすでに説明した. プログラムについても,大した注意点は無いので,説明は割愛する. 問題なのが書き込み方法です. 書き込みにはWCH-LinkEを使いますが,Linuxからの使い方の情報が少なかったので,苦労した.

WCH-LinkEを使うためのツールも何種類か存在する. WCH社はWCHISPToolというツールを出しているが,Linuxでは使いにくいようだ. Arduinoの公式サポートにも,openocdという書き込みツールが付属していますが,そのインストールスクリプトを見たら,ライブラリを/usr/libに書き込むようだったので,アンインストールが面倒そうで,インストールを止めました. それ以外には,wlinkやminichlinkなどがある. 以下では,minichlinkをlinuxで使う方法の説明をする.

自分でコンパイルする場合には,以下のようにする.

wget https://github.com/cnlohr/ch32fun/archive/refs/heads/master.zip
unzip master.zip
cd ch32fun-master/minichlink
sudo aptitude install libudev-dev libusb-1.0-0-dev
make
sudo cp 99-minichlink.rules /etc/udev/rules.d/
sudo udevadm control --reload
sudo udevadm trigger

binaryを使う場合には,ここから自分の環境にあったものを取って来る. そして,実行可能権限を与える.

chmod u+x minichlink_linux_amd64

WCH-LinkEには3つのmodeがある. USBに挿した時に青いLEDが光っていたらARM modeで,最初はこの状態です. 青いLEDが点滅していたらIAP modeで,これはfirmwareをupdateするときにしか使いません. 青いLEDが消えていたらRISC-V modeで,minichlinkはこの状態で使うことができる. 古いminichlinkは,使う前にModeSボタンを押してUSBに挿すことによって,RISC-V modeに変更する必要があったが,最新のものでは,自動的にこのmodeに変更してくれるようになっている. 私はそれを知らずに,ModeSボタンを押ために,ケースにドリルで穴をあけてしまった. 20pinのch32v003F4P6とWCH-LinkEのpinは,7をGND,9を3.3V,18をSWDIOに繋いだら,準備完了です. コマンドラインからminichlinkを実行して,うまく接続されているかを確認しましょう.

sudo ./minichlink_linux_amd64

私の場合には,圧着コネクタを使っていたら,一つの端子がうまく接触していなくて,エラーが出ていて,それを発見するのに時間を要した. udevの設定をしていれば,sudoは不要です.

Arduinoでは,save compiled binaryとして,binaryをファイルとして書き出す. そして,それを書き込む.

sudo ./minichlink_linux_amd64 -w test.bin 0x08000000

ここで,最後に指定しているのはアドレスで,このICの場合にはそこに書き込むようです.

CH32V003F4P6は,安価な上にpin数も多き,5Vでも動くので,様々な用途に使うことができるだろう. 開発環境が発展途上のように感じられますが,今後はいろいろなところに使っていこうと思う.