前回からの続きです。
このテーマを最初からご覧になる場合はこちらからどうぞ。
「nRF Util」のコピー
前回までにNordic社の無線マイコンで「Zephyr」の開発を行うのに必要な「Visual Studio Code」を含む3つのアプリケーションをインストールしました。
更に「Visual Studio Code」に対しツールチェーンやSDKなどの拡張機能のインストールも完了しました。
さて、これで「Zephyr」を動かせる!…と思いきや、必要な手順がもう一つあります。
それはNordic社が提供する「nRF Util」なるもののダウンロードとコピーです。
以下のページにアクセスしてください。
https://www.nordicsemi.jp/tools/nrf-util/
このページを下の方までスクロールすると…あった!
ダウンロードのリンクがありますので、これをクリックします。
この「nRF Util」は、インストーラーではなく「nrfutil.exe」という実行形式でダウンロードされます。
ダウンロードページの説明によると、この「nrfutil.exe」をパスの通ったディレクトリにコピーしろ!…ということのようです。
これに従って、私は以下のディレクトリにコピーしました。
ここは、以前「μiTRONプログラマーがZephyrに挑戦! その2」の記事でインストールした「nRF Command Line Tools」のディレクトリです。
C:\Program Files\Nordic Semiconductor\nrf-command-line-tools\bin
ここなら「コマンドラインツール」って名乗っているのでパスは通っているはずだし、新しいディレクトリを作って「PATH」環境変数に追加するのイヤだったので。
では「nrfutil.exe」って何するものなの?ってことですが、ダウンロードページの説明を読む限りでは、すでにインストールした「nRF Command Line Tools」や「nRF Connect for Desktop」、さらには「Visual Studio Code」の拡張機能であるツールチェーンやSDKの範疇から漏れた細々とした機能をまとめたもの…のようですが。
なんというか、後付け感スゴい。
それこそ「nRF Command Line Tools」辺りに含めてくれれば手間が省けると思うのですが。
ともあれ、これが無いとこの先に進めないので仕方がありません。
そのうちNordic社も改善してくれるでしょう。
「nRF7002 Development Kit」の接続
いよいよ今回のターゲットである「nRF7002 Development Kit」とパソコンをUSBケーブルで接続します。
このボード、USB micro-Bポートが2つ実装されていますが、開発で使用するのは左側の中央に配置されている方のポートです。
パソコンと接続した時、ボードに実装されているLEDを確認してください。
何か所か光るはずなのですが、一個も光っていない場合はボード左下のスライドスイッチをON(外側にスライド)にしてください。
これで光ったでしょう?
パソコンが「nRF7002 Development Kit」を正しく認識すると、画面上に以下のエクスプローラが表示されます。
パソコンはボードを「JLINK」という名前のストレージデバイスとして認識しました。
この時デバイスマネージャーを見てみると「ポート(COMとLPT)」として「JLink CDC UART Port」が2つ(2つも!?)が認識されていることが確認できます。
どうやら接続は上手くいっているみたいですね。
初めてのZephyrプロジェクト
Zephyrの簡単なプロジェクトを作成して、動かしてみましょう。
まずは「Visual Studio Code」を立ち上げましょう。
次に画面左端のアイコンが並んでいるところ、その中の四角いアイコン(「nRF Connect」)をクリックします。
画面左端の各項目が以下のように変化したはずです。
その中で、一番下にある「CONNECTED DEVICES」という表示をクリックして展開します。
すると何やら数列が出てきました。
これは、接続した「nRF7002 Development Kit」のシリアルナンバーのようなものと考えてください。
そしてコイツを更にクリックします。
以下のように展開されましたか?
この中で「VCOMx」というのは、シリアルポートの事で、デバイスマネージャーで確認したポート番号と一致していることを確認してください。
ここでも2つありますよね?
プロジェクトを作成しましょう。
画面左端の項目の中で「WELCOME」という表示があります。
その下に展開されている項目の中から「Create a new application」をクリックします。
すると画面上方のリストビューに「Create a blank application」という表示が現れますので、これをクリックです。
次に、画面上方のリストビューにこれから作成するプロジェクトの保存場所を入力できるようになります。
デフォルトでは「C:\Users\<ユーザー名>\untitled」と入力されていますので、今回はこのままで良いでしょう。
Enterキーを押下します。
確認のポップアップが表示されます。
「Open」ボタンをクリックしましょう。
以下の警告も「はい、作成者を信頼します」ボタンをクリックでOKです。
これでプロジェクトはちゃんと作成されたのか?
画面上方のリストビューには「untitled」という表示はされていますね?
画面左端の「フォルダー」アイコンをクリックして「untitled」ディレクトリの中を確認してみましょう。
すると「untitled」ディレクトリの中にいくつかのファイルの他、更に「src」というディレクトリがあるようです。
この中もクリックして展開してみましょう。
その中には自動生成された「main.c」がありました。
これをクリックすると「Visual Studio Code」のメインビューにソースコードが表示されます。
この「main.c」の「main()」関数が、Zephyrアプリケーションのエントリーになります。
自動生成されたままだと、すぐに「return 0;」となっていますね。
これでは面白くないので「main.c」を以下のように書き換えてみましょう。
まあ、大体何をやっているのかはお分かりになるかと…。
書き換えた後は、ファイルの保存も忘れずに!
- #include <zephyr/kernel.h>
- int main(void)
- {
- while (1) {
- /* VCOM1 にメッセージを出力 */
- printk("main_thread is running...\r\n");
- /* 一秒 (1000ms) 待つ */
- k_sleep(K_MSEC(1000));
- }
- return 0;
- }
続いて、このプロジェクトをコンパイルしてターゲットに書き込んで動かしてみましょう。
画面左端の「nRF Connect」アイコンをクリックしましょう。
画面左端の各項目が以下のように変化しますので、「APPLICATION」、「untitled」直下の「Add build configuration」という項目の左端の「+」部分をクリックしてください。。
すると「Visual Studio Code」のメインビューに「Add Build Configuration(untitled)」という画面が表示されます。
ここで、作成したプロジェクトをどのようにビルドするかの設定を行う訳ですね。
今回変更しなければならないのは「Board Target」です。
今回のターゲットは「nRF7002 Development Kit」ですので、それらしいのをコンボボックスから見つけます。
結果「nrf7002dk/nfr5340/cpuapp/ns」というのが良さそうです。
これをクリックして選択しましょう。
設定を反映するには「Add Build Configuration(untitled)」を一番下までスクロールして現れた「Genarate and Build」ボタンをクリックします。
これでビルドのコンフィギュレーションとアプリケーションのビルドが行われるのですが…これがエラい待たされます。
毎回これだとイヤになっちゃいますが、コンフィギュレーションにやたらと時間が掛かるのは最初だけですのでご安心を。
(とはいえ、通常のビルドも決して速くはないです…。)
とにかく、画面右下の経過表示が消えるまでは我慢です。
作業が終わるまでに「TeraTerm」などのターミナルソフトウェアを立ち上げておきましょう。
(「TeraTerm」のインストールの方法や使い方はこちらを参考にしてください。)
ポートは「CONNECTED DEVICES」項目の直下にあった「VCOM1」の番号を選択します。
(私の環境では「COM26」でしたね。)
ボーレートは「115200」に設定しておきます。
そうこうしている内にコンフィギュレーションとアプリケーションのビルドが無事完了したでしょうか?
これらが終わると「Visual Studio Code」のメインビューに表示されていた「Add Build Configuration(untitled)」と画面右下の経過表示も消えているはずです。
また、コンフィギュレーションの結果として、画面左端の項目の中に「ACTION」という表示が追加されています。
この直下の「Debug」という項目をクリックすると、ビルドしたアプリケーションがターゲットに転送され、それが実行されます。
しばらくしてデバッガが起動した後、以下の「cpu_idle.c」というファイルの「SLEEP_IF_ALLOWED()」マクロの行でブレークが掛かると思います。
ここはデバッグのツールバーから「▶」(続行)をクリックして、プログラムを先に進めましょう。
一方、立ち上げておいた「TeraTerm」を見てみましょう。
以下のように「main_thread is running...」という表示が一秒毎に表示されているでしょうか?
もし正しく表示されているなら目論見通り、大成功ですね!
Zephyrのプロジェクトの作成方法と、そのビルド/転送の一連の流れを紹介させていただきました。
次回は、本題の「zephyr_sample」を動かしてみましょう!
なんか…ZephyrってμiTRONと比べて、何をするんでもいちいち時間が掛かるという印象です。
<続く>