WSL(Ubuntu24.04)で CH32V203 開発環境のセットアップ
RISC-Vのツールチェーンのインストール
riscv-gnu-toolchainの公式リポジトリの手順道理に必要なパッケージをインストール
$ sudo apt install autoconf automake autotools-dev curl python3 python3-pip libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev libslirp-dev
riscv-gnu-toolchainをクローンする。
クローンしたフォルダに入り、buildフォルダを作成しbuildに移動後
../configure を実行する。
$ git clone https://github.com/riscv-collab/riscv-gnu-toolchain.git
$ cd riscv-gnu-toolchain
$ mkdir build
$ cd build
$ ../configure --prefix=$HOME/riscv-gnu-toolchain --disable-linux --with-abi=ilp32 --with-arch=rv32imac
$ make
—prefix=のディレクトリはビルドインストールされるものがこのディレクトリ生成される。
/opt/riscv-gnu-toolchainなどにすることが定石かもしれませんが、
パーミッション関係でコケる可能性があるのでHOMEディレクトリに作成しています。
make installはなくて、makeのみでインストールまで終わる模様。(結構時間がかかる。小一時間カカッタヨ)
インストール完了後~/riscv-gnu-toolchain/binのなかみは下記のようになっていました。
humi@DESKTOP-DKATBJV:~/riscv-gnu-toolchain/bin$ ls
riscv32-unknown-elf-addr2line riscv32-unknown-elf-gcc-nm riscv32-unknown-elf-nm
riscv32-unknown-elf-ar riscv32-unknown-elf-gcc-ranlib riscv32-unknown-elf-objcopy
riscv32-unknown-elf-as riscv32-unknown-elf-gcov riscv32-unknown-elf-objdump
riscv32-unknown-elf-c++ riscv32-unknown-elf-gcov-dump riscv32-unknown-elf-ranlib
riscv32-unknown-elf-c++filt riscv32-unknown-elf-gcov-tool riscv32-unknown-elf-readelf
riscv32-unknown-elf-cpp riscv32-unknown-elf-gdb riscv32-unknown-elf-run
riscv32-unknown-elf-elfedit riscv32-unknown-elf-gdb-add-index riscv32-unknown-elf-size
riscv32-unknown-elf-g++ riscv32-unknown-elf-gprof riscv32-unknown-elf-strings
riscv32-unknown-elf-gcc riscv32-unknown-elf-ld riscv32-unknown-elf-strip
riscv32-unknown-elf-gcc-13.2.0 riscv32-unknown-elf-ld.bfd
riscv32-unknown-elf-gcc-ar riscv32-unknown-elf-lto-dump
どこでも使えるようにパスと通す。
HOMEディレクトリの.bashrcに下記を追記
export PATH=$HOME/riscv-gnu-toolchain/bin:$PATH
下記コマンドでバージョン番号などがでてきたらインストールは成功
$ riscv32-unknown-elf-gcc --version
公式SDKをクローン後、ビルドする。
ch32v20xの公式リポジトリをクローンする。
$ git clone https://github.com/openwch/ch32v20x.git
EVA/CH32V20x_List_EN.txtにどこにどんなファイルの記述があるかが説明してある。
EVT/EXAMにいろいろなサンプルがある。
EVT/EXAM/SRCにコア、リンカースクリプト、エントリポイントなどがある。
今回はL地下のプログラムをコンパイルしていく。
ch32v20x/EVT/EXAM/GPIO/GPIO_Toggle/Userに移動しMakefileを作成する。
cd ch32v20x/EVT/EXAM/GPIO/GPIO_Toggle/User
touch Makefile
Makefileの中身はこのMakefileをコピーする
Makefileの
CH32V20X_SDK=/home/koron/work/ch32v203/sdk
の部分を
CH32V20X_SDK=../../../SRC
に書き換える。
CH32V20X_SDK=../../../SRC
makeを実行後、hello_usart.elfなどができていればOK
$ make
CH32V203ボートに書込みをする(wchisp(USB書込み))
手順はwchisp公式の手順に従う。
前提条件として
Rust
Visual C++
がWindowsにインストール済みである必要があります。
wchispをインストールする。
cargo install wchisp
Zadingをインストール、ドライバをあてる。
Zadingの最新版をダウンロード後、zading-[ver].exeを起動する。
Options > List All Devices をクリックするとすべてのデバイスがドロップダウンメニューに表示される。
PCにマイコンを接続(P6側のUSBからしか書き込めない)し、3.3vとBOOT0を接続しS1のリセットスイッチを押す。
ZadingのドロップダウンメニューがリロードされてUSB Moduleが認識される。(環境によっても名前の表示が違うかもしれません)
USB Moduleを選択後、Install Driverをクリックする。(WinUSBを選ぶ)
elfファイルを焼く
$ wchisp info
wchisp infoでChip名などが出てくれば認識されています。
wslのコンパイルしたelfファイルまで移動し、 wchisp flash hello_usart.elf で書込みを行います
$ wchisp flash hello_usart.elf
書込みが完了後公式SDKのGPIO例のデフォルトではPA0がLチカするようになっています。
PA0とLED1かLED2に接続後Resetボタンを押すと実行される思います。
参考
riscv-gnu-toolchain(github)必要なもののインストール
ソースからビルドする方法(github)
ビルド環境構築の方法など(74thさん)
Rustで開発例,WCH-LINKでの書込み例も(74thさん)
コピーさせていただいたMakefileの記事(zenn)
CH32V20X公式SDK(github)
wchisp公式