WCH の RISC-V の安価なマイコン、CH32V003 のファームウェアのビルド環境を整えて、ビルドをする所まで持ってきました。
いくつかCH32Vの利用法についてまとめている所を見つけて、主にそれに従って準備しました。
tl;dr
- https://github.com/riscv-collab/riscv-gnu-toolchain を、rv32ec を有効にしてビルドする
- テンプレート生成ツール https://github.com/cjacker/ch32v_evt_makefile_gcc_project_template を使ってワークスペースを作る
- wlink を使って flash する
CH32V003 は RV32EC である
CH32V003 は拡張命令ポリシーが、CH32V203 の RV32IMAC と異なり、RV32EC です。"E" は組み込み向けにレジスタが少ない命令セットのようです。
現状(2023/03/11)、LLVMも対応していません。
gcc をビルドする
https://github.com/riscv-collab/riscv-gnu-toolchainでは、RV32ECに対応した gcc に加え、gdb など各種ツールをビルドすることができます。
MountRiverStudio がコンパイル済みgccを無料で配布されていますので、そちらを使うのも手です。ただし、現状 ARM64 バイナリはないため、ARM64環境ならば自分でビルドする必要があります。
Ubuntu 22.04 でビルドしてみました。
# ビルドに必要なパッケージ # https://github.com/riscv-collab/riscv-gnu-toolchain#prerequisites sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build # git clone する(submoduleはチェックアウト"しない") git clone https://github.com/riscv-collab/riscv-gnu-toolchain cd riscv-gnu-toolchain # ディレクトリ準備 sudo mkdir /opt/riscv sudo chown nnyn:nnyn /opt/riscv mkdir build cd build # RV32EC も入れる ../configure --prefix=/opt/riscv-gnu-toolchain --disable-linux --with-abi=ilp32 --with-abi=ilp32e --with-arch=rv32imac --with-arch=rv32ec # ビルド make # インストール make install
/opt/riscv-gnu-toolchain/bin
にパスを通しておきます。
SDK 含むリポジトリを準備して、ビルドする
ch32vのSDKを含むリポジトリをセットアップしてくれるものが、https://github.com/cjacker/ch32v_evt_makefile_gcc_project_template にあります。
# テンプレート生成スクリプト git clone https://github.com/cjacker/ch32v_evt_makefile_gcc_project_template cd evt_makefile_gcc_project_template ./generate_project_from_evt.sh ch32v003f4p6 # 実際にコーディングを行うリポジトリにリソースを移動 mkdir ~/ghq/github.com/74th/try-ch32v003/ cp -rf CH32V_firmware_library Makefile User ~/ghq/github.com/74th/try-ch32v003/
Makefile のうち、ツールの接頭辞を示す PREFIX だけを書き換えます。
vi Makefile
####################################### # binaries ####################################### # PREFIX = riscv-none-embed- PREFIX = riscv32-unknown-elf-
# ビルド make
ビルドが環境すると build/ch32v003f4p6.bin
にバイナリができます。
このテンプレートは最初は D0 でLチカをするためのプログラムになっています。
マイコンに書き込む
書き込むには、ハードウェアは WCH-LinkE、ソフトウェアは wlink を使います。
Ch32v003f4p6 qingke RISC-V2A 1線式シディシステムメイン周波数48mhz、1個/キット https://ja.aliexpress.com/item/1005004895791296.html?spm=a2g0o.order_list.order_list_main.110.58e2585a8hzEfl&gatewayAdapt=glo2jpn
wlink はRust製の、WCH-Link用CLIツールです。wchisp が CH32V203 などにある USB書き込み機能のためのツールのため、USB機能のない CH32V003 ではUSB経由、及び wchisp では書き込むことができません。
wlink をインストールします。
cargo install --git https://github.com/ch32-rs/wlink.git
CH32V003 の D1 と WCH-LinkE のSWDIOをつなぎ、書き込みを実行します。(wlinkは現状 binary 形式しかサポートされていません。
wlink build/ch32v003f4p6.bin
チップ名は自動で判別するため、特に入力は必要ありません。
ついでの確認
データシートの通り、クリスタルレス、5Vでも動作することを確認できました。写真の自作ボードはVCCと5Vをつなぐジャンパを用意しておいて、USBの5Vを直接流せるようにしてあります(自作ボードの記事は別途作る予定です)。
終わりに
CH32V003 を100個購入し、これで開発環境が整ったため、CH32V003 を使っていこうと思います。
現状専用ライタ WCH-LinkE が必要ですが、プロトコルが公開されたたり、ARM CH32F103 を使ったデバッグ方法があるようなので、入手性の高い代替ツールがそのうち出てこないか期待します。