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

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 を起動します。

ヒント

nRF Connect SDK (NCS) のバージョンとツールチェーンのバージョンがどちらも 3.3.0 であることを必ず確認してください。異なるバージョンを混在させると、ビルドや互換性の問題が発生する可能性があります。

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

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

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

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

# Check ARM cross-compiler (Zephyr toolchain for Cortex-M) version
arm-zephyr-eabi-gcc --version
#arm-zephyr-eabi-gcc (Zephyr SDK 0.17.0) 12.2.0
#Copyright (C) 2022 Free Software Foundation, Inc.
#This is free software; see the source for copying conditions. There is NO
#warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

# Check OpenOCD (on-chip debugger & flasher via CMSIS-DAP) version
openocd --version
#Open On-Chip Debugger 0.12.0+dev-01514-g21fa2de70 (2024-02-07-19:03)
#Licensed under GNU GPL v2
#For bug reports, read
# http://openocd.org/doc/doxygen/bugs.html
  • 出力例を以下に示します。もしコンポーネントが不足している場合は、ツールチェーンを再インストールし、インストール中のネットワークが安定していることを確認してください。

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

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 で最初に作成した設定ファイルから生成されたものであり、build や build_1 など複数の設定フォルダが存在する場合は、設定パスを指定する必要があります。

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

結果を確認する​

FAQ​

Q1: nRF Connect SDK のダウンロードが非常に遅い、または途中で止まってしまう

SDK のダウンロードが非常に遅い、または途中で止まってしまう場合は、aria2 を使用して複数接続で必要なパッケージをダウンロードし、その後 nrfutil を使用して SDK をインストールできます。

ステップ 1. aria2 をインストールする

macOS の場合:

brew install aria2

Windows の場合:

winget install aria2.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...