11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【電子工作】CH552をArduino環境で使ってみる!

Arduinoから電子工作を始めたこともありATmegaやATtinyと言ったAVRマイコンを扱うことが多いのですが、自作基板の製作も始めたことから他にも便利なマイコンを使う機会も多くなりました。

今回CH55xシリーズの8ビットマイコンを見ていきたいと思います。

8ビットマイコンCH552にはCH552GやCH552T、CH552Eなどパッケージサイズによりいくつかチップがリリースされています。
2023年12月現在、秋月電子さんでもCH552ECH552Tは1個100円程度の価格で入手する事が出来るようです!

USB機能が使えるにも関わらず非常にお安く、16KBのフラッシュメモリ・SPI・ADC・PWMなどが内蔵されています。
ハードウェアのI2Cは搭載されていないようですが、これはソフトウェアで対応出来たのでATtinyの代用としても使えそうです。

ArduinoやATtiny好きの私としては、それらチップより入手性やチップ単価が安くArduino環境で同様に扱うことが出来るので興味を持ちました

普段自作基板などでATtinyを使うことが多いのですが、スペック的にはほぼ同等といったところのマイコンになると思います。(ATtinyは用途等に応じ多くのシリーズがラインアップされていますが!)

特徴的なのが安価なチップにも関わらずPCに接続してキーボードやマウスといったHIDデバイスとして使えるUSB機能が搭載されています。
自作キーボードやマクロパッドなどに使われているのもよく見かけます。

こちらは3キー+ロータリーエンコーダーという構成の中華マクロパッドなんですが、分解してみるとCH552Gが使われていました。

自作キーボード製作に向け、安価なマクロパッドを試してみました![SIKAI CASE]

そして先日1キーのみの自作キーボードを製作したのですが、そのMCU(マイコンチップ)の選定でRP2040やATmega32U4といった選択肢があり、その際にCH55xシリーズのチップも初めて使ってテストをしてみました。

【電子工作/ PCB】1キーのみの可愛い自作キーボード(1Key Keyboard)の製作!

チップサイズ等の問題で最終的に製作したものではATmega32U4を使いましたが、CH55xは安価ですがUSB機能が使えたりと便利に使えるマイコンチップだと思います。
書き込み装置も不要なので、Arduinoと同じ感覚で扱うことが出来るのも便利です!

初めてCH552GやCH552Tを使った時、
『あれ、シリアルポートを認識しない?』
『DFUモードで書き込む?』

など少しハマったポイントがあったので、Arduinoの開発環境(Arduino IDE)で使う手順を見ていきたいと思います。

CH552をArduino環境で使ってみる!

WCH CH55xシリーズのマイコンとは?

8ビットマイコンとなるCH55xシリーズのマイコンチップは中国のICメーカーWCHの製品となります。

WCHと言えばマイコンを使った電子工作をやられている方ならUSB-シリアル変換チップのCH340シリーズはよく使われているのを見かけますよね!

8ビットマイコンにはATtinyといった非常に有名なAVRマイコンがありますが、CH55xシリーズのマイコンも同様にArduino環境で扱うことが出来るので便利です!
何よりチップ単価が非常にお安く、おまけにUSB機能も付いています。

USB機能を持ちHID(Human Interface Device)デバイスを作れるマイコンには、ATmega32U4が使われたArduino LeonardoやPro Micro、RP2040が使われたRaspberry Pi Picoなどがありますが、チップ単体の単価で言うと1/5くらいでの価格でしょうかね?(100円程度で入手出来ます)

USB機能が付いたマイコンでこの単価で入手出来るものはそうないと思います。

そしてCH55xは書き込み装置も不要なので、Arduino IDEを使えば普段Arduinoを扱う時と同じ感覚で使えるのも便利なマイコンです。

今回見ていくCH552の主なスペックはこんな感じ。

動作電圧プログラム用フラッシュメモリクロック周波数
3.0~5.5V16KB最大24MHz

ブートローダーに2KB占有されているので、実際に使用可能なフラッシュメモリ容量は14KB程度となるようです。

CH551からADC機能も追加されています。

CH552にはパッケージサイズによりいくつかチップがリリースされています。
使えるI/Oの数などからCH552GやCH552Tが使いやすいと思います。(用途によりますが)

冒頭でご紹介した1Key Keyboardでは小さなパッケージのCH552Eの使用も検討していました。

参考 CH552 データシートWCH

いくつか手元にチップがあるのですが、今回はCH552Gを例にArduino環境でスケッチを書き込み動作確認(Lチカ)を行うまでの手順を見ていきたいと思います。
他のCH552チップも同様に扱う事が出来ます。

CH552Gの接続について

CH552GはSOP-16というパッケージになっているので、ブレッドボードでテストする際はピッチ変換基板があると便利です。

またUSBコネクタ(Type-Cを使いました)のDIP化基板も必要です。

AliExpressといった海外サイトではこのようなブレークアウトボードもいくつか販売されています。(下写真はCH552GとCH552Tのブレークアウトボードです)
海外サイトなので入手するのに時間はかかりますが、初めてCH552を使ってテストする際には便利です!

CH552G Breakout Board
created by Rinker

接続は簡単なのでブレッドボードで組んでテストしていきます。

CH552はUSB経由でプログラムの書き込みを行うことができ、書き込み装置が不要なのでシンプルな接続で動かすことが出来ます。

電源(VCC/GND)をUSB端子のVBUS(5V)から取り(動作電圧は3.0~5.5V)、あとはUSB端子のデータラインD+(UDP) / D-(UDM)を接続するだけです。

その際に電源ライン(VCC/V33)にはバイパスコンデンサ(0.1μF)を入れる必要があります!
CH340など他のWCHのチップも同様なのですが、このパスコンを入れないとPCに認識されないので入れて下さいね!

基本的な接続はこのようになります。

ここで初めてCH552を使った時にハマったポイントなんですが、CH552が未プログラム状態(初めて書き込む場合)や[Default CDC]を使っていない場合、DFUモード(書き込まれているブートローダーを起動)で書き込む必要があります。(詳しくは後述します)

上記AliExpressで購入したボードにはDFUモードで起動させるためのスイッチが付いています。
スイッチを押した状態でUSBケーブルを差し込むとこのモードに入りUSB経由でプログラムの書き込みが行えるというものです。

このDFUモード(ブートローダーモード)で起動するには、CH55xの[D+]をプルアップした状態で電源を投入する必要があります!
これでブートローダーが起動しUSB経由で書き込みが行えます。

CH55xには3.3Vの内蔵レギュレーターが搭載されています。(V33端子)
そしてUSBの信号は3.3Vなので、V33端子にプルアップ抵抗(10kΩ)とスイッチを取り付けることにより上記購入したボードと同じ構成のものがブレッドボードでも作れます。

上記接続図をこれに対応させるとこのようになりますね。

一度何かしらプログラムを書き込み[USB Settings]で[Default CDC]を選択していた場合は、以降PCに接続するとシリアルポートが現れるのでArduino IDEでシリアルポートを選択して通常のArduinoを扱う時のように書き込みを行うことが出来るようになります。(後述します)

Arduino IDEの環境構築

CH552の接続が出来たので、次はArduino IDEでCH55xを使うための環境構築です。
こちらではMac環境で進めていきます。

Arduino IDEでCH55xシリーズのプログラム開発が出来る[ch55xduino]ボードパッケージをインストールします。

参考 ch55xduinoGitHub

Arduino IDEの[環境設定(基本設定)]を開き、[追加のボードマネージャのURL]に以下URLを追加します。

貼り付けるURL
https://raw.githubusercontent.com/DeqingSun/ch55xduino/ch55xduino/package_ch55xduino_mcs51_index.json

次に[ツール]→[ボード]から[ボードマネージャ]を開き”ch55x”で検索すると必要なボードパッケージ[CH55xDuino MCS51 plain C core(non-C++)]が見つかります。
これをインストールして完了です。

インストールが完了すると、[ツール]→[ボード]の項目に[CH55xDuino MCS51 plain C core(non-C++)]が追加されます。
今回CH552Gに書き込みを行うので[CH552 Board]を選択して書き込むことになります。

他の項目はデフォルトでこのように設定されています。
Lチカスケッチを書き込み動作確認をしてみたいと思いますが、デフォルト設定で問題ありません。

スケッチの書き込み方法について!

Arduino IDEからの書き込みは、以下2つの方法があります。
初めてCH55xを使った書き込みを行った時に結構ハマったポイントです!

①[Default CDC]での書き込み

Arduinoを扱う時のようにArduino IDEでCH55xのシリアルポートを選択して書き込む方法です。

[USB Settings]で[Default CDC]を選択した場合はこの書き込みとなります。

CH55xをPCに接続するとArduino IDEのシリアルポート(COMポート)に「CH55x」として認識され、これを選択して書き込みを行う通常のArduinoのような書き込み方法で行えます。

②DFUモードでの書き込み(ブートローダー)

[Default CDC]を使っていない場合は、ボードのスイッチを押しながらUSB端子を接続します。

ブレッドボードでの接続では[D+]にプルアップ抵抗と共に接続したスイッチを押しながら電源を投入しスイッチを離すとブートローダーが立ち上がります(DFUモード)

この時Arduino IDEからはシリアルポートとして認識(表示)されませんが、シリアルポートを選択せずに[マイコンボードに書き込む(アップロードボタン)]を選択して書き込むことが出来ます。

またCH55xが未プログラム(初めて使う場合)は、このDFUモードで起動します。

スケッチを書き込んでみる

それでは実際にスケッチを書き込み動作確認をしてみます。

ブレッドボードで組んだ回路ではスイッチを押した状態でUSB端子を接続、そしてスイッチを離すとブートローダが起動します(DFUモードで起動)。

MEMO
初めてCH552を使う場合(未プログラム状態)は、PCとUSB接続するとこのモードで起動します!
[CH55xDuino]で使えるサンプルスケッチは結構あります。

Lチカスケッチを書き込み動作確認してみます。
ArduinoのオンボードLEDを点灯させるスケッチと全く同じですが、CH55x用のサンプルスケッチ[Blink]ではピン番号33(P3.3)を点滅させるようになっています。

ここでCH552のピン番号を少し見ておきます。
CH55xでは「ポート番号が10の位、次にポート内の番号は1の位」になっています。
つまりP3.3は33番として扱うということです。

先程のブレッドボードでの接続図にCH552GのP3.3ピンにLEDを追加しました。
またテスト動作させる場合にはリセットスイッチもあると便利なので取り付けています。
CH55xのリセットピン(RST)は正論理となっているのでGNDではなく5V端子にスイッチを接続し”1”(HIGH)でリセットをかけます。

それでは書き込みです。
ボードの設定は[CH552 Board]、[USB Settings]は[Default CDC]を選択して書き込んでみます。
DFUモードで起動しているのでシリアルポートは表示されませんがこのまま書き込むことが出来ます。

あとは通常のArduino IDEからの書き込み、アップロードボタンを押してスケッチを書き込みます。

書き込みが完了しP3.3に゙接続したLEDが1秒間隔で点滅すれば成功です。

[Default CDC]で書き込んだので、以降はPCに接続するとシリアルポートが現れます。
シリアルポートを選択して通常のArduinoのように書き込みが行えるようになります。

MEMO
データシートを読むと記載がありますが、CH55xのフラッシュメモリは書き換え上限回数が200回程度と少なくなっているようです!

【追記】自作CH552G開発ボードの製作!

CH552Gを使った自作開発ボード(ブレークアウトボード)を製作しました。

販売されているCH552GボードはUSB端子がMiniUSBとなっており少し使いにくかったことから、Type-C端子に変更しオンボードLEDやリセットスイッチを実装、I/Oのシルクラベルを見やすくなるように極力大きくプリントしました。

非常に使い勝手の良いCH55x開発ボードになったと思います!

【電子工作 / PCB】自作CH552G開発ボードの製作!

最後に!

初めてCH552を使った時に、『あれ、シリアルポートを認識しない?』『書き込み方法は?』など結構ハマったので簡単にまとめてみました!

安価なマイコンですが書き込み装置が不要でATtinyなどの代用としても使え、またUSB機能も使うことが出来る便利なマイコンですね!

USBからのシリアル通信を行う[Default CDC]ではArduino IDEでシリアルポートを選択して書き込むといった普段Arduinoを扱う時と同様な感覚で使えプログラム開発が出来るのも便利です。

[Default CDC]を使わない場合はDFUモードで起動して書き込む必要があります。
USB機能を使うなどこのような使い方をする場合は、スイッチを押した状態(D+をプルアップ)でUSBケーブルを差し込み起動する必要があるので少し面倒にはなりますが・・・

 

また海外サイトで購入したブレークアウトボードはUSB端子がMiniUSBだったりと少し使いにくい部分があり、CH55xはこれから便利に使えそうなマイコンだったのでこのような自作ブレークアウトボードの製作も考えています。
また別記事でご紹介できればと思います!

1 COMMENT

コメントを残す