WCH社のCH32の使い方
半導体不足になって,マイコンの入手が困難な時期があった. その時期にはWCH社などの中国製のマイコンがもてはやされ,普及が進んだ気がする. そのWCH社のマイコンの代表の一つがCH32シリーズです.
ch32には,いくつかの開発環境がある. 公式にCH32向けに開発されたMounRiver Studioに加えて,Arduinoや,個人が開発したch32funやwagiminatorさんの開発環境などもある. さらに,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でも動くので,様々な用途に使うことができるだろう. 開発環境が発展途上のように感じられますが,今後はいろいろなところに使っていこうと思う.