memo-komb

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が認識される。(環境によっても名前の表示が違うかもしれません)

Zadingのリスト

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公式