WCH社のUSB PDが利用できるCH32X035を触る

概要

これまでデバッカーが一体になっているCH32V103を利用していましたが、USB PDに対応しているCH32X035を触ってみました。WCH-LinkEを利用して接続するため若干面倒になります。

CH32X035とは?

WCH社が開発しているRISC-V搭載のチップになります。いろいろな種類があるのですがCH32X035は低速なのですが、USB PDに対応しているモデルとなります。

727.0¥ 4% OFF|USBおよびpd開発ボードキット,USBおよびpd,32ビット,RISC V,mcu,adc,opa,cmp,spi,機能,ch32x035| | - AliExpress
Smarter Shopping, Better Living! Aliexpress.com

開発ボードは何種類かあるのですが上記のCH32X035C8T6を利用しています。本体のみで900円ぐらいで、書き込み機のWCH-LinkEをセットして送料込で2,000円ぐらいになります。

WCHの開発ボードの特徴として、どこに接続すればよいのかまったくわからないことです。開発ボードにUSB端子がありますが、USBホストやUSB PDなどに利用するためのものであり、開発環境からは書き込みには利用できません。

SWDを利用するので接続自体は楽なのですが、どこにSWDを接続するのかが書いてありません。まずはデータシートを確認して接続先を探すところからが必要になります。

また、USB端子からもWCHISPToolを使ってプログラムを書き込むことが可能です。D+(PC17)をVDDに接続した状態でパソコンとUSB接続をしてからD+(PC17)の接続をはずすことでUSBからのプログラム転送モードで起動します。ただし、転送するプログラムのバイナリを準備して、ツールから手でアップする形になるのでちょっと面倒です。可能であればWCH-LinkEを使うことをおすすめします。

詳しい書き込み方法はEVTの中に入っているPDFに書いてあります。USB_P(PC17)をHIGHにしてから起動することでダウンロードモードになって、USBかシリアルでプログラムを転送できます。

データシートの確保

中国語サイト

产品中心 - 南京沁恒微电子股份有限公司

中国語サイトの方が情報が多いので、まずはこちらを確認します。

英語サイト

32-bit USB+USB PD MCU CH32X035 - NanjingQinhengMicroelectronics
CH32X035 is an industrial-grade microcontroller based on the QingKe RISC-V core. CH32X035 has built-in USB and PD PHY, s...

英語サイトも確認をして、情報がある場合には英語版のデータシートの方が私はわかりやすくて好きです。ただ、英語でよくわからないときには中国語のデータシートを見るとより理解できるところもあると思います。

SWD接続先の確認

まずは図1のSystem Block Diagramから左上にある文字を確認します。微妙にシリーズによってここの名称が違います。

通常はSWCLKとSWDIOのはずですが、CH32V003だとSWIOになります。

SWCLKで検索してもピン番号がわかりません。上記がひっかかりまして、DCKとDIOの名称を使っていることがわかります。他のシリーズだとそのままSWCLKとSWDIOですがCH32X035は違う名前を使っていました。

DCKとDIOを検索することでSWCLKがPC19、SWDIOがPC18なのがわかりました。

シリアル接続先を探す

またSystem Block Diagramを確認します。CH32シリーズは非同期のみのUARTではなく、非同期と同期の両方に対応できるUSARTが利用できます。システムブロック図をみるとUSART1から4までの4つありますね。デフォルトは一番番号の若い1から利用されるはずです。USART1のTXとRXを探します。USART1で検索してもピンがわかりません。。。

USARTで検索するとまたしても上記がひっかかりました。TX2がUSART2_TXなので、TX1とRX1を探せば良さそうですね。

TX1はPB10、RX1はPB11のようです。一番左側に数字が並んでいますが、パッケージ別のピン番号です。-でピンがないパッケージもありますね。

上記がパッケージ一覧なので、右から2つのパッケージではTX1とRX1が使えませんね。ピン番号は変更できますが、設定には制限があります。TX1のかわりに使えるピンはTX1_もしくはTX1_2かTX1_3などと書かれています。

ただし、TX1とTX1_2が同じピンです。同じようにRX1とRX1_2が同じピンなのでかわりには使えません。

そのためTX1_3がかわりに選択可能な唯一のピンになります。すべてのパッケージで使えてPA7なのがわかります。

RX_3はPB2に設定されています。しかしながら右から2つのパッケージではピンがありません。QFN20はTX1_3とRX1を利用する必要があり、TSSOP20の場合にはUSART1自体が利用できません。この辺はハマりそうなので注意が必要ですね。

WCH-LinkEとの接続

CH32X035WCH-LinkE
PC19(DCK/SWCLK)SWCLK
PC18(DIO/SWDIO)SWDIO
PB10(TX)RX
PB11(RX)TX
VCC3V3
GNDGND

上記で配線を行いました。CH32X035の電源は3.3Vか5Vなので、5Vを接続しても動くはずです。

動作実験

基本はCH32V103とかわりません。Arduinoを利用して動作実験をしてみました。ただ、WCH-LinkEのバージョンが古い場合があるのでWCH-LinkUtilityか、MounRiverで接続までためすと更新ができる場合があります。CH32V103も私のは古かったので更新しておきました。

まとめ

この開発ボードは接続先がわからないので、自分で調べて上記のように開発ボードに貼り付けておきました。また、パッケージ違いによりUSART1が利用できないものがあったりと、ちょっと注意が必要そうなボードになります。

使い勝手を考えるとWCH-LinkEを接続するよりは、最初から内蔵しているタイプの開発ボードがやっぱり便利に感じました。

コメント