前回からの続きです。
このテーマを最初からご覧になる場合はこちらからどうぞ。
「Simplicity SDK 32-bit MCU Peripheral Examples」
前回まで、Silicon Labs社のマイコンと、その統合開発環境「Simplicity Studio」を見てきました。
…が、更に色々と使っていくうちに気が付きました。
めちゃくちゃクセが強い上に、情報が少ない!!
特に、普段から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
これには随分と助けられましたので、今回は、このサンプルプログラム群の使い方を私自身の備忘録を兼ねて紹介したいと思います。
サンプルプログラムのダウンロード
サンプルプログラムをダウンロードします。
このページはGitHubですので、Gitコマンドを使ってクローンしても良いですが、面倒くさい方は以下のようにZIPでダウンロードも可能です。
保存先は、どこでも構いません。
ただし、ZIPでダウンロードされる方は、当然ダウンロードが完了したら展開する必要があります。
この中には、あらゆるペリフェラル(マイコンの周辺機器)のサンプルプログラムが含まれており、かなりサイズの大きいディレクトリとなります。
ここから必要なサンプルプログラムのプロジェクトを「Simplicity Studio」を使って、ワークスペースにインポートすることになりますが、その前に…。
ワークスペースの確認
サンプルプログラムをインポートする前に、ワークスペースという概念を理解する必要があります。
前回「Simplicity Studio」で「empty」というプロジェクトを作りましたよね?
この「empty」プロジェクトのソースコードや設定ファイルなどは何処に保存されているのでしょう?
その答えが「ワークスペース」です。
デフォルトでは、以下のパスに存在しますので確認しておきましょう。
C:\Users\<ユーザー名>\SimplicityStudio\v5_workspace
前回の「empty」プロジェクトもここにありますね。
つまりプロジェクトのインポートとは、他のディレクトリにあるプロジェクトをこのワークスペースに取り込むことを意味します。
サンプルプログラムのインポート
まずは「Simpilicy Studio」を立ち上げましょう。
また、同時に評価ボードと作業用のパソコンをUSBで接続しておきましょう。
現在、左上の「Project Explorer」には「empty」プロジェクトが一つだけ表示されているはずです。
ダウンロードした(更に展開した)サンプルプログラム「Simplicity SDK 32-bit MCU Peripheral Examples」に含まれる多くのプロジェクト、そのうちの一つをインポートしてみましょう。
画面左上の「File」メニューから「import」をクリックします。
「Import Project」ダイアログが開きます。
インポートするプロジェクトが保存されているディレクトリを指定するために「Select a project to import:」コンボボックスの右側の「Browse...」ボタンをクリックします。
「フォルダーの選択」ダイアログが開きますので、ダウンロードしたサンプルプログラムの場所まで移動します。
GitHubからZIP形式でダウンロードした場合は、展開したディレクトリ名は「peripheral_examples_simplicity_sdk-main」になるでしょう。
更に、そのディレクトリの中から「series2」というディレクトリをダブルクリックします。
「series2」ディレクトリの中には、ペリフェラルの名前を持つ相当な数のディレクトリが格納されています。
今回は「gpio」ディレクトリをダブルクリック。
まだまだ潜ります。
「gpio」ディレクトリの中にも「gpio」を使用するいくつかのサンプルプログラムが格納されているようです。
ここでは、なるべくシンプルそうな「swith_led_interrupt」ディレクトリをダブルクリックです。
最後に「swith_led_interrupt」ディレクトリの中の「SimplicityStudio」ディレクトリを選択状態にしてから、ダイアログ右下の「フォルダーの選択」ボタンをクリックします。
「Import Project」ダイアログに戻ると中央のリストにたくさんのプロジェクトが表示されているはずです。
プロジェクト名を頼りに、今使っている評価ボードと、それに搭載されているマイコンの型番用に作られたプロジェクトを選択してください。
同じ型番がない場合は、なるべく近い型番を選択します。
この場合、プロジェクトによっては動作しない可能性がありますが、ほとんどの場合は大丈夫でしょう。
(私の評価ボードは「Z-Wave 800 Pro キット」なので、近い型番は「BRD4204D_EFR32ZG23_switch_led_interrupt~」というのを選択しました。)
プロジェクトを選択状態にしたらダイアログ下部の「Next >」ボタンをクリックしてください。
以下の表示に切り替わります。
ここでは、特に何もせず「Next >」ボタンをクリックです。
以下の表示に切り替わります。
ここでインポートするプロジェクトの名前を変更できますが、特に必要がなければ、そのままにしておいた方が無難かと。
「Finish」ボタンをクリックして、インポート終了です。
「Simpilicy Studio」に戻り、左上の「Project Explorer」に注目です。
元々あった「empty」プロジェクトに加え「BRD4204D_EFR32ZG23_switch_led_interrupt」が追加されていることが確認できます。
「ワークスペース」も確認しておきましょう。
ちゃんと「BRD4204D_EFR32ZG23_switch_led_interrupt」ディレクトリが追加されていますね。
C:\Users\<ユーザー名>\SimplicityStudio\v5_workspace
サンプルプログラムの書き込みと実行
インポートしたサンプルプログラムをターゲット上で走らせるためには、まずソースコードをコンパイルしなければなりません。
そのあとにコンパイルの結果生成されたバイナリをターゲットに転送、実行…となるわけですが、これらはたった一つの操作で完了します。
それは「Simpilicy Studio」上部に配置されている虫マークをクリックするだけです。
この時「Project Explorer」で「BRD4204D_EFR32ZG23_switch_led_interrupt」プロジェクトが選択状態になっていることが重要です。
もし「empty」プロジェクトが選択状態になっていると、上記の作業が「empty」プロジェクトに対して行われることになりますのでご注意を。
虫マークをクリック後に、以下のダイアログが表示されることがあります。
これは、現在パソコンに接続しているターゲットと、この「BRD4204D_EFR32ZG23_switch_led_interrupt」プロジェクトで設定されているターゲットが一致しない場合に表示されます。
まあ、多少の違い(フラッシュメモリの容量など)ならば問題ないはずなので「OK」ボタンをクリックです。
下のポップアップが表示された場合も同様の理由です。
勇気を出して「Yes」ボタンをクリック。
しばらくすると、コンパイルが始まり、それが終了するとターゲットにバイナリがダウンロードされます。
これらの作業が終了すると、以下のようにデバッガが起動し「main()」関数の先頭、すなわち「CHIP_Init();」の行でブレークがかかった状態になります。
ここからプログラムを実行したい場合は「Simpilicy Studio」上部に配置されている「▶」マークをクリックします。
どうやら、今回の「swith_led_interrupt」というサンプル・プログラムは、評価ボード上の2つのボタンを押下すると、それぞれに対応するLEDがトグルでON/OFFするという動作を行っているようです。
前回作った「empty」プロジェクトに似ていますが、ボタンの押下を割り込みで取っているところが大きな違いです。
うん、これで割り込みの使い方が理解できますね。
このように「Simplicity SDK 32-bit MCU Peripheral Examples」から目的のペリフェラルのサンプルプログラムをインポートし、その動きを見ることによって、SDKの使い方やマイコンの動作を深く理解することができます。
なお、プログラムを停止したい場合は「Simpilicy Studio」上部に配置されている「■」マークをクリックします。
プロジェクトファイルによるインポートの差異
さて、既にお気付きの方もいらっしゃると思いますが、今回のサンプルプログラム、前々回の「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」プロジェクトは、正しくインポートできました。
さて、プロジェクトのインポート方法を見てきました。
冒頭にも申し上げた通り、Silicon Labs社のマイコンは、そのペリフェラルの仕様も含め、たとえ安価な評価ボードが売られていたとしても、これはホビー向けではないなぁ~…という印象です。
色々、落とし穴も多過ぎる…。
今回ご紹介したサンプルプログラム「Simplicity SDK 32-bit MCU Peripheral Examples」の存在が唯一の救いです。
少ない手掛かりを頼りに地道にマイコンの動作を掌握していく…、これも組み込みソフトウェアの醍醐味ではあるのですが…。
まあ、使いこなせれば大きな自己満足にはなるかな!
遅ればせながら…。
明けましておめでとうございます。
今年も皆様にとって良い年になりますように!
戦争やら自然災害やら、今年こそは世の中、ちょっと落ち着いて欲しい…。
(あと、仕事も!)
そんな希望を抱きつつ。
今度こそ…<終わり>