20241114182939 CH32Vの開発環境

ch32vmicrocontrollersoftware WIP

成果物としてフルーツ餅を光らせるものを作った。 GitHub - kinoshita-lab/Fruit-Mochi-Exciter


CH32Vといいつつ、CH32V003に限定した情報が含まれているかもしれない。

CH32Vは Nanjing Qinheng Microelectronics が製造しているRISCVのMCU。

など、ちょっとしたことに使いやすそう。

必要なもの

わたしは一式 をaliexpressで買ったが、個別に秋月などでも購入可能。

準備

ハードウェアの接続

WCH-LinkEの通信モードを設定する必要がある(っぽい)。 WCH-LinkEをPCに接続。WCH-LinkEから、電源(3.3V or 5V)とGND、SWDIOをマイコンに接続する。 CH32V003の場合、どのパッケージでもPD1がSWDIO。データシート参照。 CH32V003DS0.PDF - NanjingQinhengMicroelectronics SWDIOだったり、SWIO だったりと表記が揺れているが、このピンで接続できた。

設定

WCH-LinkUtility.ZIP - 南京沁恒微电子股份有限公司 をダウンロード&展開して、実行。 ドライバーインストールの画面が別途表示されるので、そちらを使ってインストールする。ちなみにこの画面はこのユーティリティを起動するたびに、表示されつづけた。PCを再起動したら表示されなくなった。

上のアイコン、左から2番目(Connect WCH-Link)を押す。 下の方のログ画面に、 Succeed to connect with WCH-Link と表示されれば、無事に接続できている。

WCH-Linkの接続方法を変更する。 下の方にある Active WCH-Link Mode: の所、左端のコンボボックスでWCH-LinkRV を設定、 右端のSetを押す。 Succeeed! と下のログ画面に表示されれば設定できている。

画面上部、 Core: でRISC-Vを選択、 Series で CH32V003を選択する。 その状態で上のアイコン、左から3番目Query Chip Info を押してみて、 右の表っぽい所にMCU ID、 Flash Sizeなど読みこまれたら、 WCH-LinkとMCUとの通信がうまくいっている。左から5番目のアイコン、Query Read-Write Protect Status を押すと、当然だがDisable という表示になる。

こんな感じ。

Refs.

開発環境

純正の開発環境として、eclipseベースの MounRiver Studio がある。とりあえずインストールしてみたが、こっちは使わないかもしれない。

PlatformIOでやりたい(特に合理的な判断ではないかも)。PlatformIOへCH32Vをインストールする方法はこちら。 Welcome to the PlatformIO CH32V Documentation! — PIO CH32V 0.1 documentation このドキュメントによると、将来的には FreeRTOSとかも使えそうな雰囲気を感じるが、リンク先は20241120 時点では何も書いていない。Ch32v003funとArduinoについては記載が無いなど、開発中な雰囲気を感じる。 20241120 時点で、PlatformIOで選択可能なのは以下の3種類。

Noneos-sdk

Bare Metalっぽいやつ。 platform.iniでスタートアップやC++の有無などまで設定できる。

Arduino-sdk

arduinoっぽく使えるやつ。 built on Noneos-sdk(上のやつ)。

Ch32v003fun

CH32V003専用?といいつつチラホラ別の型番も使えるようになりつつあるっぽい。 PlatformIO無しで単体で使うことも可能。 SWDIOでprintfデバッグができる。

Ch32v003fun + PIO でprintfするには

「SWDIOでprintfデバッグができる。」 とのことだが、これが多少面倒だった。 以下状況を調査しつつ整理中のWIP。

platformIOでprintfするサンプルはここにあって、このような感じでやればprintfは可能なのだが、noneos用。 platform-ch32v/examples/sdi-printf-ch32v003 at develop · Community-PIO-CH32V/platform-ch32v · GitHub

これのplatform.iniのframeworkを変更すると、noneosだと存在する、debug.hが無いのでビルドできない。 debug.h、debug.cをnoneosから拾ってきて、srcフォルダに追加、不要な部分を消す。

Enable SDI Printf をクリックして有効にする。

デバッガ接続した状態とprintfの両立はできないかもしれない。WCHLink経由で接続した状態で、 Enabld SDI printf を選ぶと、プログラムがReleaseモードで再ロードされてしまう。printfはWCHLinkが接続された状態だと、debug.cのwrite_ が無限ループになってしまう。ここを工夫したらいけるかもしれない。 両方使えたら便利。

Neopixel

J4M6は8ピンしか無く、SPIのピンが出ていない。そこでソフトウェア的にやる方法。 CH32V003J4M6でneopixelを光らせる これはうまく動いていない。

結局、ch32v003funのextralibsに入っていた ws2812b_simple.h が動かせた。 ch32v003fun/extralibs/ws2812b_simple.h at master · cnlohr/ch32v003fun

USB

GitHub - cnlohr/rv003usb: CH32V003 RISC-V Pure Software USB Controller