Seeed Studio XIAO nRF54LM20A Sense 入門ガイド

はじめに
Seeed Studio XIAO nRF54LM20A Sense は、Nordic Semiconductor 社の nRF54LM20A SoC を中心に構成された、コンパクトで超低消費電力のワイヤレス開発ボードです。128 MHz Arm Cortex-M33 プロセッサ、512 KB RAM、2 MB オンチップ NVM、マルチプロトコル 2.4 GHz ワイヤレス接続、オンボード IMU、デジタルマイク、8MB 外部フラッシュ、IPEX アンテナコネクタ、nPM1300 PMIC を備え、バッテリー駆動の高度な IoT、ウェアラブル、スマートセンシング、エッジ AI アプリケーションに対応します。
仕様
| 製品名 | Seeed Studio XIAO nRF54LM20A | Seeed Studio XIAO nRF54LM20A Sense |
|---|---|---|
| プロセッサ | Arm® Cortex®-M33 128 MHz & RISC-V 128 MHz コプロセッサ | |
| RAM | 512KB | |
| フラッシュ | 2 MB 不揮発性メモリ (NVM) | |
| 外部フラッシュ | 8MB オンボード外部フラッシュ | |
| PMIC / バッテリー | 電源制御およびバッテリー充電用 nPM1300 PMIC | |
| インターフェース | 28x GPIO ピン | |
| オンボード | 1x ユーザー LED (R/G/B 3 色) | 1x ユーザー LED (R/G/B 3 色) |
| ワイヤレス接続 | Bluetooth LE 6.0 (Channel Sounding を含む) | |
| 電源入力 | Type-C: 5V | |
| 低消費電力モード (3.7V@2A) | / | Light-Sleep: 約 9.96µA |
| ソフトウェア互換性 | Nordic nRF Connect SDK (Zephyr RTOS ベース) | |
| 動作温度 | -20°C ~ 70°C | |
| 寸法 | 21 x 17.8mm | |
特長
-
高度な接続性とセキュリティを備えた高性能 SoC
Seeed Studio XIAO nRF54LM20A Sense は、Nordic Semiconductor 社の nRF54LM20A SoC を搭載した、コンパクトで超低消費電力のワイヤレス開発ボードです。128 MHz Arm Cortex-M33 プロセッサ、512 KB RAM、2 MB オンチップ NVM、128 MHz RISC-V コプロセッサ、マルチプロトコル 2.4 GHz ワイヤレス接続、オンボード IMU、デジタルマイク、8MB 外部フラッシュ、IPEX アンテナコネクタ、Nordic nPM1300 PMIC による高効率な電源管理を備えています。Bluetooth LE、Bluetooth Channel Sounding、Bluetooth Mesh、Thread、Zigbee、Matter、最大 4 Mbps の独自 2.4 GHz プロトコルをサポートし、次世代のコネクテッド製品向けに設計されています。オンボードのモーションおよびオーディオセンサーにより、ウェアラブル、スマートセンシング、TinyML、ジェスチャ認識、音声トリガーデバイス、バッテリー駆動 IoT アプリケーションに最適です。
-
超低消費電力効率
Nordic nRF54LM20A と nPM1300 PMIC をベースとした XIAO nRF54LM20A Sense は、BAT 電源動作時にわずか 4.76 µA のディープスリープ電流を実測しています。nPM1300 PMIC と 0.33 µA の Ship Mode BAT 電流を組み合わせることで、アクティブなワイヤレス動作時でも、3.7 V の模擬バッテリー入力および TX 出力 +8 dBm 設定で平均電流 3.87 mA を記録し、長寿命バッテリー駆動のセンシングアプリケーション、ウェアラブル、常時接続の IoT デバイスに理想的です。
-
洗練された開発体験
Nordic nRF Connect SDK および PlatformIO (Zephyr) をフルサポートしており、効率的な組み込み開発ワークフローを実現します。(注: 現在 Arduino IDE には対応していません)
ハードウェア概要
- XIAO nRF54LM20A
- XIAO nRF54LM20A Sense
ピンマップ
| XIAO ピン | 機能 | チップピン | 説明 |
|---|---|---|---|
| 電源ピン | |||
| VBUS | VBUS | - | 5V 電源入力/出力 |
| GND | GND | - | グラウンド |
| 3V3 | 3V3-OUT | - | 3.3V 電源出力 |
| BAT+ | BAT+ | - | バッテリー入力 (I²C 経由で nPM1300 により監視) |
| BAT- | BAT- | - | バッテリーマイナス端子 |
| SHPHLD | SHPHLD | - | PMIC Ship/Hibernate モード制御(超低消費電力の出荷状態) |
| システム & 制御ピン | |||
| RESET | RESET | - | ボードリセット |
| SWCLK | SWCLK | nRF54LM20A SWCLK / SAMD11 SWCLK | シリアルワイヤクロック(nRF54 および SAMD11 用) |
| SWDIO | SWDIO | nRF54LM20A SWDIO / SAMD11 SWDIO | シリアルワイヤデータ(nRF54 および SAMD11 用) |
| SAMD11_RESET | RESET | SAMD11 RESET | SAMD11 コプロセッサリセット |
| ユーザー & LED ピン | |||
| - | USER_BUTTON | P0.09 | ユーザーボタン入力 |
| - | RGB-B | P1.23 | オンボード RGB LED 青チャンネル |
| - | RGB-G | P1.24 | オンボード RGB LED 緑チャンネル |
| - | RGB-R | P1.22 | オンボード RGB LED 赤チャンネル |
| アナログ入力 (ADC) ピン | |||
| A0 | AIN0 | P1.00 | アナログ入力 0 / GPIO |
| A1 | AIN1 | P1.31 | アナログ入力 1 / GPIO |
| A2 | AIN2 | P1.30 | アナログ入力 2 / GPIO |
| A3 | AIN3 | P1.29 | アナログ入力 3 / GPIO |
| A7 | AIN7 | P1.03 | アナログ入力 7 / GPIO |
| I2C ピン | |||
| SDA | I2C_SDA | P1.03 | I2C データライン (IMU および周辺機器) |
| SCL | I2C_SCL | P1.07 | I2C クロックライン (IMU および周辺機器) |
| - | BAT_SDA | P1.18 | バッテリーモニタ用 I2C SDA (nPM1300) |
| - | BAT_SCL | P1.17 | バッテリーモニタ用 I2C SCL (nPM1300) |
| UART ピン | |||
| TX | UART_TX | P1.08 | UART 送信 |
| RX | UART_RX | P1.09 | UART 受信 |
| SPI ピン | |||
| MOSI | SPI_MOSI | P1.06 | SPI マスタ出力・スレーブ入力 |
| MISO | SPI_MISO | P1.05 | SPI マスタ入力・スレーブ出力 |
| SCK | SPI_SCK | P1.04 | SPI シリアルクロック |
| オンボード周辺ピン | |||
| - | MIC_DAT | P1.14 | マイクデータライン |
| - | MIC_CLK | P1.13 | マイククロックライン |
| - | IMU_SDA | P0.08 | IMU I2C SDA (オンボード IMU) |
| - | IMU_SCL | P0.07 | IMU I2C SCL (オンボード IMU) |
| - | IMU_CS | P3.12 | IMU チップセレクト |
| - | IMU_INT1 | P0.06 | IMU 割り込み 1 |
| - | NFC | P1.02 / P1.01 | NFC アンテナピン |
| - | GRTC | P0.04 / P0.05 | 汎用 RTC ピン |
PlatformIO でのはじめ方
このセクションでは、RGB LED の多色点滅エフェクトを通して、XIAO nRF54LM20A を素早く使い始める方法を案内します。 以下のハードウェアおよびソフトウェアの準備を完了し、今後の開発に向けて XIAO をセットアップしてください。
ハードウェアの準備
次のものを用意してください:
- 1 x Seeed Studio XIAO nRF54LM20A Sense
- 1 x コンピュータ
- 1 x USB Type-C ケーブル
| Seeed Studio XIAO nRF54LM20A Sense |
|---|
![]() |
VS Code のダウンロード
使用しているシステムに応じて VS Code をダウンロードしてください。

PlatformIO 拡張機能のインストール
VS Code を開き、Extensions をクリックして PlatformIO を検索し、インストールを選択します。インストール完了後、VS Code を再起動します。

platform-seeedboards プラットフォームパッケージのインストール
Seeed Studio XIAO シリーズのボードはカスタム PlatformIO プラットフォームを使用しているため、対応するプラットフォームパッケージを手動でインストールする必要があります。
- 新規インストールの場合は、次のコマンドを実行します:
pio pkg install -g -p "https://github.com/Seeed-Studio/platform-seeedboards.git"

- 以前に PlatformIO で Seeed Studio XIAO シリーズのボードを使用したことがある場合は、以下のコマンドを実行して更新します:
pio pkg update -g -p "https://github.com/Seeed-Studio/platform-seeedboards.git"

既存の PlatformIO プロジェクトを使用したい場合は、platformio.ini の内容を次のように置き換えてください:
[env:seeed-xiao-nrf54lm20a]
platform = https://github.com/Seeed-Studio/platform-seeedboards.git
framework = zephyr
board = seeed-xiao-nrf54lm20a
新しいプロジェクトの作成
- PlatformIO 拡張機能を開き、Create New Project を選択します。

- プロジェクト名を設定し、開発ボード、フレームワーク、ファイルの保存パスを選択します。

- 作成が完了すると、ワークスペースを開くかどうかのプロンプトが表示されます。[OK] をクリックします。

- プロジェクトフォルダに移動します。カスタムパスを指定していない場合、ファイルはデフォルトディレクトリに保存されます。
- Windows のデフォルト:
<path>: C:\Users\your_name\Documents\PlatformIO\Projects
- Mac / Linux のデフォルト:
<path>: ~/Documents/PlatformIO/Projects

Blink プログラムの追加
このチュートリアルは Zephyr RTOS をベースに開発されています。プロジェクトは次の 3 つのコアファイルで構成されています:
main.c: アプリケーションロジックを含むメインプログラム。app.overlay: ハードウェア周辺機器の設定を行う Devicetree オーバーレイファイル。prj.conf: 必要な Zephyr モジュールを有効にするプロジェクト設定ファイル。

- 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;
}
- app.overlay ファイルを追加する
Devicetree オーバーレイファイルは、新しく作成した空のサンプルには存在しません。zephyr ディレクトリの下に追加する必要があります。

app.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;
};
};
prj.confを編集し、対応する設定を有効にします。
CONFIG_GPIO=y
CONFIG_PWM=y
CONFIG_SERIAL=n
プログラムのコンパイルと書き込み
以下では、コンパイルと書き込みの 2 つの方法を紹介します。
- ボタンからのコンパイル & 書き込み

- コマンドラインからのコンパイル & 書き込み
pio run -e seeed-xiao-nrf54lm20a -t upload -v

結果を確認する

Bluetooth アンテナ
このボードは外付け Bluetooth アンテナを使用します。より良い Bluetooth 信号品質を確保し、Bluetooth の使用体験を向上させるため、Bluetooth アンテナを取り付けることを推奨します。 接続方法は以下のとおりです:

バッテリーの使用
XIAO nRF54LM20A は、3.7V リチウムバッテリーを電源入力として使用することができます。配線方法については、以下の図を参照してください。

はんだ付けの際には、バッテリーや機器を焼損させないよう、正極と負極をショートさせないよう十分注意してください。 バッテリーに電力が残っている場合は、絶対にそのまま基板にはんだ付けしないでください。基板の回路が焼損するおそれがあります。通電中にショートさせることは重大なリスクを伴うため、アダプタの使用を推奨します。
バッテリー使用上の注意:
- 規格を満たした適切なバッテリーを使用してください。
- バッテリー使用中でも、XIAO はデータケーブルを介してコンピュータ機器に接続できます。XIAO には保護回路チップが内蔵されており、安全にご使用いただけます。
バッテリー電圧検出
XIAO nRF54LM20A は、nPM1300-CAA ロードスイッチを用いてバッテリー電力を効率的に計測するバッテリー電圧検出機能を統合しています。本ガイドでは、バッテリー検出のソフトウェア実装 (特に main.c コード) を中心に解析し、Zephyr NCS SDK の複雑さを回避しつつ、PlatformIO 環境でこの機能を簡単に展開・利用する方法を解説します。

バッテリー検出回路図
nPM1300-CAA チップの役割:
nPM1300-CAA は高集積の電源管理 IC(PMIC)であり、TPS22916 の単純なロードスイッチ機能を置き換えるものです。低消費電力でのモニタリングのためにバッテリー電圧の切り替えを制御するだけでなく、充電、レギュレーション、および(電圧・電流・温度による)高精度な燃料計測を統合し、nRF54LM20A のバッテリー寿命を最大化します。
以下のサンプルは PlatformIO と nRF Connect SDK の両方で動作します。PlatformIO ではそのまま使用できますが、SDK ではファイルを手動で追加する必要があります。詳しくはこのリンクを参照してください。
周辺回路の概要
このボードの周辺回路には IMU とマイクが含まれます。下図でそれぞれの位置を確認できます。

IMU
XIAO nRF54LM20A Sense には、3 軸加速度センサと 3 軸ジャイロスコープを備えた LSM6DS3TR-C IMU が搭載されています。
MIC
XIAO nRF54LM20A Sense には、音声取得用の MSM261DGT006 デジタルマイクが搭載されています。
FAQ
- 設定ファイルを変更した後のビルドエラー
以前にフル Zephyr プロジェクトをビルドしており、その後に設定ファイルを変更した場合は、再ビルドおよびアップロードの前にビルドキャッシュをクリーンすることを推奨します。これにより、古いまたは破損したキャッシュファイルが原因のコンパイルエラーを回避できます。
pio run -t clean // Clean command
- インストール後に「zsh: command not found: openocd」と表示される
ターミナルで直接「openocd」と入力した場合、シェルは PATH に含まれるディレクトリのみを検索します。ディレクトリがまだ追加されていないと、コマンドが見つからないというメッセージが表示されます。以下の手順に従って ~/.zshrc に永続的に追加してください。 この解決策は macOS ユーザー専用です。
echo 'export PATH="$HOME/Library/Application Support/Seeed/OpenOCD/tool-openocd/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
openocd --version
- 過去に Seeed Studio XIAO シリーズボードを複数回ダウンロードしており、現在 Platform プロジェクトのプルダウンが失敗する場合はどうすればよいですか?
再試行する前にクリーンアップすることを推奨します。PlatformIO のローカルパッケージ配下に重複した古い Seeed プラットフォームフォルダが蓄積されると、ファイル検索パスが過度に長くなり、バージョン競合が発生してプロジェクトの読み込みに失敗します。以下の手順に従って、冗長で混在したソースの Seeed プラットフォームディレクトリをクリーンアップし、PlatformIO によって自動的に取得される公式プラットフォームのみを残すことで、古く誤ったディレクトリによる競合を回避してください。 platform-seeed- および framework-seeed- で始まるすべてのフォルダを削除します。
rm -rf ~/.platformio/packages/platform-seeed-* ~/.platformio/packages/framework-seeed-*
リソース
Seeed Studio XIAO nRF54LM20A
ハードウェア設計
- 📄[データシート] Nordic nRF54LM20A データシート
- 📄[回路図] XIAO nRF54LM20A 回路図
- 🗃️[PCB 設計ファイル] XIAO nRF54LM20A KiCad プロジェクト
- 🗃️[PCB ライブラリ]
- 📄[ピン配置図]XIAO nRF54LM20A ピン配置シート
Seeed Studio XIAO nRF54LM20A Sense
ハードウェア設計
- 📄[データシート] Nordic nRF54LM20A データシート
- 📄[回路図] XIAO nRF54LM20A Sense 回路図
- 🗃️[PCB 設計ファイル] XIAO nRF54LM20A KiCad プロジェクト
- 🗃️[PCB ライブラリ]
- 📄[ピン配置図]XIAO nRF54LM20A Sense ピン配置シート
技術サポートと製品ディスカッション
弊社製品をお選びいただきありがとうございます。製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートをご用意しています。お好みやニーズに応じて選べる複数のコミュニケーションチャネルを提供しています。




