CH32V307VCT6をArduinoで使う

アリエクでEthernet端子が載っているCH32Vを見かけたので買ってみました。
今回はArduino IDEでLチカできることの確認まで試します。

CH32V307VCT6開発ボード

概要

  • 性能は悪くなさそう、簡単な用途なら使えるよ
  • 今のところ、使えない機能があるよ
  • 本格活用するならMounRiverを使おう

購入の話

購入したのはこちら。
https://ja.aliexpress.com/item/1005004350410929.html
2024/1時点では$4.5(→700円程度)+送料と、有線LAN付きボードとしては格安となっています。
なお、このチップを搭載した開発ボードは観測した範囲で4種類ありました。コネクタの出し方が少しずつ違うようなので、用途に応じて選定しましょう。

ちなみに、現時点では秋月でCH32V003~CH32V305まで売っています。
いずれCH32V307も販売されるかもしれません。

端子関連の補足として、

  • Ethernetは10Mbpsのようです。 結線が2対のため、電源供給の併用は難しそうです。
  • Type-Cコネクタは2つありますが、初期状態ではプログラムの書き込みに使えません。(USB2.0バイスとして扱うコネクタのようです。)
  • SWD端子横の謎コネクタはTFカード用のようです、microSDカードが刺さることを確認しています。(読み書きは未検証)
  • このタイプのボードはSWD経由でのSerialが動かないようです。使い方の調査中。

事前設定

WCH-LinkEの設定

前述のとおり、USB端子で書き込むことはできないので、WCH-LinkEのSWDで接続します。
最近はLinkEのコネクタを統一するのにポケットヘッダを使っています。

以前秋月で買ったWCH-LinkEだとバージョンアップが必要なようです、アップデートされるまで数分待ちます。

アップデート

アップデート完了後、CH32Vの情報を読み取ります。
赤枠のQueryボタンを実行すると、右側に情報が出てきます。

Read protection

Read Protectがかかっていると、この後の書き込みがうまくいかないので解除しておきます。
解除は鍵解除マークでできます。(何に対するロックなんだろう…)
解除すると、Read ProtectがDisabledになります。

ロック機能はCH32V003を使った際は見かけなかった気がするので、上位機種の機能でしょうか。

Arduino IDEで一部ピンを使う

CH32Vを使う場合はBoards Managerから「CH32 MCU EVT Boards」を入れておきます。
作業時は1.0.4が最新のようです。

このピン指定はPAxxやPBxxは定義されているようで、そのまま動きます。

void setup() {
  pinMode(PA5, OUTPUT);
}

void loop() {
  digitalWrite(PA5, HIGH);
  delay(500);
  digitalWrite(PA5, LOW);
  delay(500);
}

ボードはCH32V30x

setting

書き込みはエラーに見える表示ですが、これが正常です。

正常ケース

A5ポートにLEDを刺せば点滅するはずです。 (抵抗付きLEDって便利ですね)

PAxx~PBxx以外について

現在のArduino CoreでCH32V307の定義がこちらのようです。
arduino_core_ch32/variants/CH32V30x/CH32V307VCT6/variant_CH32V307VCT6.h at main · openwch/arduino_core_ch32 · GitHub

PC~PEは定義がされていないため、コンパイルエラーとなります。
今後のアップデートで使える可能性はありますが、現時点では使えません。PBまでのポートで頑張りましょう。

最後に

どこまでが正常動作か分からず苦労しました…
EthernetはMounRiverの方が情報があるようなので、次はMounRiverを試します。

簡易PoE改造して使う予定でしたが、コネクタの構造上難しそう……