ラベル Simplicity Studio の投稿を表示しています。 すべての投稿を表示
ラベル Simplicity Studio の投稿を表示しています。 すべての投稿を表示

2025年1月5日日曜日

Simplicity Studioを使ってみた! その4

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


「Simplicity SDK 32-bit MCU Peripheral Examples」

前回まで、Silicon Labs社のマイコンと、その統合開発環境「Simplicity Studio」を見てきました。

評価ボード - 1


…が、更に色々と使っていくうちに気が付きました。


めちゃくちゃクセが強い上に、情報が少ない!!


特に、普段からSTMicroやRenesasを使っていて、Silicon Labsに乗り換えた場合は特にそう思う方が多いと思います。

開発環境のクセの強さはまだ容認できるとして、問題は情報(ドキュメント)の方です。

まず、メーカーの公式のリファレンスは、マイコンの色々な機能を使う上で重要なことが全く書いていない…訳ではないものの、サラッと、さりげなく、目立つことなく、ゴニョゴニョ…といった感じです。

また、秋葉原で手軽に買えるような評価ボードが皆無であるため、STMicroやRenesasなどと比べてホビーで使用する人も少なく、ネットでの情報も極めて限られています。

(メーカーのユーザーフォーラムは役に立ちますが、聞かないと教えてくれないスタイル?)

こういったマイコンを使いこなす上で、もっとも重要なのはメーカーが提供しているSDKやライブラリの使い方です。

その点では、Silicon Labs社は、豊富でシンプルなサンプルプログラムを提供しており、我々哀れなエンジニアを救済して下さいます。

以下「Simplicity SDK 32-bit MCU Peripheral Examples」のリポジトリです。

(最新のSilicon Labs社製マイコン用のSDKは「Simplicity SDK」といいます。

少し前まで「Gecko SDK」というものもありましたが、これは今後「Simplicity SDK」に置き換えられていくものと思われます。)


https://github.com/SiliconLabs/peripheral_examples_simplicity_sdk

「Simplicity SDK 32-bit MCU Peripheral Examples」ページ - 1


これには随分と助けられましたので、今回は、このサンプルプログラム群の使い方を私自身の備忘録を兼ねて紹介したいと思います。


サンプルプログラムのダウンロード

サンプルプログラムをダウンロードします。

このページはGitHubですので、Gitコマンドを使ってクローンしても良いですが、面倒くさい方は以下のようにZIPでダウンロードも可能です。

「Simplicity SDK 32-bit MCU Peripheral Examples」ページ - 2


保存先は、どこでも構いません。

ただし、ZIPでダウンロードされる方は、当然ダウンロードが完了したら展開する必要があります。

この中には、あらゆるペリフェラル(マイコンの周辺機器)のサンプルプログラムが含まれており、かなりサイズの大きいディレクトリとなります。

ここから必要なサンプルプログラムのプロジェクトを「Simplicity Studio」を使って、ワークスペースにインポートすることになりますが、その前に…。


ワークスペースの確認

サンプルプログラムをインポートする前に、ワークスペースという概念を理解する必要があります。

前回「Simplicity Studio」で「empty」というプロジェクトを作りましたよね?

この「empty」プロジェクトのソースコードや設定ファイルなどは何処に保存されているのでしょう?

その答えが「ワークスペース」です。

デフォルトでは、以下のパスに存在しますので確認しておきましょう。


C:\Users\<ユーザー名>\SimplicityStudio\v5_workspace


前回の「empty」プロジェクトもここにありますね。

エクスプローラー - 1


つまりプロジェクトのインポートとは、他のディレクトリにあるプロジェクトをこのワークスペースに取り込むことを意味します。


サンプルプログラムのインポート

まずは「Simpilicy Studio」を立ち上げましょう。

また、同時に評価ボードと作業用のパソコンをUSBで接続しておきましょう。

現在、左上の「Project Explorer」には「empty」プロジェクトが一つだけ表示されているはずです。

「Simplicity Studio」 - 1


ダウンロードした(更に展開した)サンプルプログラム「Simplicity SDK 32-bit MCU Peripheral Examples」に含まれる多くのプロジェクト、そのうちの一つをインポートしてみましょう。

画面左上の「File」メニューから「import」をクリックします。

「Simplicity Studio」 - 2


「Import Project」ダイアログが開きます。

インポートするプロジェクトが保存されているディレクトリを指定するために「Select a project to import:」コンボボックスの右側の「Browse...」ボタンをクリックします。

「Import Project」ダイアログ - 1


「フォルダーの選択」ダイアログが開きますので、ダウンロードしたサンプルプログラムの場所まで移動します。

GitHubからZIP形式でダウンロードした場合は、展開したディレクトリ名は「peripheral_examples_simplicity_sdk-main」になるでしょう。

更に、そのディレクトリの中から「series2」というディレクトリをダブルクリックします。

「フォルダーの選択」ダイアログ - 1


「series2」ディレクトリの中には、ペリフェラルの名前を持つ相当な数のディレクトリが格納されています。

今回は「gpio」ディレクトリをダブルクリック。

「フォルダーの選択」ダイアログ - 2


まだまだ潜ります。

「gpio」ディレクトリの中にも「gpio」を使用するいくつかのサンプルプログラムが格納されているようです。

ここでは、なるべくシンプルそうな「swith_led_interrupt」ディレクトリをダブルクリックです。

「フォルダーの選択」ダイアログ - 3


最後に「swith_led_interrupt」ディレクトリの中の「SimplicityStudio」ディレクトリを選択状態にしてから、ダイアログ右下の「フォルダーの選択」ボタンをクリックします。

「フォルダーの選択」ダイアログ - 4


「Import Project」ダイアログに戻ると中央のリストにたくさんのプロジェクトが表示されているはずです。

プロジェクト名を頼りに、今使っている評価ボードと、それに搭載されているマイコンの型番用に作られたプロジェクトを選択してください。

同じ型番がない場合は、なるべく近い型番を選択します。

この場合、プロジェクトによっては動作しない可能性がありますが、ほとんどの場合は大丈夫でしょう。

(私の評価ボードは「Z-Wave 800 Pro キット」なので、近い型番は「BRD4204D_EFR32ZG23_switch_led_interrupt~」というのを選択しました。)

プロジェクトを選択状態にしたらダイアログ下部の「Next >」ボタンをクリックしてください。

「Import Project」ダイアログ - 2


以下の表示に切り替わります。

ここでは、特に何もせず「Next >」ボタンをクリックです。

「Import Project」ダイアログ - 3


以下の表示に切り替わります。

ここでインポートするプロジェクトの名前を変更できますが、特に必要がなければ、そのままにしておいた方が無難かと。

Finish」ボタンをクリックして、インポート終了です。

「Import Project」ダイアログ - 4


「Simpilicy Studio」に戻り、左上の「Project Explorer」に注目です。

元々あった「empty」プロジェクトに加え「BRD4204D_EFR32ZG23_switch_led_interrupt」が追加されていることが確認できます。

「Simplicity Studio」 - 3


「ワークスペース」も確認しておきましょう。

ちゃんと「BRD4204D_EFR32ZG23_switch_led_interrupt」ディレクトリが追加されていますね。


C:\Users\<ユーザー名>\SimplicityStudio\v5_workspace

エクスプローラー - 2


サンプルプログラムの書き込みと実行

インポートしたサンプルプログラムをターゲット上で走らせるためには、まずソースコードをコンパイルしなければなりません。

そのあとにコンパイルの結果生成されたバイナリをターゲットに転送、実行…となるわけですが、これらはたった一つの操作で完了します。

それは「Simpilicy Studio」上部に配置されている虫マークをクリックするだけです。

この時「Project Explorer」で「BRD4204D_EFR32ZG23_switch_led_interrupt」プロジェクトが選択状態になっていることが重要です。

もし「empty」プロジェクトが選択状態になっていると、上記の作業が「empty」プロジェクトに対して行われることになりますのでご注意を。

「Simplicity Studio」 - 4


虫マークをクリック後に、以下のダイアログが表示されることがあります。

これは、現在パソコンに接続しているターゲットと、この「BRD4204D_EFR32ZG23_switch_led_interrupt」プロジェクトで設定されているターゲットが一致しない場合に表示されます。

まあ、多少の違い(フラッシュメモリの容量など)ならば問題ないはずなので「OK」ボタンをクリックです。

「Device Selection」ダイアログ


下のポップアップが表示された場合も同様の理由です。

勇気を出して「Yes」ボタンをクリック。

「Connection issue」ポップアップ


しばらくすると、コンパイルが始まり、それが終了するとターゲットにバイナリがダウンロードされます。

これらの作業が終了すると、以下のようにデバッガが起動し「main()」関数の先頭、すなわち「CHIP_Init();」の行でブレークがかかった状態になります。

「Simplicity Studio」 - 5


ここからプログラムを実行したい場合は「Simpilicy Studio」上部に配置されている「▶」マークをクリックします。

「Simplicity Studio」 - 6


どうやら、今回の「swith_led_interrupt」というサンプル・プログラムは、評価ボード上の2つのボタンを押下すると、それぞれに対応するLEDがトグルでON/OFFするという動作を行っているようです。

前回作った「empty」プロジェクトに似ていますが、ボタンの押下を割り込みで取っているところが大きな違いです。

うん、これで割り込みの使い方が理解できますね。

評価ボード - 2


このように「Simplicity SDK 32-bit MCU Peripheral Examples」から目的のペリフェラルのサンプルプログラムをインポートし、その動きを見ることによって、SDKの使い方やマイコンの動作を深く理解することができます。


なお、プログラムを停止したい場合は「Simpilicy Studio」上部に配置されている「■」マークをクリックします。

「Simplicity Studio」 - 7


プロジェクトファイルによるインポートの差異

さて、既にお気付きの方もいらっしゃると思いますが、今回のサンプルプログラム、前々回の「New Project Wizard」を使用して作った場合のプロジェクトと内部のファイル構成が全然違うんです。

GUIによるマイコンのピン設定を行うための「~.pintool」ファイルもありません。

そもそも、プロジェクトファイル自体が「~.slsproj」という見慣れないもの。

「New Project Wizard」を使用して作った場合のプロジェクトファイルは「~.slcp」でした。

まあ「~.slsproj」が簡易版(あるいは旧式)であり「~.slcp」がその発展版(あるいは新式)と解釈すれば良いのですが、不安なのは「New Project Wizard」を使用して作った、すなわち「~.slcp」のプロジェクトも「~.slsproj」と同様にインポートできるのか?…ということです。


試しに、やってみました。


「ワークスペース」にある「~.slcp」プロジェクトである「empty」ディレクトリをどこか別のディレクトリにコピーします。

その上で、このコピーした「empty」ディレクトリをこれまでと同じ手順でインポートします。

すると「Import Project」ダイアログでプロジェクトファイルの存在するディレクトリを指定すれば「~.slcp」ファイルも正しく認識してくれました。

ただし、同時に「~.sls」という謎のファイルも表示されています。

結論から言えば「~.sls」は「Simplicity Studio」でプロジェクトをエクスポートした際に生成されるファイルです。

プロジェクトをディレクトリではなく1つのファイルとして出力してくれるので使い勝手が良いものです。

(Tarballみたいなものかな?)

しかし、今「empty」ディレクトリの中に「empty.sls」は見当たらないし、そもそも作ってもいない(エクスポートしていない)はずなのに、ここに表示されるなんて…かなりの違和感、とっても不思議。

ともあれ、どちらを選択しても「empty」プロジェクトは、正しくインポートできました。

「Import Project」ダイアログ - 5


さて、プロジェクトのインポート方法を見てきました。

冒頭にも申し上げた通り、Silicon Labs社のマイコンは、そのペリフェラルの仕様も含め、たとえ安価な評価ボードが売られていたとしても、これはホビー向けではないなぁ~…という印象です。

色々、落とし穴も多過ぎる…。

今回ご紹介したサンプルプログラム「Simplicity SDK 32-bit MCU Peripheral Examples」の存在が唯一の救いです。

少ない手掛かりを頼りに地道にマイコンの動作を掌握していく…、これも組み込みソフトウェアの醍醐味ではあるのですが…。

まあ、使いこなせれば大きな自己満足にはなるかな!


遅ればせながら…。


明けましておめでとうございます。

今年も皆様にとって良い年になりますように!

戦争やら自然災害やら、今年こそは世の中、ちょっと落ち着いて欲しい…。

(あと、仕事も!)

そんな希望を抱きつつ。


今度こそ…<終わり>

2024年12月8日日曜日

Simplicity Studioを使ってみた! その3

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


「Simplicity Studio」でプログラミング

インストールしたSilicon Labs社のマイコン用の統合開発環境「Simplicity Studio」で、テストプログラムを動かしてみましょう。

前回は、そのテストプログラムのためのプロジェクトを作りました。

その過程で、ターゲットボードで使用するハードウェアの設定と、それに使用するソフトウェア・コンポーネント(ドライバみたいなものですね!)を紐づけました。

これでコーディング作業に取り掛かる準備は万端です!

閉じてしまった方は「Simplicity Studio」を立ち上げましょう。

スプラッシュスクリーン


起動したら画面左上の「Project Explorer」タブに注目!

Simplicity Studio - 1


ここに前回作成した「empty」プロジェクトが表示されています。

プロジェクトに属しているファイルの一覧が表示されていない場合は「empty」という表示の先頭にある「V」マークをクリックして中身を展開しましょう。

さて、ある程度自動生成されているソースコードを見ていく訳ですが、今回使うのはC言語なので、一番最初に実行される関数は、多分「main()」。

なので、これが実装されているのは「main.c」かな?

…というわけで、ファイルの一覧から「main.c」をダブルクリックして、ソースコードを見てみましょう。

Simplicity Studio - 2


ソースコードを見てみると、やはりありましたよ「main()」。

コメントから推測するに、ユーザーのアプリケーションを実装するための関数は「app_init()」と「app_process_action()」のようですね。

まず「app_init()」は、ターゲットの起動時に一回だけ実行するべき処理を記述…。

その後、whileループの中にある「app_process_action()」に、アプリケーションの処理を記述すれば良さそうですね。

  • ...
  • int main(void)
  • {
  •   // Silicon Labsデバイス、システム、サービス、プロトコル スタックを初期化します。
  •   // カーネルが存在する場合、この呼び出しによって処理タスクが作成されることに
  •   // 注意してください。
  •   sl_system_init();

  •   // アプリケーションを初期化します。たとえば、カーネルが存在する場合は、
  •   // 周期タイマーまたはタスクを作成します。
  •   app_init();

  • #if defined(SL_CATALOG_KERNEL_PRESENT)
  •   // カーネルを起動します。app_init()で作成されたタスクが実行を開始します。
  •   sl_system_kernel_start();
  • #else // SL_CATALOG_KERNEL_PRESENT
  •   while (1) {
  •     // この呼び出しを削除しないでください: Silicon Labsコンポーネント・プロセス・アクション・ルーチンは、
  •     // スーパーループから呼び出す必要があります。
  •     sl_system_process_action();

  •     // アプリケーション・プロセス.
  •     app_process_action();

  • #if defined(SL_CATALOG_POWER_MANAGER_PRESENT)
  •     // システムが許可する場合は、CPUをスリープ状態にします。
  •     sl_power_manager_sleep();
  • #endif
  •   }
  • #endif // SL_CATALOG_KERNEL_PRESENT
  • }


では「app_init()」や「app_process_action()」は一体何処に存在するのか?

この「Simplicity Studio」も元となっているのは「Eclipse」ですので、同様の操作でソースコードから別のソースコードにある関数へジャンプできます。

すなわち、キーボードの「Ctrl」キーを押しながら、ジャンプしたい関数の記述にマウスカーソルを重ねれば、リンク状態となり、それをクリックすることで実際の関数の記述位置へジャンプすることができます。

Simplicity Studio - 3


ジャンプの結果「app_init()」と「app_process_action()」は共に「main.c」と同じディレクトリにある「app.c」であることが分かりました。

両方の関数は、今は空っぽの状態です。

ですので、この「app.c」に自分のプログラムを書いていけば良さそうです。


LEDとプッシュボタンとシリアル通信を使用した簡単なサンプルプログラムかぁ…。

こんなふうに作ってみました。

以下、実装した「app.c」のソースコードです。

  • /***************************************************************************//**
  •  * @file
  •  * @brief Top level application functions
  •  *******************************************************************************
  •  * # License
  •  * <b>Copyright 2020 Silicon Laboratories Inc. www.silabs.com</b>
  •  *******************************************************************************
  •  *
  •  * The licensor of this software is Silicon Laboratories Inc. Your use of this
  •  * software is governed by the terms of Silicon Labs Master Software License
  •  * Agreement (MSLA) available at
  •  * www.silabs.com/about-us/legal/master-software-license-agreement. This
  •  * software is distributed to you in Source Code format and is governed by the
  •  * sections of the MSLA applicable to Source Code.
  •  *
  •  ******************************************************************************/

  • #include "pin_config.h"
  • /*
  •  * これ以降は「autogen」ディレクトリ以下に生成されたコンポーネントのヘッダファイル
  •  * コンポーネント、ドライバの関数やインスタンスを使用するために必要
  •  */
  • #include "sl_simple_led_instances.h"
  • #include "sl_simple_button_instances.h"
  • #include "sl_uartdrv_instances.h"

  • /***************************************************************************//**
  •  * Initialize application.
  •  ******************************************************************************/
  • void app_init(void)
  • {
  •   /*
  •    * VCOM_ENABLEピンをHighにして仮想シリアルポートを有効化
  •    */
  •   GPIO_PinOutSet(VCOM_ENABLE_PORT, VCOM_ENABLE_PIN);
  • }

  • /***************************************************************************//**
  •  * App ticking function.
  •  ******************************************************************************/
  • void app_process_action(void)
  • {
  •   sl_button_state_t s;
  •   static sl_button_state_t st0 = 0;
  •   static sl_button_state_t st1 = 0;

  •   /*
  •    * プッシュボタン0(PB0)の処理
  •    */
  •   s = sl_button_btn0.get_state(&sl_button_btn0);
  •   if (st0 != s) {
  •     // 以前の状態から変化があった場合
  •     st0 = s;
  •     if (st0) { // 押されている
  •         // LED0を点灯
  •         sl_simple_led_turn_on(sl_led_led0.context);
  •         // PB0が押されたメッセージを送信
  •         UARTDRV_TransmitB(sl_uartdrv_usart_vcom_handle, (uint8_t*)"PB0 Pushed!\r\n", 13);
  •     } else { // 放されている
  •         // LED0を消灯
  •         sl_simple_led_turn_off(sl_led_led0.context);
  •         // PB0が放されたメッセージを送信
  •         UARTDRV_TransmitB(sl_uartdrv_usart_vcom_handle, (uint8_t*)"PB0 Released!\r\n", 15);
  •     }
  •   }

  •   /*
  •    * プッシュボタン1(PB1)の処理
  •    */
  •   s = sl_button_btn1.get_state(&sl_button_btn1);
  •   if (st1 != s) {
  •     // 以前の状態から変化があった場合
  •     st1 = s;
  •     if (st1) { // 押されている
  •         // LED1を点灯
  •         sl_simple_led_turn_on(sl_led_led1.context);
  •         // PB1が押されたメッセージを送信
  •         UARTDRV_TransmitB(sl_uartdrv_usart_vcom_handle, (uint8_t*)"PB1 Pushed!\r\n", 13);
  •     } else { // 放されている
  •         // LED1を消灯
  •         sl_simple_led_turn_off(sl_led_led1.context);
  •         // PB1が放されたメッセージを送信
  •         UARTDRV_TransmitB(sl_uartdrv_usart_vcom_handle, (uint8_t*)"PB1 Released!\r\n", 15);
  •     }
  •   }
  • }


このプログラムの内容は、プッシュボタン(0と1)を押したり放されたりするとLED(0と1)が点灯、または消灯し、シリアル通信で各々の場合にメッセージが送信されるといった内容になります。

気をつけなければならないのは「app_init()」関数の内容です。

USBを経由した仮想シリアルポートを使用する場合は「VCOM_ENABLE」という信号線をHighにしなければなりません。

前回出てきた以下の回路図を思い出してください。

今回の場合、ターゲット起動時に一回だけ処理しなければならない処理、すなわち「app_init()」関数に記述するべき内容は、これだけです。

VCOM_ENABLE信号


実行は、ターゲットをパソコンとUSBで接続し、編集した「app.c」を必ず保存してから「Simplicity Studio」左上の虫マークをクリックします。

これだけでビルド作業が開始され、デバッガが起動するはずです。

Simplicity Studio - 4


なにかワチャワチャ作業が始まりますが、やがて以下のように「sl_system_init()」関数の行で実行がストップします。

デフォルトの設定では、いきなりプログラムを開始するのではなくて、最初の行でデバッグが一時停止(ブレーク)するようになっているようです。

ここから「Resume」という操作を行えば、プログラムは再開されますが、せっかくなのでブレークポイントの仕掛け方も確認しておきましょう。

試しに、今回色々実装した「app_process_action()」関数で一時停止(ブレーク)するようにしてみます。

それには「app_process_action()」の行の先頭の部分、行番号の左側をダブルクリックします。

青い丸が表示されると、この行にブレークポイントが仕掛けられたことを意味します。

(解除は、同じくダブルクリックで青い丸を消せば可能です。)

Simplicity Studio - 5


ブレークポイントを仕掛けたら「Simplicity Studio」左上の「▶」マークをクリックします。

これで「Resume」という操作を行ったことになり、プログラムが再開されます。

Simplicity Studio - 6


しかし、すぐに「app_process_action()」の行まで処理が進み、以下のように再度一時停止(ブレーク)となります。

これで、ブレークポイントが正しく動作していることが確認できました。

尚、この行はwhileループの中にあります。

このままだと毎回止まってしまうので、必ずブレークポイントを解除しましょう!

解除してから、再度「▶」マークをクリックしてプログラムを再開させましょう。

Simplicity Studio - 7


今、ターゲット上では、今回作成したプログラムが動作しているはずです。

LEDの点灯は目視で分かりますが、シリアル通信の受信内容を見るためには「TeraTerm」などのターミナルソフトが必要です。

インストールしていない方は、このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトのデバッグ)の「TeraTermの導入」の項目を参考にしてください。

もちろん、シリアル通信のターミナルであれば、他のものもお使いいただけます。

ボーレートは「9600」です。


では、動きを見てみましょう!

プッシュボタン0(BTN0)を押すと、LED0が点灯し…

ターゲット - 1


…その瞬間に、ターミナルには「PB0 Pushed!」という表示が出力されます。

TeraTerm - 1


プッシュボタン0(BTN0)を放すと、LED0が消灯し…

ターゲット - 2


…その瞬間に、ターミナルには「PB0 Released!」という表示が出力されます。

TeraTerm - 2


プッシュボタン1(BTN1)とLED1の組み合わせも同様の動きになっています。

ターゲット - 3


TeraTerm - 3


どうやら、正しくプログラミングできているみたいです!

プログラムを停止するには「Simplicity Studio」左上の「■」マークをクリックします。

Simplicity Studio - 8


現在「Simplicity Studio」は「Debug」モードになっています。

プログラムの編集など、通常モードに戻すためには「Simplicity Studio」右上の「Simplicity IDE」ボタンをクリックし「Debug」から切り替えます。

再度デバッグを開始する際には、自動的に「Debug」モードに切り替わります。

Simplicity Studio - 9


Silicon Labs社の統合開発環境「Simplicity Studio」、若干クセはあるものの思った以上に使いやすい印象です。

マイコンのピンの機能をGUIで設定できて、その設定のソースコードへのエクスポート、デバイスドライバやコンポーネントの生成、更には雛形のプロジェクトまで吐き出してくれるとは…便利な時代となりましたね。

(マイコンのデータシートを隅から隅まで舐め回すように読み耽り、シリアル通信のドライバすら実装に一苦労していた時代は何だったのか…!?)

その点、STマイクロエレクトロニクス社の「STM32CubeIDE」や、ルネサスエレクトロニクス社の「e2 Studio」などと比較しても、通常の開発レベルでは遜色のない出来だと思います。


Silicon Labs社のマイコンは、各種無線に特化している魅力的なラインナップが揃ってます。

でも評価ボードはいたって高価で、マイコンの小売販売はしていないため、ホビー用途には使えないのが残念です。

秋葉原あたりで買える安価で手軽な評価ボード、どこかが作ってくれないかなぁ…。


<終わり>

まさかの…<続く>

2024年11月24日日曜日

Simplicity Studioを使ってみた! その2

前回からの続きです。


「Simplicity Studio」でのプロジェクト作成

インストールした「Simplicity Studio」の動作確認を兼ねて、簡単なプログラムを作ってターゲットを動かしてみましょう。

ターゲットは「Z-Wave 800 Pro キット」という評価ボードを使用することを前提として書いています。

ターゲット - 1


そのために、まずはプロジェクトの作成が必要です。

何はともあれ「Simplicity Studio」を起動させましょう。

Simplicity Studio - 1


画面左上のメニューから「File」→「New」→「Silicon Labs Project Wizard...」と順にクリックしていきましょう。

Simplicity Studio - 2


すると「New Project Wizard」というダイアログが表示されます。

ここでは、これから作成するプロジェクトのターゲット情報を設定するのですが、各項目、自動入力されていますね。

誤りがなければ、ダイアログ下部の「NEXT」ボタンをクリックしてください。

Simplicity Studio - 3


次の表示では、とりあえず「Empty C Project」を選択しましょう。

そして「NEXT」ボタンをクリック…。

Simplicity Studio - 4


次の表示では、プロジェクト名やその保存先を設定します。

しかし、デフォルトでプロジェクト名は「empty」と入力されていますので、このままでも良いです。

気になる方は、お好きな名前を。

プロジェクトの保存先においても、特別な事情がない限りはそのままで結構です。

ただし、SDKの扱いだけは「Copy contents」にラジオボタンを選択しています。

これを選択した方が、SDKのソースコードが作成するプロジェクト内にコピーされる仕組みとなるので、特に他人にプロジェクトを渡すときにトラブルが無さそうです。

ダイアログ下部の「FINISH」ボタンをクリックして「New Project Wizard」を終了させます。

Simplicity Studio - 5


これで「empty」という新しいプロジェクトが作成されたはず。

画面左上の「Project Explorer」に注目です。

Simplicity Studio - 6


このように、いくつかのディレクトリやファイルが「empty」プロジェクトのディレクトリ以下に生成されていることが分かります。

これらの中で「empty.pintool」というファイルをダブルクリックしてみてください。

Simplicity Studio - 7


すると「Simplicity Studio」のメインタブに、マイコンの絵とピンの機能を説明する表が現れました。

他のマイコンメーカーの統合開発環境と同じく、ここにピンの役割を設定してやって、ドライバーやミドルウェアをプロジェクトに追加していくのでしょう。

Simplicity Studio - 8


さて、今回は「Simplicity Studio」の味見と試運転が目的ですから、そんなに凝ったプログラムは書きません。

それでも、最低限のハードウェアの動きは見てみたいと思います。

(そうじゃなきゃツマンナイ。)

ターゲット上に用意されている、簡単に、且つ気軽に使えるハードウェアはどれかな~?

ターゲットのクイックスタートガイドをダウンロードし、一通り読んでみましょう。

まず、このターゲットには、LEDとプッシュボタンがそれぞれ2つずつ載ってるみたいですね。

回路図 - 1


実際にはこれらの場所…。

ターゲット - 2


加えて、シリアル通信も使えそうです。

これは、ターゲット上でUSBに変換されて、パソコンに差すとシリアルポートとして認識されるタイプです。

回路図 - 2


USB Cタイプのジャックはターゲットの左側にあります。

これは、デバッグポートも兼ねていますので、ケーブル一本でデバッグもシリアル通信もできてしまう親切設計ですね。

ターゲット - 3


これらを踏まえた上で「Simplicity Studio」上で、マイコンのピンに機能を割り振っていきましょう。


まずは、1つ目のLEDです。

上記の回路図から、これは「PB02」に接続されています。

ですので、「Simplicity Studio」のメインタブに現れた表の中から「PB02」の行を見つけて、これをダブルクリックします。

Simplicity Studio - 9


以下のような編集画面が表示されましたね。

ここに必要事項を設定していきましょう。

まずは一番上の「Function:」の欄、これはコンボボックスになっていますので、右端の「」マークをクリックです。

Simplicity Studio - 10


選択できる項目が表示されます。

LEDは、マイコンのGPIO(General Purpose Input/Output)という機能を使用しますので、ここでは「GPIO_mode」を選択します。

これにより「PB02」のピンはGPIOとして使用するように設定されたことになります。

Simplicity Studio - 11


次の「Custom Pin Name:」のテキストボックスは飛ばして…。

(せっかく入力しても、この後の操作でクリアされてしまうので。)

その下の「Please add a compatible component for the Function:」の欄のコンボボックスの右側の「NEW」というボタン…。

これをクリックします。

Simplicity Studio - 12


すると、以下のような画面に切り替わります。

ここでは、このピンに紐づけるドライバやミドルウェアなどのコンポーネント(これらを「SDK」と呼んでいます。)を選択します。

とはいえ、左側に表示されているように、これらの数は膨大です。

絞り込みのために画面上部の「Search keywords: component's name」の欄にキーワードを入力します。

Simplicity Studio - 13


キーワードは「LED」としましょう。

入力と同時に左側の選択肢も大分絞られたと思います。

Simplicity Studio - 14


絞られた選択肢の中から、今回は「Simple LED」というのを選びましょう。

「Simple」っていう名前に惹かれました!

左側の一覧で「Platform」→「Driver」→「LED」と展開していき、表示された「Simple LED」をクリックし、更に右側に表示された説明文の上の「Intsall」ボタンをクリックします。

Simplicity Studio - 15


以下のような確認画面が表示されます。

この「Simple LED」というコンポーネントを「led0」という名前でインスタンスを作成するけどいい?…って聞いています。

もちろん「Done」ボタンをクリックです。

Simplicity Studio - 16


無事にコンポーネントがインストールされて「led0」インスタンスが生成されると以下のような表示となります。

「Simplicity Studio」のメインタブを「empty.pintool」に切り替えましょう。

Simplicity Studio - 17


まずは「Please add a compatible component for the Function:」の欄のコンボボックスに「Simple LED」コンポーネントの「led0」インスタンスが選択されていることを確認してください。

正しければ「Custom Pin Name:」のテキストボックスに「PB02」の信号名を入力します。

上記の回路図では「UIF_LED0」という名前でしたね。

入力したら「APPLY AND CLOSE」ボタンをクリックします。

Simplicity Studio - 18


マイコンの絵とピンの機能を説明する表に戻ってきました!

「PB02」の行に、今までの設定の結果が表示されているはずですね。

これで1つ目のLEDの設定は完了です。

Simplicity Studio - 19


次に、2つ目のLEDです。

2つ目のLEDは「PD03」ピンを「UIF_LED1」という名前で「Function: GPIO_mode」と設定します。

1つ目のLEDの時の作業と同様ですが「Simple LED」コンポーネントのインスタンスを作成する時の操作が異なります。

この時点でコンポーネントは既にインストールされているため、今回は以下のように「Simple LED」コンポーネントの説明文の下部の「Add New Instances」ボタンをクリックします。

Simplicity Studio - 20


今回は「led1」という名前でインスタンスが作成されるようです。

Done」ボタンをクリックします。

Simplicity Studio - 21


メインタブを「empty.pintool」に切り替え「Custom Pin Name:」のテキストボックスに「PD03」の信号名を入力します。

上記の回路図では「UIF_LED1」という名前でしたね。

入力したら「APPLY AND CLOSE」ボタンをクリックします。

Simplicity Studio - 22


次に、2つのプッシュボタンの設定です。

作業はLEDのときとぼぼ一緒。

1つ目は「PB01」ピンを「UIF_PB0」という名前で「Function: GPIO_mode」…

2つ目は「PB03」ピンを「UIF_PB1」という名前で「Function: GPIO_mode」…

とそれぞれ設定すれば良いのですが、異なるのはコンポーネントの部分だけです。

LEDのときは「Simple LED」というコンポーネントでしたが、今回は「Simple Button」というコンポーネントを使います。

以下の通り、コンポーネントを検索するキーワードは「button」とでも入力すれば良いでしょう。

Simplicity Studio - 23


最後にシリアル通信の設定です。

上記の回路図では、5つのピンを使用することが分かります。

面倒くさいのですが、まずは「PA08」ピンを「VCOM_TX」という名前で「Function: USART0_TX」として設定していきます。

基本、今までと同様に作業していきますが、今回のコンポーネントは「UARTDRV USART」です。

検索キーワードは「uart」が良いでしょう。

Simplicity Studio - 24


今回は「vcom」という名前でインスタンスが作成されるようです。

Done」ボタンをクリックします。

Simplicity Studio - 25


メインタブを「empty.pintool」に切り替え「Custom Pin Name:」のテキストボックスに「PA08」の信号名「VCOM_TX」を入力し「APPLY AND CLOSE」ボタンをクリックします。

Simplicity Studio - 26


さて、残りのピンも設定しないと…と思ってピンの設定一覧表を見てみると…。

なんと!残りのピンのインスタンスも設定されているではないですか!?

どうやら、シリアル通信のような複数のピンを使用するコンポーネントを設定する場合、その中の一つでも設定された時点で残りのピンの設定も自動的に行われる仕組みのようです。

便利~。

ただし、ピンの名前「Custom Pin Name:」だけは空欄のままですので「VCOM_RX」、「VCOM_CTS」…などと、手動で入力してあげましょう。


最終的に、各ピンが以下のように設定できていればOKです。

(この表は各項目でソート可能で、以下は「Custom Pin Name」でソートした例。)

同時に左側のマイコンの絵のピンにも、設定内容が反映されていますね!

Simplicity Studio - 27


最後に「Simplicity Studio」の上部に配置されている「保存」ボタンをクリックして「empty.pintool」を保存しましょう。

面倒くさい作業だったので、設定が失われたら大変だ…。

Simplicity Studio - 28


ここまで、意外と手数が必要でしたね…。

他のマイコンメーカーのツールと比べて、ちょっと変わった操作感で戸惑うところはありましたが、慣れの問題でしょうね。

さて、これでいよいよコーディング作業に移ることができます。

長くなっちゃうので、次回…。


<続く>

Simplicity Studioを使ってみた! その4

前回からの続き です。 このテーマを最初からご覧になる場合は こちら からどうぞ。 「Simplicity SDK 32-bit MCU Peripheral Examples」 前回まで、Silicon Labs社のマイコンと、その統合開発環境「 Simplicity Stud...