Skip to main content

Seeed Studio XIAO nRF54L15(Sense)の始め方

Seeed Studio XIAO nRF54L15Seeed Studio XIAO nRF54L15 Sense

はじめに

Seeed Studio XIAO nRF54L15は、最先端のNordic nRF54L15チップを搭載したコンパクトで高性能な開発ボードです。この次世代SoCは、128 MHz Arm® Cortex®-M33プロセッサと高度な電力管理用のArm® Cortex®-M0+を含むMCUと、超低消費電力マルチプロトコル2.4 GHz無線を統合しています。1.5 MB NVMと256 KB RAMまでのスケーラブルメモリを提供し、内蔵の超低消費電力設計によりバッテリー寿命を大幅に延長します。その強力な無線はBluetooth® 6.0(Channel Soundingを含む)、Matter、Thread、Zigbee、および4 Mbpsまでの高スループット2.4 GHz独自モードをサポートします。このボードには包括的なペリフェラルセット、統合された128 MHz RISC-Vコプロセッサ、および**TrustZone®**分離と暗号化エンジン保護などの高度なセキュリティ機能が含まれています。内蔵Li-ionバッテリー管理により、XIAO nRF54L15はスマートウェアラブル、産業用センサー、高度なHMIなどのコンパクトで安全かつエネルギー効率的なIoTソリューションに最適です。

仕様

項目XIAO nRF54L15XIAO nRF54L15 Sense
MCUArm Cortex-M33 128 MHz
RISC-Vコプロセッサ 128 MHz FLPR
Arm Cortex-M33 128 MHz
RISC-Vコプロセッサ 128 MHz FLPR
ワイヤレス接続

Bluetooth LE 6.0(Channel Soundingを含む)
NFC
Thread
Zigbee
Matter
Amazon Sidewalk
独自2.4 GHzプロトコル

Bluetooth LE 6.0(Channel Soundingを含む)
NFC
Thread
Zigbee
Matter
Amazon Sidewalk
独自2.4 GHzプロトコル

メモリNVM 1.5 MB + RAM256 KBNVM 1.5 MB + RAM256 KB
内蔵センサーN/A6軸IMU(LSM6DS3TR-C)
マイクロフォン (MSM261DGT006)
送信電力+8 dBm+8 dBm
受信感度-96 dBm-96 dBm
主要ペリフェラル14ビットADC、グローバルRTC14ビットADC、グローバルRTC
電源

USB Type-Cインターフェース電源供給
内蔵PMICがリチウムバッテリー電源供給をサポート
リチウムバッテリー電力収集をサポート

USB Type-Cインターフェース電源供給
内蔵PMICがリチウムバッテリー電源供給をサポート
リチウムバッテリー電力収集をサポート

動作温度-40 to 105°C-40 to 105°C
供給電圧範囲3.7 to 5 V3.7 to 5 V
ESBと2.4 GHz独自プロトコル最大4 Mbps最大4 Mbps
タンパー検出器YESYES
BluetoothチャネルサウンディングYESYES

特徴

  • 強力なCPU: DSP命令とFPU浮動小数点演算をサポートする128 MHz Arm® Cortex®-M33プロセッサ、32ビットRISCアーキテクチャ、統合128 MHz RISC-Vコプロセッサ。
  • 超低消費電力: 優れた超低消費電力設計により、バッテリー寿命を大幅に延長し、高度な電力管理を含みます。
  • マルチモードワイヤレス伝送: 統合2.4 GHzマルチプロトコルワイヤレストランシーバーは、Bluetooth Low Energy(Channel Soundingを含む)、802.15.4-2020、Matter、Thread、Zigbee、および2.4 GHz独自モード(最大4 Mbps)をサポートします。
  • 堅牢なセキュリティ: TrustZone®分離、タンパー検出、暗号化エンジン側のチャネルリーク保護を含む高度なセキュリティ機能。
  • 豊富なオンチップリソース: 最大1.5 MB NVMと256 KB RAMまでのスケーラブルメモリ構成により、十分なストレージスペースを提供します。
  • 豊富なインターフェース: 新しいグローバルRTC(System OFFモードで利用可能)、14ビットADC、高速シリアルインターフェースを含む包括的なペリフェラルセット。内蔵リチウムバッテリー管理。

ハードウェア概要

XIAO nRF54L15 前面図解
XIAO nRF54L15 背面図解
XIAO nRF54L15 ピンリスト

nRFConnect SDK使用方法

nRF Connect SDK(NCS)は、Nordic nRF52、nRF53、nRF54、nRF70、およびnRF91シリーズベースのワイヤレスデバイス向けの低消費電力ワイヤレスアプリケーション構築専用に設計された、Nordic Semiconductorの拡張可能で統一されたソフトウェア開発キットです。

NCSは、開発プロセスを簡素化し、市場投入時間を短縮するように設計された、すぐに使えるサンプルアプリケーション、プロトコルスタック、ライブラリ、ハードウェアドライバーの豊富なエコシステムを提供します。そのモジュラーで設定可能な性質により、開発者はメモリ制約のあるデバイス向けにサイズ最適化されたソフトウェアを構築する柔軟性と、より高度で複雑なアプリケーション向けの強力な機能を得ることができます。NCSはGitHubでホストされているオープンソースプロジェクトで、Visual Studio Codeなどの統合開発環境に対する優れたサポートを提供します。

VSCodeでnRF Connect SDKを使用する

nRF Connect SDK知識を事前にインストール

このドキュメントでは、Windows 11コンピューターにnRF Connect SDK開発環境をインストールする方法を詳しく説明します。以下は、インストールが必要なツールの概要です

ninja --version
  • CMake
cmake --version
  • Zephyr SDK
west --version
  • nRF Connect SDK
  • VSCode nRF Connectプラグイン コンピュータに事前にインストールされている場合は、以下のコマンドでツールのバージョン番号を確認できます
1
VSCodeでボードを設定し、書き込みファイルをビルドする

VS Codeを開き、プラグインセンターでnRF Connect for VS Code Extension Packを検索してください。このプラグインパックは、nRF Connectに必要な他のVS Codeプラグインを自動的にインストールします。


nRF Connect for VS Code拡張機能により、開発者は人気のVisual Studio Code統合開発環境(VS Code IDE)を利用して、NordicのnRF Connect SDK(Software Development Kit)に基づく組み込みアプリケーションの開発、ビルド、デバッグ、デプロイを行うことができます。この拡張機能には、コンパイラインターフェース、リンカー、完全なビルドシステム、RTOS対応デバッガー、nRF Connect SDKとのシームレスなインターフェース、デバイスツリー可視化エディター、統合シリアルターミナルなどの便利な開発ツールが含まれています。 VS Code用nRF Connect拡張パッケージには、以下のコンポーネントが含まれています:

  • nRF Connect for VS Code:メイン拡張機能で、ビルドシステムとnRF Connect SDKの間のインターフェース、およびnRF Connect SDKバージョンとツールチェーンを管理するインターフェースが含まれています。
  • nRF DeviceTree:デバイスツリー言語サポートとデバイスツリー可視化エディターを提供します。
  • nRF Kconfig:Kconfig言語サポートを提供します。
  • nRF Terminal:シリアルおよびRTTターミナル。
  • Microsoft C/C++:IntelliSenseの機能を含むC/C++言語サポートを追加します。
  • CMake:CMake言語サポート。
  • GNU Linker Mapping Files:リンカーマッピングファイルのサポート。 拡張機能を通じて、nRF Connect SDKとそのツールチェーンの任意の希望するバージョンをダウンロードできます。完全なnRF Connect for VS Codeドキュメントは https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/index.html で利用できます。
2
ツールチェーンのインストール

ツールチェーンは、アセンブラー、コンパイラー、リンカー、CMakeコンポーネントを含む、nRF Connect SDKアプリケーションをビルドするために連携して動作するツールのコレクションです。 nRF Connect for VS Codeを初めて開くと、ツールチェーンのインストールを求められます。これは通常、拡張機能がコンピュータにインストールされたツールチェーンを検出しない場合に発生します。 Install Toolchainをクリックすると、コンピュータにダウンロードしてインストールできるツールチェーンバージョンのリストが表示されます。使用予定のnRF Connect SDKのバージョンと一致するツールチェーンのバージョンを選択してください。常にnRF Connect SDKの最新のタグ付きバージョンを使用することをお勧めします。

デフォルトでは、nRF Connect for VS CodeはツールチェーンのReleasedタブ(つまり、安定版)のみを表示します。新機能を評価していて、PreviewタブまたはCustomer Sampling(-cs)などの他のタイプのタブを使用したい場合は、以下に示すように「Show all toolchain versions」をクリックしてください:

note

ここでのToolChainは3.0.1以上です

3
nRF Connect SDKのインストール

VS Code用nRF Connect拡張機能で、Manage SDKをクリックしてください。Manage SDKメニューから、nRF Connect SDKバージョンをインストールまたはアンインストールできます。拡張機能を初めて使用するため、インターフェースには2つのオプションのみが表示されます。

Install SDKをクリックすると、ローカルにダウンロードしてインストールできる利用可能なnRF Connect SDKバージョンがすべて一覧表示されます。プロジェクトの開発に必要なnRF Connect SDKのバージョンを選択してください。

VS CodeでSDKフォルダを開いている場合、Manage SDKメニューオプションの代わりに、Manage west workspaceが表示されます。この問題を解決するには、VS Codeで別のウィンドウまたはフォルダを開いてください。

note

ここでのnRF Connect SDKは3.0.1以上です

tip

これらのオプションのいずれも表示されない場合は、最新バージョンのnRF Connect for VS Code拡張パッケージがインストールされていることを確認してください。 nRF Connect SDKはIDE独立であることに注意することが重要です。つまり、任意のIDEを選択して使用するか、まったく使用しないかを選択できます。nRF Connect SDKは https://www.nordicsemi.com/Products/Development-tools/nRF-Util (nrfutil)コマンドラインインターフェース(CLI)を介して利用でき、nRF Connectをダウンロードしてインストールします。ただし、VS CodeでnRF Connect for VS Code拡張機能を使用することを強くお勧めします。これは、便利なグラフィカルユーザーインターフェース(GUI)と効率的なコマンドラインインターフェース(CLI)を統合するだけでなく、ファームウェア開発を大幅に簡素化する多くの機能も含んでいるためです。nRF Connect SDKで動作するように他のIDEを設定するには、このコースの範囲を超える追加の手動ステップが必要です。

4
ユーザープログラムの作成

この演習では、blinkyサンプルに基づいた簡単なアプリケーションを作成して、開発ボード上のLEDの点滅を制御します。これは、サポートされているすべてのNordicSemiconductor開発ボード(nRF54、nRF53、nRF52、nRF70、またはnRF91シリーズ)に適用されます。目標は、サンプルをビルドして書き込むために必要なすべてのツールが正しく設定されていることを確認することです。焦点は、「Copy Example」テンプレートを使用してアプリケーションを作成し、ビルドして、Nordic チップ開発ボードに書き込む方法を学ぶことです!

  • VS Codeで、nRF Connect拡張機能アイコンをクリックしてください。Welcomeビューで、Create New Applicationをクリックしてください。
  • 検索バーにblinkyと入力し、以下に示すように2番目のBlinkyサンプル(パス zephyr/samples/basic/blinky)を選択してください。

Blinkyサンプルは、開発ボード上のLED1を継続的に点滅させます。 最初のアプリケーションはBlinkyサンプルに基づいて作成されます。BlinkyサンプルはnRF Connect SDK内のZephyrモールドブロックから派生しているため、サンプルパスにzephyrという名前が表示されます:zephyr\samples\basic\blinky。

5
XIAO nRF54L15ボードの追加

開始するには、GitHubリンクからリポジトリをクローンしてくださいgit clone https://github.com/Seeed-Studio/platform-seeedboards.git を希望するローカルフォルダに。クローンしたら、platform-seeedboards/zephyr/ ディレクトリに移動してください。このzephyrフォルダのパスを覚えておいてください

VS CodeでnRF Connect用にボードを設定するには、以下の手順に従ってください:

  • VS Codeを開き、設定に移動してください。

  • 検索ボックスにnRF Connectと入力してください。

  • Board Roots設定項目を見つけて、settings.jsonの編集をクリックします。

  • ダウンロードしたXIAO nRF54L15ボードファイルのzephyrパスをboardRoots配列に追加します。

  • アプリケーションビューで、アプリケーション名の下にあるAdd Build Configurationをクリックします。

  • Board targetでXIAO nRF54L15のモデルを選択し、Base configuration filesでデフォルトのprj.configファイルを選択し、最後にGenerate and Buildをクリックしてファイルをビルドします。

6
書き込みプラグインのダウンロード

追加プラグイン:

WindowsではChocolateyパッケージマネージャーを使用してOpenOCDをインストールします。

1.PowerShellを開く(管理者として実行):

  • Windowsの検索バーで「PowerShell」と入力します。
  • 「Windows PowerShell」を右クリックして「管理者として実行」を選択します。

2.PowerShell実行ポリシーを確認:

  • Get-ExecutionPolicyと入力してEnterを押します。
  • Get-ExecutionPolicy -Listと入力してEnterを押します。

3.Chocolateyをインストール:

  • 以下のコマンドを貼り付けて実行します:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

このコマンドは現在のPowerShellセッションの実行ポリシーをバイパスしてChocolateyをインストールします。インストール後、PowerShellウィンドウを閉じて再度開いてください(管理者として実行)。

4.OpenOCDをインストール:

  • 新しいPowerShellウィンドウ(管理者として)で以下を入力します:
choco install openocd

5.OpenOCDインストールの確認:

  • Get-Command openocdと入力してEnterを押します。

  • インストールが成功した場合、このコマンドはopenocd.exeへのパスを表示します。

7
West Flash書き込みプログラム
  • nRFターミナルを開きます

  • west flashコマンドを入力するだけです。デバイスをフラッシュするには、単にwest flashコマンドを入力します。赤でハイライトされたパスは、コンパイルされた.elfファイルの場所を示しています。この同じパスを使用して対応する.hexファイルを見つけることができ、これはJ-Linkデバッガーでのプログラミングに適しています。

tip

west flashエラーが発生した場合、VS CodeのCMakeプラグインとの競合があることを意味し、CMakeプラグインを削除する必要があります。

Seeed Studio XIAO nRF54L15 Senseにプログラムを正常に書き込むと、ボード上のユーザーインジケーターが緑色に点滅し続けるのを確認できます。同じ効果が得られた場合、成功です!🎊

8
Blinkyプログラムの説明
/*
* Copyright (c) 2016 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <stdio.h>
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>

/* 1000 msec = 1 sec */
#define SLEEP_TIME_MS 1000

/* The devicetree node identifier for the "led0" alias. */
#define LED0_NODE DT_ALIAS(led0)

/*
* A build error on this line means your board is unsupported.
* See the sample documentation for information on how to fix this.
*/
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);

int main(void)
{
int ret;
bool led_state = true;

if (!gpio_is_ready_dt(&led)) {
return 0;
}

ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
if (ret < 0) {
return 0;
}

while (1) {
ret = gpio_pin_toggle_dt(&led);
if (ret < 0) {
return 0;
}

led_state = !led_state;
printf("LED state: %s\n", led_state ? "ON" : "OFF");
k_msleep(SLEEP_TIME_MS);
}
return 0;
}

LEDデバイス定義

  • #define LED0_NODE DT_ALIAS(led0):「led0」エイリアスのデバイスツリーノード識別子を取得し、LEDへのハードウェア非依存の参照を可能にします。
  • static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios):デバイスツリーノードを使用してGPIO仕様構造体(led)を作成し、LEDのハードウェア詳細(ピン、ポート)を含みます。ここでビルドエラーが発生した場合、サポートされていないハードウェアを示します。

main()関数の初期化

  • 変数設定

    • int ret:関数の戻り値を格納して操作の成功を確認します。
    • bool led_state = true:LED状態を追跡します(「ON」に初期化)。
  • GPIO準備確認

    • if (!gpio_is_ready_dt(&led)) { return 0; }:LEDのGPIOハードウェアが準備完了かを確認します(例:ドライバーがロードされている)。準備ができていない場合は終了します。
  • GPIO設定

    • ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE):LEDのGPIOピンをアクティブハイ出力として設定します。
    • 失敗時(ret < 0)は無効な操作を防ぐために終了します。

メインループ: 無限のwhile (1)ループで実行され、LEDを定期的に切り替えます:

  • LED状態の切り替え

    • ret = gpio_pin_toggle_dt(&led):LEDのGPIO出力を反転します(ON ↔ OFF)。失敗時は終了します。
  • 状態追跡の更新

    • led_state = !led_state:ソフトウェア状態フラグをハードウェア状態と同期します。
  • ログと遅延

    • printf("LED state: %s\n", led_state ? "ON" : "OFF"):シリアル出力を通じて現在のLED状態を印刷します。
    • k_msleep(SLEEP_TIME_MS):ZephyrのRTOS遅延関数を使用して1000ms(1秒)一時停止し、点滅頻度を制御します。
9
nRF Connect SDK内部の詳細解説

nRF Connect SDKの内部原理をより深く理解したい場合は、以下のコースを参照してください:

プログラム書き込み用J-Linkピンへのアクセス

JLinkを使用してプログラミングしたい場合は、以下の手順に従ってください。ただし、Seeed Studio XIAO nRF54L15ボードに内蔵されているシリアルポートを使用してプログラミングすることをお勧めします。これははるかに便利です。

必要なハードウェア

tip

nRF54L15モデルボードサポートを得るために、最新バージョンのJ-Linkをダウンロードする必要があります。

必要なソフトウェア

ウェブサイトからSeggerソフトウェアをダウンロードする必要があります。

  • ステップ 1. Jlinkを使用して以下のピンを接続します:

pir

  • ステップ 2. J-Flashを起動してnRF54L15_M33を検索し、新しいプロジェクトを作成します:

pir

  • ステップ 3. 「Target」をクリックして「Connect」を選択します。

pir

  • ステップ 4. binまたはhexファイルをソフトウェアにドラッグします。その後、F4とF5をその順序で押します。再フラッシュが完了します。

pir

バッテリー駆動ボード

XIAO nRF54L15には内蔵の電源管理チップがあり、バッテリーを使用してXIAO nRF54L15を独立して電源供給したり、XIAO nRF54L15のUSBポートを通じてバッテリーを充電したりできます。

XIAOにバッテリーを接続したい場合は、認定された充電式3.7Vリチウムバッテリーの購入をお勧めします。バッテリーをはんだ付けする際は、正極と負極の端子を注意深く区別してください。

XIAO nRF54L15 BLE Advertising Power Consumption

バッテリー接続回路図

バッテリー使用に関する注意事項:

  1. 仕様に適合する認定されたバッテリーを使用してください。
  2. バッテリー使用中でも、XIAOはデータケーブルでコンピューターデバイスに接続できます。XIAOには回路保護チップが内蔵されているため安全です。
  3. XIAO nRF54L15はバッテリー駆動時にはLEDが点灯しません(特定のプログラムを書いていない限り)。LEDの状態でXIAO nRF54L15が動作しているかどうかを判断せず、プログラムによって合理的に判断してください。

同時に、バッテリー充電用の赤色インジケーターライトを設計し、インジケーターライトの表示を通じて充電中のバッテリーの現在の状態をユーザーに知らせます。

caution

はんだ付け時に正極と負極をショートさせてバッテリーや機器を焼損させないよう注意してください。

バッテリー電圧検出

XIAO nRF54L15は、TPS22916CYFPRロードスイッチを使用してバッテリー電力測定を効率的に管理することを中心としたバッテリー電圧検出機能を統合しています。このガイドでは、バッテリー検出のソフトウェア実装の分析**(特にmain.cコード)**に焦点を当て、Zephyr NCS SDKの複雑さを避けて、PlatformIO環境でこの機能を簡単にデプロイして使用する方法をガイドします。

XIAO nRF54L15 BLE Advertising Power Consumption

バッテリー検出回路図

TPS22916CYFPRチップの機能:

  • オンデマンドでバッテリー電圧のオン・オフを制御するインテリジェント電源スイッチです。バッテリー電圧を測定する必要がある場合はオンになり、バッテリーを分圧回路に接続します。測定する必要がない場合はオフになり、接続を切断します。

  • この機能は何に役立つのでしょうか? このオンデマンドスイッチング機構により、チップは不要な電流消費を大幅に削減し、バッテリー寿命を効果的に延長します。後続の分圧回路とnRF54L15のADC(アナログ-デジタル変換器)と組み合わせることで、XIAO nRF54L15はバッテリーの残量を正確に監視でき、IoTデバイスなどのバッテリー駆動・低消費電力アプリケーションに重要な範囲最適化を提供します。

note

以下のサンプルコードはPlatformIO用に設計されていますが、nRF Connect SDKとも互換性があります。

PlatformIOでXIAO nRF54L15を使用する PlatformIOでXIAO nRF54L15を使用したい場合は、このチュートリアルを参照して設定してください:XIAO nRF54L15 PlatformIO設定


overlayの追加とconfファイルの変更

nRF Connect SDKでこのバッテリールーチンを使用したい場合は、app.overlayを追加し、prj.confファイルを変更する必要があります。

  • プロジェクトディレクトリの下にapp.overlayという名前の新しいファイルを作成します。次に以下のコードを貼り付け、最後にCtrl + Sを押して保存します。

    • overlayファイルはハードウェア記述層を拡張し、デバイスツリーを通じて物理的なハードウェア接続をカスタマイズします。コードロジックを変更するのではなく、実際のハードウェアの詳細を宣言して、ドライバーが物理デバイスを正しく初期化できるようにします。

app.overlayコード
/ {
/*
* @brief Device Tree Overlay for XIAO nRF54L15
*
* This file customizes the base board device tree to configure
* peripherals for a specific application, including:
* - User-defined ADC channels
* - PWM-controlled LED
* - Buttons and a relay
* - E-paper display (UC8179) via SPI
* - OLED display (SSD1306) via I2C
*
* To switch between the two displays, simply uncomment one and comment
* out the other in the "chosen" node below.
*/

/************************************************************
* Aliases for easy access to devices in application code
************************************************************/
aliases {
pwm-led = &pwm0_led0;
sw1 = &xiao_button0;
relay0 = &xiao_relay0;
};

/************************************************************
* Display selection (choose one if multiple)
************************************************************/
chosen {
zephyr,display = &uc8179_7inch5_epaper_gdew075t7;
zephyr,display = &ssd1306_128x64;
};

/************************************************************
* PWM LED, Button, and Relay configuration
************************************************************/
pwm_leds {
compatible = "pwm-leds";
pwm0_led0: my_pwm_led {
// PWM channel 0 on PWM instance 20
// PWM_MSEC(20) sets a period of 20ms
pwms = <&pwm20 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>;
status = "okay";
};
};

buttons {
compatible = "gpio-keys";
xiao_button0: button_0 {
// Connect to the XIAO nRF54L15 pin D1
// GPIO_PULL_UP ensures the pin is high when the button is not pressed
// GPIO_ACTIVE_LOW means the button press drives the pin low
gpios = <&xiao_d 1 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
zephyr,code = <INPUT_KEY_0>;
};
};

relay {
compatible = "gpio-leds";
xiao_relay0: relay_0 {
// Connect to the XIAO nRF54L15 pin D0
gpios = <&xiao_d 0 GPIO_ACTIVE_HIGH>;
};
};

/************************************************************
* Local nodes that don't modify existing ones
************************************************************/
zephyr,user {
io-channels = <&adc 0>, <&adc 1>, <&adc 2>, <&adc 3>,
<&adc 4>, <&adc 5>, <&adc 6>, <&adc 7>;
};

// MIPI-DBI SPI interface for the E-paper display
mipi_dbi_xiao_epaper {
compatible = "zephyr,mipi-dbi-spi";
spi-dev = <&xiao_spi>;
// D3 pin for Data/Command control
dc-gpios = <&xiao_d 3 GPIO_ACTIVE_HIGH>;
// D0 pin for Reset
reset-gpios = <&xiao_d 0 GPIO_ACTIVE_LOW>;
write-only;
#address-cells = <1>;
#size-cells = <0>;

uc8179_7inch5_epaper_gdew075t7: uc8179@0 {
compatible = "gooddisplay,gdew075t7", "ultrachip,uc8179";
// Max SPI frequency for the display
mipi-max-frequency = <4000000>;
reg = <0>;
width = <800>;
height = <480>;
// D2 pin for Busy signal from the display
busy-gpios = <&xiao_d 2 GPIO_ACTIVE_LOW>;
softstart = [17 17 17 17];
full {
pwr = [07 07 3f 3f];
cdi = <07>;
tcon = <0x22>;
};
};
};
};

/************************************************************
* Device fragments (modifying nodes from the base board DTS)
************************************************************/
// PWM instance 20
&pwm20 {
status = "okay";
pinctrl-0 = <&pwm20_default>;
pinctrl-1 = <&pwm20_sleep>;
pinctrl-names = "default", "sleep";
};

// GPIO pin control
&pinctrl {
pwm20_default: pwm20_default {
group1 {
// Configure PWM channel 0 on P1.04 pin (Pin D0)
psels = <NRF_PSEL(PWM_OUT0, 1, 4)>;
};
};

pwm20_sleep: pwm20_sleep {
group1 {
psels = <NRF_PSEL(PWM_OUT0, 1, 4)>;
low-power-enable;
};
};
};

// PDM instance 20 for DMIC
dmic_dev: &pdm20 {
status = "okay";
};

// Power configuration
&pdm_imu_pwr {
/delete-property/ regulator-boot-on;
};

// UART instance 20
&uart20 {
current-speed = <921600>;
};

// SPI peripheral
&xiao_spi {
status = "okay";
// D1 pin for Chip Select
cs-gpios = <&xiao_d 1 GPIO_ACTIVE_LOW>;
};

// I2C peripheral
&xiao_i2c {
status = "okay";
zephyr,concat-buf-size = <2048>;

ssd1306_128x64: ssd1306@3c {
compatible = "solomon,ssd1306fb";
reg = <0x3c>;
width = <128>;
height = <64>;
segment-offset = <0>;
page-offset = <0>;
display-offset = <0>;
multiplex-ratio = <63>;
segment-remap;
com-invdir;
prechargep = <0x22>;
};
};
  • prj.confファイルに以下の内容を追加します
    • prj.confはZephyrプロジェクトのコア設定ファイルです。コンパイル時のソフトウェア機能選択のためにKconfigシステムによって管理されます。どのドライバー(ADC、ディスプレイ、Bluetoothなど)、ミドルウェア(LVGLなど)、システムサービス(ログ、メモリ管理など)をファームウェアに含めるかを決定し、それらの動作パラメータ(ログレベル、ヒープサイズなど)を設定します。最後にCtrl + Sを押して保存してください。

prj.confコード
# =========================================================
# Basic system configuration
# =========================================================
CONFIG_GPIO=y
CONFIG_I2C=y
CONFIG_ADC=y
CONFIG_ADC_ASYNC=y
CONFIG_PWM=y
CONFIG_SENSOR=y
CONFIG_INPUT=y

# =========================================================
# Power management
# =========================================================
CONFIG_PM_DEVICE=y
CONFIG_NRFX_POWER=y
CONFIG_POWEROFF=y
CONFIG_HWINFO=y
CONFIG_CRC=y

# =========================================================
# Serial port and console configuration
# =========================================================
CONFIG_SERIAL=y
CONFIG_CONSOLE=y
CONFIG_STDOUT_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_UART_ASYNC_API=y
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_UART_NRFX_UARTE_ENHANCED_RX=y
CONFIG_CBPRINTF_FP_SUPPORT=y

# =========================================================
# Log and Debugging
# =========================================================
CONFIG_LOG=y
CONFIG_LOG_PRINTK=y
CONFIG_LOG_MODE_IMMEDIATE=y
CONFIG_LOG_DEFAULT_LEVEL=3
CONFIG_PWM_LOG_LEVEL_DBG=y
CONFIG_PRINTK=y

# =========================================================
# Memory and Stack
# =========================================================
CONFIG_MAIN_STACK_SIZE=4096
CONFIG_HEAP_MEM_POOL_SIZE=16384
CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y

# =========================================================
# Bluetooth configuration
# =========================================================
CONFIG_BT=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_DEVICE_NAME="zephyr-ble"

# =========================================================
# Audio configuration
# =========================================================
CONFIG_AUDIO=y
CONFIG_AUDIO_DMIC=y

# =========================================================
# Display and Graphics
# =========================================================
CONFIG_DISPLAY=y
CONFIG_MIPI_DBI_SPI=y
CONFIG_SSD1306=y
CONFIG_CHARACTER_FRAMEBUFFER=y

# LVGL Graphics Library
CONFIG_LVGL=y
CONFIG_LV_Z_MEM_POOL_SIZE=49152
CONFIG_LV_Z_SHELL=y
CONFIG_LV_USE_MONKEY=y
CONFIG_LV_USE_LABEL=y
CONFIG_LV_COLOR_DEPTH_1=y
CONFIG_LV_FONT_MONTSERRAT_12=y
CONFIG_LV_FONT_MONTSERRAT_14=y
CONFIG_LV_FONT_MONTSERRAT_16=y
CONFIG_LV_FONT_MONTSERRAT_18=y
CONFIG_LV_FONT_MONTSERRAT_24=y
CONFIG_LV_USE_FONT_COMPRESSED=y

# =========================================================
# Shell configuration
# =========================================================
CONFIG_SHELL=y
CONFIG_SHELL_BACKEND_DUMMY=y

コアコード

#include <inttypes.h>
#include <stddef.h>
#include <stdint.h>
#include <zephyr/device.h>
#include <zephyr/devicetree.h>
#include <zephyr/drivers/regulator.h>
#include <zephyr/drivers/adc.h>
#include <zephyr/kernel.h>


#if !DT_NODE_EXISTS(DT_PATH(zephyr_user)) || \
!DT_NODE_HAS_PROP(DT_PATH(zephyr_user), io_channels)
#error "No suitable devicetree overlay specified"
#endif

#define DT_SPEC_AND_COMMA(node_id, prop, idx) \
ADC_DT_SPEC_GET_BY_IDX(node_id, idx),

/* Data of ADC io-channels specified in devicetree. */
static const struct adc_dt_spec adc_channels[] = {
DT_FOREACH_PROP_ELEM(DT_PATH(zephyr_user), io_channels,
DT_SPEC_AND_COMMA)};

static const struct device *const vbat_reg = DEVICE_DT_GET(DT_NODELABEL(vbat_pwr));

int main(void)
{
int err;
uint16_t buf;
int32_t val_mv;
struct adc_sequence sequence = {
.buffer = &buf,
/* buffer size in bytes, not number of samples */
.buffer_size = sizeof(buf),
};

regulator_enable(vbat_reg);
k_sleep(K_MSEC(100));

/* Configure channels individually prior to sampling. */
if (!adc_is_ready_dt(&adc_channels[7]))
{
printf("ADC controller device %s not ready\n", adc_channels[7].dev->name);
return 0;
}

err = adc_channel_setup_dt(&adc_channels[7]);
if (err < 0)
{
printf("Could not setup channel #7 (%d)\n", err);
return 0;
}

(void)adc_sequence_init_dt(&adc_channels[7], &sequence);

err = adc_read_dt(&adc_channels[7], &sequence);
if (err < 0)
{
printf("Could not read (%d)\n", err);
return 0;
}

/*
* If using differential mode, the 16 bit value
* in the ADC sample buffer should be a signed 2's
* complement value.
*/
if (adc_channels[7].channel_cfg.differential)
{
val_mv = (int32_t)((int16_t)buf);
}
else
{
val_mv = (int32_t)buf;
}
err = adc_raw_to_millivolts_dt(&adc_channels[7],
&val_mv);
/* conversion to mV may not be supported, skip if not */
if (err < 0)
{
printf(" value in mV not available\n");
}
else
{
printf("bat vol = %" PRId32 " mV\n", val_mv * 2);
}

regulator_disable(vbat_reg);
return 0;
}

リソース

Seeed Studio XIAO nRF54L15

Seeed Studio XIAO nRF54L15 Sense

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

弊社製品をお選びいただきありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。さまざまな好みやニーズに対応するため、複数のコミュニケーションチャネルを提供しています。

Loading Comments...