メインコンテンツまでスキップ

Seeed Studio XIAO nRF54LM20A Sense での NRF Connect SDK

はじめに

nRF Connect SDK (NCS) は、Zephyr RTOS リアルタイムオペレーティングシステム上に構築された、Nordic Semiconductor 公式のソフトウェア開発キットです。nRF シリーズチップ向けに、完全かつネイティブで高度に最適化された開発フレームワークを提供します。PlatformIO と比較して、NCS は Bluetooth Low Energy (BLE)、Thread、Matter などの無線プロトコルスタックのネイティブサポートに加え、よりきめ細かな電源管理やペリフェラル制御など、nRF54 シリーズのハードウェア機能全体へより広範なアクセスを開発者に提供します。Nordic が公式にこの SDK を継続的に保守・更新しており、チップファームウェアとの最適な互換性と、最新機能へのいち早いアクセスが保証されています。

このチュートリアルでは、nRF Connect SDK 開発環境のセットアップとツールチェーンのインストールから、最初のプロジェクトの作成と設定、そして最初のサンプルプログラムを XIAO nRF54LM20A Sense に書き込んで実行を確認するまで、一連のプロセスをステップバイステップで案内します。

NCS を使い始める

ハードウェアの準備

Seeed Studio XIAO nRF54LM20A Sense

VS Code をダウンロード

使用しているシステムに応じて VS Code をダウンロードします

nRF Connect for VS Code Extension Pack 拡張機能をインストール

  1. VS Code を開き、nRF Connect for VS Code Extension Pack を検索してインストールします。この拡張機能は、nRF Connect、Kconfig、DeviceTree など、完全なツールチェーンに必要なすべてのサブ拡張機能を自動的にインストールします。

  1. nRF Connect for VS Code Extension Pack は、以下の拡張機能を自動的にインストールします。

nRF Connect SDK とツールチェーンをインストール

  1. nRF Connect 拡張機能を開き、Install SDK を選択してから nRF Connect SDK を選びます。

  1. Pre-packaged SDKs & Toolchains リストから v3.3.0 を選択します。

ヒント

nRF Connect SDK v3.3.0 では、プリパッケージ版のインストールに SDK コードと対応するツールチェーンの両方が含まれています。ツールチェーンを別途インストールする必要はありません。

nRF Connect SDK はかなり大きいため、初回インストールには時間がかかります。インストール中はネットワーク接続を安定させ、失敗を避けてください。

環境の検証

インストールが完了すると、nRF Connect SDK の統合環境が自動的にセットアップされます。以降の開発をスムーズに進めるため、この段階で環境を検証することをお勧めします。

  1. nRF Connect SDK に組み込まれているターミナルである nRF Terminal を起動します。

  1. 必要なツールのバージョン情報を確認するためのコマンドを入力します。検証のため、以下のコマンドを 1 つずつコピーして実行できます。
# Check west (project manager & build entry) version
west --version

# Check CMake (build system generator) version
cmake --version

# Check Ninja (build executor) version
ninja --version

# Check Python (scripting runtime for west & Zephyr tools) version
python --version

# Check ARM cross-compiler (Zephyr toolchain for Cortex-M) version
arm-zephyr-eabi-gcc --version

# Check OpenOCD (on-chip debugger & flasher via CMSIS-DAP) version
openocd --version
  • 出力例を以下に示します。もしコンポーネントが不足している場合は、ツールチェーンを再インストールし、インストール中のネットワークが安定していることを確認してください。

カスタムボードパスを追加

XIAO nRF54LM20A シリーズのボード定義は、まだ公式の NCS リポジトリにマージされていないため、ボードパスを手動で追加する必要があります。

  1. 任意のディレクトリに platform-seeedboards リポジトリをクローンします。
git clone https://github.com/Seeed-Studio/platform-seeedboards.git

  1. VS Code の左下にある Settings を開きます。

  1. nRF Connect を検索し、Board Roots を編集して、パス ~\your_path\platform-seeedboards\zephyr を追加します。XIAO nRF54LM20A シリーズのボード定義はここに保存されています。

新しいアプリケーションを作成

このセクションでは、空のサンプルプロジェクトを編集します。

  1. 拡張機能内で Create a blank application を選択し、テンプレートを複製します。

  1. プロジェクト名を blinky とし、保存パスを選択します。

  1. 作成が完了したら、コピーされたプロジェクトを開きます。

  1. 既存の設定を削除します。このステップにより、次の段階で XIAO nRF54LM20A に関連する設定を行う際の干渉を取り除きます。(プロジェクトにビルドがない場合は、このステップをスキップして構いません)

Blinky プログラムを書く

XIAO nRF54LM20A シリーズはカスタマイズされた devicetree とハードウェアピンマッピングを備えているため、いくつかのファイルを変更する必要があります。編集するファイルは以下のとおりです。

  • main.c: アプリケーションロジックを含むメインプログラム。
  • app.overlay: ハードウェアペリフェラル設定用の devicetree オーバーレイファイル。
  • prj.conf: 必要な Zephyr モジュールを有効にするためのプロジェクト設定ファイル。

  1. main.c のコードを編集します
main.c

/*
* Copyright (c) 2016 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/drivers/pwm.h>
#include <nrfx_power.h>

#define PWM_PERIOD_NS 1000000U
#define STEP_TIME_MS 500

#define LED_R_NODE DT_ALIAS(pwm_led1)
#define LED_G_NODE DT_ALIAS(pwm_led2)
#define LED_B_NODE DT_ALIAS(pwm_led0)

#if !DT_NODE_EXISTS(LED_R_NODE) || !DT_NODE_EXISTS(LED_G_NODE) || !DT_NODE_EXISTS(LED_B_NODE)
#error "This RGB blink demo expects pwm-led0/pwm-led1/pwm-led2 devicetree aliases"
#endif

static const struct pwm_dt_spec led_r = PWM_DT_SPEC_GET(LED_R_NODE);
static const struct pwm_dt_spec led_g = PWM_DT_SPEC_GET(LED_G_NODE);
static const struct pwm_dt_spec led_b = PWM_DT_SPEC_GET(LED_B_NODE);

struct rgb_step {
uint8_t r;
uint8_t g;
uint8_t b;
uint32_t delay_ms;
};

static int pwm_set_u8(const struct pwm_dt_spec *led, uint8_t level)
{
uint32_t duty_ns = (PWM_PERIOD_NS * (uint32_t)level) / 255U;

return pwm_set_dt(led, PWM_PERIOD_NS, duty_ns);
}

static int rgb_set(uint8_t r, uint8_t g, uint8_t b)
{
int ret;

ret = pwm_set_u8(&led_r, r);
if (ret < 0) {
return ret;
}

ret = pwm_set_u8(&led_g, g);
if (ret < 0) {
return ret;
}

ret = pwm_set_u8(&led_b, b);
if (ret < 0) {
return ret;
}

return 0;
}

int main(void)
{
int ret;

#if defined(CONFIG_NRFX_POWER)
nrfx_power_constlat_mode_request();
#endif

if (!device_is_ready(led_r.dev) || !device_is_ready(led_g.dev) || !device_is_ready(led_b.dev)) {
return -1;
}

static const struct rgb_step demo[] = {
{ 255, 0, 0, STEP_TIME_MS },
{ 0, 255, 0, STEP_TIME_MS },
{ 0, 0, 255, STEP_TIME_MS },
{ 255, 255, 0, STEP_TIME_MS },
{ 0, 255, 255, STEP_TIME_MS },
{ 255, 0, 255, STEP_TIME_MS },
{ 255, 255, 255, STEP_TIME_MS },
{ 0, 0, 0, STEP_TIME_MS },
};

while (1) {
for (size_t i = 0; i < ARRAY_SIZE(demo); i++) {
ret = rgb_set(demo[i].r, demo[i].g, demo[i].b);
if (ret < 0) {
return ret;
}
k_msleep(demo[i].delay_ms);
}
}

return 0;
}
  1. xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay を追加します
  • blinky プロジェクトのルートディレクトリに board フォルダを作成します。src などのフォルダと同じ階層に配置します。

  • board フォルダ内にデバイスツリー・ファイル xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay を作成します。
xiao_nrf54lm20a_nrf54lm20a_cpuapp.overlay
/*
* Device tree overlay for XIAO nRF54LM20A RGB LED PWM demo.
*
* PWM20 peripheral is used for RGB LED control:
* - Channel 0: P1.22 (Blue LED) -> pwm_led0
* - Channel 1: P1.23 (Red LED) -> pwm_led1
* - Channel 2: P1.24 (Green LED) -> pwm_led2
*/

&pwm20 {
status = "okay";
};

/ {
pwmleds {
compatible = "pwm-leds";

pwm_led0: pwm_led_0 {
pwms = <&pwm20 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
label = "Blue LED";
};

pwm_led1: pwm_led_1 {
pwms = <&pwm20 1 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
label = "Red LED";
};

pwm_led2: pwm_led_2 {
pwms = <&pwm20 2 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
label = "Green LED";
};
};
};

/ {
aliases {
pwm-led0 = &pwm_led0;
pwm-led1 = &pwm_led1;
pwm-led2 = &pwm_led2;
};
};
  1. prj.conf ファイルを修正して、対応する設定を有効にします。
CONFIG_GPIO=y
CONFIG_PWM=y
CONFIG_SERIAL=n
  1. 拡張機能の APPLICATIONS セクションに移動し、Add build configuration を選択します。SDK とツールチェーンのバージョンを確認します。Board Target を xiao_nrf54lm20a/nrf54lm20a/cpuapp に設定し、ベース設定ファイルを prj.conf に設定します。ページを下にスクロールし、Generate and Build をクリックして対応する設定ファイルを生成します。

ヒント

ここで xiao_nrf54lm20a/nrf54lm20a/cpuapp が見つからない場合は、Add Custom Board Path セクションでパスが正しく追加されているか確認してください。

  1. ビルドが成功すると、ターミナルに次の情報が表示されます。

プログラムの書き込み

このセクションでは、nRF Connect SDK の west ツールを使用してプログラムを書き込みます。

  1. XIAO nRF54LM20A Sense を USB-C ケーブルで接続します。nRF Terminal を開き、west コマンドを入力してプログラムを書き込みます。
west flash

ヒント

書き込むファームウェアが Add build configuration で最初に作成した設定ファイルから生成されたものであり、buildbuild_1 など複数の設定フォルダが存在する場合は、設定パスを指定する必要があります。

# examples: west flash configgration build_1
west flash --build-dir build_1

結果を確認する

FAQ

SDK のダウンロードに時間がかかりすぎる場合は、比較的高速なダウンロード方法も提供しています。

  • ステップ 1: aria2 をインストールする
brew install aria2
  • ステップ 2: ダウンロードディレクトリを作成する
mkdir -p /opt/nordic/ncs/downloads
  • ステップ 3: Toolchain Bundle をダウンロードする
aria2c -c -x 16 -s 16 -k 1M --file-allocation=none \
-d /opt/nordic/ncs/downloads \
-o ncs-toolchain-aarch64-macos-0c0f19d91c.tar.gz \
"https://files.nordicsemi.cn/artifactory/NCS/external/bundles/v3/ncs-toolchain-aarch64-macos-0c0f19d91c.tar.gz"
  • ステップ 4: nRF Connect SDK Bundle をダウンロードする
aria2c -c -x 16 -s 16 -k 1M --file-allocation=none \
-d /opt/nordic/ncs/downloads \
-o sdk-nrf-bundle-v3.3.0.tar.gz \
"https://files.nordicsemi.cn/artifactory/ncs-src-mirror/external/sdk-nrf/v3.3.0/src.tar.gz"
  • ステップ 5: nRF Connect SDK v3.3.0 をインストールする
nrfutil sdk-manager install v3.3.0 \
--sdk-path /opt/nordic/ncs/v3.3.0 \
--type nrf

技術サポート & 製品ディスカッション

当社の製品をお選びいただきありがとうございます。私たちは、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに応じて選べる、複数のコミュニケーションチャネルをご用意しています。

Loading Comments...