USB PD対応のCH32L103を触る

概要

上記のRISC-V搭載のCH32シリーズからUSB PD対応のCH32L103を触ってみました。

開発ボード

現状はCH32L103C8T6の1種類しか販売していません。

2407.0¥ 10% OFF|基本開発ボードch32l103、2ピース/ロット| | - AliExpress
Smarter Shopping, Better Living! Aliexpress.com

WCHの公式ストアだと2枚セットなので、なかなか買いにくいです。

891.0¥ 8% OFF|Pdusb低電力開発ボードch32l103、RISC V4Cマイクロコントローラ| | - AliExpress
Smarter Shopping, Better Living! Aliexpress.com

Wだと送料がかかりますが、1枚から購入可能です。

CH32X035との違い

似たボードとしてCH32X035もあります。両方ともUSB PDに対応しているのですが、CH32X035は独自色を出しすぎてかなり設計が変わっていました。

CH32L103

GPIOもVとLシリーズはPA0から15でその次はPB0と16個単位でPGぐらいまで確保されています。

CH32X035

CH32X035はPA0からPA23まであります。4ビットで処理できていたのが5ビットに拡張されています。いろいろ内部的なデータの持ち方が変わって微妙に使いにくいです。そして縦の部分もCH32X035はHBが直接なのですが、CH32L103はHBからPB2にブリッジされてGPIOに接続されています。この辺がソースコード上でも変わってくるので複数機種を同一コードで動かすのは結構面倒です。

CH32V103

ちなみにCH32V103だとHBではなくAHBからAPB2に渡されています。

開発環境

MounRiver

公式開発環境ですので、問題なく動きます。新規作成からよりはEVTでベースとなるプログラムを利用して改造していくほうが好ましいと思います。

Arduino

GitHub - openwch/arduino_core_ch32: Core library for CH32duino
Core library for CH32duino. Contribute to openwch/arduino_core_ch32 development by creating an account on GitHub.

上記にある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環境を作る準備をしています。

コメント