超安価でRISC-VなマイコンCH32V003シリーズをArduino IDEとmacOS(Apple Silicon)環境で使おうとしたところ、情報が少なく苦労したので手順をまとめておきます。
環境
- macOS Tahoe
- CH32V003
- WCH-LinkE
- Arduino IDE 2.3.10
要点
- Arduino IDEでCH32をボードマネージャから追加する
- そのままだとx86_64向けのopenocdが入るため、Apple Silicon(arm64)向けのopenocdをビルドして差し替える必要がある
手順
筆者はMacPortsを利用しているので、それを前提として記載しています。
Arduino IDEにCH32Vのボードマネージャーを導入する
- メニュー Arduino IDE -> Preferences を開き Additional boards manager URLs に以下のURLを入力
https://github.com/openwch/board_manager_files/raw/main/package_ch32v_index.json
![]()
- メニュー Tool -> Board -> Boards Managerを開き、検索に ch32 と入力し CH32 MCU EVT Boards をインストール
riscv-openocd-wchのビルド
オリジナルのriscv-openocd-wchはApple Silicon(arm64)ではビルドエラーになる上、リポジトリがアーカイブされているため修正版をforkしました。
https://github.com/ayumu-bekki/riscv-openocd-wch
# 依存パッケージの追加
sudo port install libtool automake autoconf pkgconfig libusb libusb-compat texinfo git
# riscv-openocd-wchのソース取得
git clone https://github.com/ayumu-bekki/riscv-openocd-wch
cd riscv-openocd-wch
# 環境変数の指定
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig
export CPPFLAGS="-I/opt/local/include"
export LDFLAGS="-L/opt/local/lib"
export CFLAGS="-std=gnu11 -Wno-error=incompatible-function-pointer-types -Wno-incompatible-function-pointer-types -Wno-error=int-conversion -Wno-error=implicit-function-declaration"
# ビルド
./bootstrap
./configure --enable-wlinke \
--disable-ch347 \
--disable-linuxgpiod \
--disable-werror
make -j
Arduino IDEへの組み込み
ボードマネージャ導入時に配置されたx86_64向けの openocdを、今回ビルドしたarm64向けのバイナリで上書きします。
cp src/openocd ~/Library/Arduino15/packages/WCH/tools/openocd/1.0.0/bin/openocd
プロジェクトでの利用方法
メニューから設定する方法
- Tools -> Board -> CH32 MCU EVT Boards -> CH32V00x を選択
- Tools -> Port -> /dev/cu.usbmodemXXXXXXXXXXXXX を選択
Select Other Board and Port で設定する方法
実際に動かしてみた
Lチカサンプル (ch32v003_led_blinker.ino)
// CH32V003 Lチカ
#define LED_PIN PD6 // 使用ピン
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(100);
digitalWrite(LED_PIN, LOW);
delay(100);
}
WCH-LinkEとCH32V003をVDD(3.3V) VSS(GND)と通信用のSWIO (SWDIO) を繋げば書き込みできます。 CH32V003J4M6/CH32V003F4P6にてLEDの点滅を確認できました。
CH32V003はとにかく安く、他の外付けパーツも不要でArduino言語が利用できるというのは魅力的です。 メモリサイズが小さい・浮動小数点演算のハードウェアサポートなし・Arduino言語のライブラリでは一部ハードウェアのサポートがないなど気を使う点はありますが、用途次第では活用できそうです。