CH552Gの開発環境構築ととLチカ
前回紹介したCH552Gの開発環境を整備したので、その方法を覚書として残しておきます。CH551/552について書かれた日本語の記事というと、前に紹介したはくら様のブログ以外にはCerevo TechBlog様ぐらいしか見当たりません。いずれもメーカー推奨のKeil C51を前提として書かれていますが、Keilの無料試用版はコードサイズが2KBに制限されている(正式版は20万円超です…)とのことで、CH552Gのプログラムメモリ(ブートローダを除いて14KB)をいっぱいに使うようなものは作れません。メーカーのサンプルプログラムがこちらで公開されており、こちらはKeil用に書かれているのでまずはKeilで試すのがお手軽だとは思いますが、今回はあえてフリーのCコンパイラSDCC(Small Device C Compiler)を用いることにしました。
まず、SDCCの公式サイトから最新版をダウンロード、インストールします。インストールの終盤でコンパイラのパスを環境変数PATHに追加するかどうか尋ねられすので、追加(チェックを入れる)しておきます。
SDCCは統合開発環境(IDE)ではなく、コマンドラインコンパイラなので、別途エディタを用意します。フリーのものだとおススメはやはりVisual Studio Code(VS Code)でしょうか。ダウンロード後、インストールしてください。その後、C/C++の拡張機能をインストールしておきます。

8051アセンブラやIntel Hexの拡張機能も入れておいてもよいかもしれません。


基本的にはVS Codeで書いて保存→コマンドラインから sdcc ソースファイル名 でよいのですが、使い勝手を良くするためにいくつか追加の設定を行っておきます。もっとスマートな方法もあるかもしれませんが、初心者ということでご容赦ください。まず、コンパイル用のバッチファイルを作ります。ファイル名は_sdcc.batとし、パスの通ったフォルダ(C:\Program Files\SDCC\bin など)にコピーしておきます。このバッチはSDCCが吐き出した.ihx形式のHexファイルを.hex形式に自動的に変換するために作成しました。
(3, 4行目は、それぞれCH552, 551のメモリサイズを指定して使用量をチェックする場合の記述方法です。)
次に、プロジェクトファイルを保存するフォルダを新規作成します。

VS Codeの「フォルダーを開く」で、作成したフォルダを選択します。

次に、Cコンパイラの起動指定を行います。「ターミナル」-「タスクの構成」-「テンプレートからtasks.jsonを生成」-「Others」を選択します。



すると設定ファイルの編集画面が開くので、下記のように変更、保存してください。これで、[CTRL]+[SHIFT]+[B]でmain.c をメインプログラムとしたビルドタスクが走るようになります。main.c をほかのファイル名に変更したい場合には、"args" のところの "main" をほかの名前に変えてください。

下記のコードをコピペしてもOKです。
次に、エディタの使い勝手を向上させるため、インクルードファイルのパスの指定を行います。左下の設定アイコンから「コマンドパレット」-「C/C++:Edit Configurations (UI)」を選択して設定画面を開き、以下のように設定を行います。
・Compiler Path をsdcc.exeのパスに変更
・IntelliSense Mode をデフォルトに変更
・Include Path にSDCCのインクルードファイルが保存されているパスを追加


.vscodeフォルダ内にこのような c_cpp_properties.json ファイルが生成されておればOKです。以上の設定により、#include マクロで<>でかこったファイル名を指定しても警告表示が出なくなります。
以上の操作で.vscodeフォルダ内に2つのファイルが生成されましたが、これらのファイルはPC内のコンパイラのパスが変わらなければ使いまわしができますので、新たにプロジェクトを作成した際には.vscodeフォルダごとコピーしておけばこれまでの設定を省略できて便利です。
では試しにLチカのプログラムを入力してみましょう。以下のプログラムを入力し、main.c として保存してください。CH552特有のレジスタを使用しない限りは、8052用の定義ファイル(8052.h)が使用できます。また、stdint.h をインクルードしておくと、AVRGCCなどでもおなじみの uint8_t などの表現が使用できるようになるのでAVRからの移植にも便利かと思います。
入力後、[CTRL]+[SHIFT]+[B]でコンパイラが走り、main.hex が生成されているはずです。

生成されたバイナリファイルの書き込みにはWCH社提供のWCHISPToolを使用します。ダウンロードページからダウンロード、インストールしてください。
準備ができたら、前回の記事で紹介したマイコンボードのPGM(プログラム)ボタンを押しながらPCのUSBポートに接続します。PGMボタンは1-2秒で離してください。これでブートローダが起動して、書き込めるようになります。起動に成功すればデバイスマネージャに"USB Module"というデバイスが現れているはずですが、うまくいかなければいったん接続を外してやり直してみてください。

この状態でWCHISPToolを起動し、「8 Bit CH55X series」タブを選択、「Chip model」で「CH552」を選択すると、画面下方のデバイスリストに接続したマイコンが認識されているはずです。ここで「User File」でコンパイラの出力したhexファイルを選択し、「Download」ボタンをクリックすれば書き込みが完了します。

この状態でリセットボタンを押せばP1.1に接続したLEDが点滅するはずです。
SDCCでの開発はあまり資料がないので難しいかと思いましたが、一度環境構築してしまうとさほど大変ではありませんでした。今後の予定としては、メーカー提供のCH552用のライブラリやインクルードファイルなどをSDCCで利用できるように移植作業などを進めていきたいと思います。
最後に、参考資料へのリンクを載せておきます。
技術者見習いのメモ書き-USB機能付き格安マイコンCH552Tの入手方法と回路について
Cerevo TechBlog-[21日目]激安中華USBマイコンは使えるのか
GitHub CH554 software development kit for SDCC:SDCC用のサンプル
ElectroDragon-WCH Wiki
Bitbucket-Electrodragon WCH:Keil C51用のサンプル
新世代8051系マイコン入門ハンドブック【PDF版】
まず、SDCCの公式サイトから最新版をダウンロード、インストールします。インストールの終盤でコンパイラのパスを環境変数PATHに追加するかどうか尋ねられすので、追加(チェックを入れる)しておきます。
SDCCは統合開発環境(IDE)ではなく、コマンドラインコンパイラなので、別途エディタを用意します。フリーのものだとおススメはやはりVisual Studio Code(VS Code)でしょうか。ダウンロード後、インストールしてください。その後、C/C++の拡張機能をインストールしておきます。

8051アセンブラやIntel Hexの拡張機能も入れておいてもよいかもしれません。


基本的にはVS Codeで書いて保存→コマンドラインから sdcc ソースファイル名 でよいのですが、使い勝手を良くするためにいくつか追加の設定を行っておきます。もっとスマートな方法もあるかもしれませんが、初心者ということでご容赦ください。まず、コンパイル用のバッチファイルを作ります。ファイル名は_sdcc.batとし、パスの通ったフォルダ(C:\Program Files\SDCC\bin など)にコピーしておきます。このバッチはSDCCが吐き出した.ihx形式のHexファイルを.hex形式に自動的に変換するために作成しました。
(3, 4行目は、それぞれCH552, 551のメモリサイズを指定して使用量をチェックする場合の記述方法です。)
次に、プロジェクトファイルを保存するフォルダを新規作成します。

VS Codeの「フォルダーを開く」で、作成したフォルダを選択します。

次に、Cコンパイラの起動指定を行います。「ターミナル」-「タスクの構成」-「テンプレートからtasks.jsonを生成」-「Others」を選択します。



すると設定ファイルの編集画面が開くので、下記のように変更、保存してください。これで、[CTRL]+[SHIFT]+[B]でmain.c をメインプログラムとしたビルドタスクが走るようになります。main.c をほかのファイル名に変更したい場合には、"args" のところの "main" をほかの名前に変えてください。

下記のコードをコピペしてもOKです。
次に、エディタの使い勝手を向上させるため、インクルードファイルのパスの指定を行います。左下の設定アイコンから「コマンドパレット」-「C/C++:Edit Configurations (UI)」を選択して設定画面を開き、以下のように設定を行います。
・Compiler Path をsdcc.exeのパスに変更
・IntelliSense Mode をデフォルトに変更
・Include Path にSDCCのインクルードファイルが保存されているパスを追加


.vscodeフォルダ内にこのような c_cpp_properties.json ファイルが生成されておればOKです。以上の設定により、#include マクロで<>でかこったファイル名を指定しても警告表示が出なくなります。
以上の操作で.vscodeフォルダ内に2つのファイルが生成されましたが、これらのファイルはPC内のコンパイラのパスが変わらなければ使いまわしができますので、新たにプロジェクトを作成した際には.vscodeフォルダごとコピーしておけばこれまでの設定を省略できて便利です。
では試しにLチカのプログラムを入力してみましょう。以下のプログラムを入力し、main.c として保存してください。CH552特有のレジスタを使用しない限りは、8052用の定義ファイル(8052.h)が使用できます。また、stdint.h をインクルードしておくと、AVRGCCなどでもおなじみの uint8_t などの表現が使用できるようになるのでAVRからの移植にも便利かと思います。
入力後、[CTRL]+[SHIFT]+[B]でコンパイラが走り、main.hex が生成されているはずです。

生成されたバイナリファイルの書き込みにはWCH社提供のWCHISPToolを使用します。ダウンロードページからダウンロード、インストールしてください。
準備ができたら、前回の記事で紹介したマイコンボードのPGM(プログラム)ボタンを押しながらPCのUSBポートに接続します。PGMボタンは1-2秒で離してください。これでブートローダが起動して、書き込めるようになります。起動に成功すればデバイスマネージャに"USB Module"というデバイスが現れているはずですが、うまくいかなければいったん接続を外してやり直してみてください。

この状態でWCHISPToolを起動し、「8 Bit CH55X series」タブを選択、「Chip model」で「CH552」を選択すると、画面下方のデバイスリストに接続したマイコンが認識されているはずです。ここで「User File」でコンパイラの出力したhexファイルを選択し、「Download」ボタンをクリックすれば書き込みが完了します。

この状態でリセットボタンを押せばP1.1に接続したLEDが点滅するはずです。
SDCCでの開発はあまり資料がないので難しいかと思いましたが、一度環境構築してしまうとさほど大変ではありませんでした。今後の予定としては、メーカー提供のCH552用のライブラリやインクルードファイルなどをSDCCで利用できるように移植作業などを進めていきたいと思います。
最後に、参考資料へのリンクを載せておきます。
技術者見習いのメモ書き-USB機能付き格安マイコンCH552Tの入手方法と回路について
Cerevo TechBlog-[21日目]激安中華USBマイコンは使えるのか
GitHub CH554 software development kit for SDCC:SDCC用のサンプル
ElectroDragon-WCH Wiki
Bitbucket-Electrodragon WCH:Keil C51用のサンプル
新世代8051系マイコン入門ハンドブック【PDF版】
スポンサーサイト
AliExpressで購入したもの(5) - USBマイコンCH552G
今日はまたAliExpressで購入した電子部品を紹介したいと思います。はくら様のブログでUSBインターフェース内蔵の安価なマイコン、CH552が紹介されていますが、面白そうなので買ってみました。CH551/CH552は、USBシリアル変換チップCH340Gの製造元であるWCHの製品で、24MHz動作のMCS51(i8051)のコアに、様々なペリフェラルとUSBインターフェースを集積したものですが、非常に安価(1個数十円)なのが特徴です。今回は内部RAM 256B+拡張RAM 1KB、プログラムフラッシュ16KB搭載で、SOP16パッケージのCH552Gを購入しました。CH552GにはペリフェラルとしてUSBのほか、UART、ADC、アナログコンパレータ、タイマ、PWMなど必要なものは一通り入っています。
今回購入したのはProfessional BGA chip Factoryというセラーからで、5個入りで送料無料、200円でした。包装は非常に簡素なもので、チップがそのまま透明なビニール袋(帯電防止かどうかも不明な)に入っているだけでした。(写真はうち4つを手持ちの帯電防止袋に移し替えたもので、イメージです)

チップ単体だとこんな感じで、CH340Gなどと見た目は変わりません。

SOPでそのままでは使いにくいので、Aitendoで購入したピッチ変換基板に装着しました。この基板、面白いことにチップ型のコンデンサなどを取り付けられるパターンが2か所ありますので、これも利用しました。ただこのコンデンサを付けてしまうとブレッドボードで使うのには支障が出てくるので、場合によってはつけないほうが良いかもしれません。

簡単な開発用ボードを作ってみました。回路図は下記の通り。下側のコネクタはSPIのポートが引き出してあり、キャラクタLCDを接続できるようにしてみました。あとはブードローダ起動用のPGMボタン、リセットボタン、GPIO接続でプログラムから使えるBTN1, BTN2とLEDを接続しました。LEDの電流制限抵抗は大きめ(1KΩ)としたので、ちょっと暗めです。実際にはショートプラグを挟んでLEDを切り離せるようにしたので、もうちょっと低い抵抗値(200Ω程度)のほうがよかったかもしれません。

出来上がりはこんな感じ。

とりあえずLチカは動きました。
開発環境の作り方などは次回の記事で書きたいと思います。USBを使いこなそうとするとそれなりに知識が必要になりますが、単に安価なMCS51マイコンとしても充分実用になると感じました。1個40円程度と非常に安価ですし、マイコン好きな方は検討してみてはいかがでしょうか。
今回購入したのはProfessional BGA chip Factoryというセラーからで、5個入りで送料無料、200円でした。包装は非常に簡素なもので、チップがそのまま透明なビニール袋(帯電防止かどうかも不明な)に入っているだけでした。(写真はうち4つを手持ちの帯電防止袋に移し替えたもので、イメージです)

チップ単体だとこんな感じで、CH340Gなどと見た目は変わりません。

SOPでそのままでは使いにくいので、Aitendoで購入したピッチ変換基板に装着しました。この基板、面白いことにチップ型のコンデンサなどを取り付けられるパターンが2か所ありますので、これも利用しました。ただこのコンデンサを付けてしまうとブレッドボードで使うのには支障が出てくるので、場合によってはつけないほうが良いかもしれません。

簡単な開発用ボードを作ってみました。回路図は下記の通り。下側のコネクタはSPIのポートが引き出してあり、キャラクタLCDを接続できるようにしてみました。あとはブードローダ起動用のPGMボタン、リセットボタン、GPIO接続でプログラムから使えるBTN1, BTN2とLEDを接続しました。LEDの電流制限抵抗は大きめ(1KΩ)としたので、ちょっと暗めです。実際にはショートプラグを挟んでLEDを切り離せるようにしたので、もうちょっと低い抵抗値(200Ω程度)のほうがよかったかもしれません。

出来上がりはこんな感じ。

とりあえずLチカは動きました。
開発環境の作り方などは次回の記事で書きたいと思います。USBを使いこなそうとするとそれなりに知識が必要になりますが、単に安価なMCS51マイコンとしても充分実用になると感じました。1個40円程度と非常に安価ですし、マイコン好きな方は検討してみてはいかがでしょうか。