概要
上記のRISC-V搭載のCH32シリーズからUSB PD対応のCH32L103を触ってみました。
開発ボード
現状はCH32L103C8T6の1種類しか販売していません。
WCHの公式ストアだと2枚セットなので、なかなか買いにくいです。
Wだと送料がかかりますが、1枚から購入可能です。
CH32X035との違い
似たボードとしてCH32X035もあります。両方ともUSB PDに対応しているのですが、CH32X035は独自色を出しすぎてかなり設計が変わっていました。
GPIOもVとLシリーズはPA0から15でその次はPB0と16個単位でPGぐらいまで確保されています。
CH32X035はPA0からPA23まであります。4ビットで処理できていたのが5ビットに拡張されています。いろいろ内部的なデータの持ち方が変わって微妙に使いにくいです。そして縦の部分もCH32X035はHBが直接なのですが、CH32L103はHBからPB2にブリッジされてGPIOに接続されています。この辺がソースコード上でも変わってくるので複数機種を同一コードで動かすのは結構面倒です。
ちなみにCH32V103だとHBではなくAHBからAPB2に渡されています。
開発環境
MounRiver
公式開発環境ですので、問題なく動きます。新規作成からよりはEVTでベースとなるプログラムを利用して改造していくほうが好ましいと思います。
Arduino
上記にあるOpenWCHのCH32duino環境ではまだサポートされていません。いろいろ見てみたところそもそも中に入っているOpenOCDのバージョンが古くてCH32L103に接続できません。
MounRiverに入っている新しいバージョンのOpenOCDを使ったところ接続は可能でしたが、ビルドしたプログラムが正しく動きません。過去動いていたボードも動かなくなったので、どうやらgccもMounRiverに入っているバージョンに入れ替える必要があるようです。
また、arduino_core_ch32の動きも遅く、何個かPRを出してみましたが反応が遅いためなかなか対応されるのは難しいように思います。いろいろ調べたところarduino_core_ch32の中に入っているライブラリもかなり古いものが使われていて、あまり更新されていなかったようです。
USB PBシンクの実験
CH32X035もCH32L103もEVT/EXAM/USBPD/USBPD_SNKを動かすことでUSB PDのシンクとして、電源から指定電圧を取得することが可能でした。
宣言的にはPPSもありましたが、現在対応しているのは固定値のPDOのみでした。
CH32X035はArduino環境でもUSB PDのサンプルスケッチがあります。しかしこのスケッチはPDOを内部で取得していますが、取得したPDOがprivateになっているため参照することができません。そして、電源側が対応していない電圧を指定した場合には最後のPDOを指定するコードになっていたため、12V非対応の電源に12Vを投げると20Vを指定するような動きになる可能性があるあまり良くないライブラリでした。
まとめ
CH32L103はまだまだ発売された直後で、パッケージも6種類あるはずですが開発ボードに利用されているLQFP48パッケージのものしか購入することができません。
EVTもちょっと少ない感じでしたので、もう少ししてから触った方がよいのかもしれません。
そして、OpenWCHのCH32duinoはいろいろと限界を感じてしまったので、独自のArduino環境を作る準備をしています。
コメント