Nordic Semiconductorの nRF54L15-DK 開発キットで開発を始めるために、LinuxにZephyrをインストールする手順を以下に示します。ターミナルで以下のコマンドを実行することでインストール手順の概要がわかります。
sudo apt update
sudo apt upgrade
sudo apt install --no-install-recommends git cmake ninja-build gperf ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk xz-utils file make gcc libsdl2-dev libmagic1
python3 -m venv venv
source venv/bin/activate
(venv) pip install west
(venv) west init zephyrproject
(venv) cd zephyrproject
(venv) west update
(venv) west zephyr-export
(venv) west packages pip --install
(venv) cd zephyr
(venv) west sdk install
Linux(x64)用に、このリンクからnrfutilをインストールしてください。ダウンロードしたら、権限を変更して実行します(sudo chmod 777 nrfutil)。バージョンを確認し、システム内のパス(.bashrc)に追加してください。
(venv) nrfutil self-upgrade
(venv) nrfutil install nrf5sdk-tools
(venv) sudo apt install libusb-1.0-0
(venv) nrfutil install sdk-manager
(venv) nrfutil install device
また、次のJLink_Linux_V864_x86_64.debをダウンロードしてインストールしてください。
nRF54L15-DK 開発キットをUSBケーブルでホストに接続します。これで、Zephyrディレクトリ内のZephyrフレームワークのサンプルの1つをビルドする準備が整いました。
(venv) /zephyr/zephyrproject/zephyr$ west build -p always -b nrf54l15dk/nrf54l15/cpuapp samples/basic/blinky_pwm
最後に実行ファイルを nRF54L15-DK 開発キットにダウンロードします。
(venv) /zephyr/zephyrproject/zephyr$ west flash
この時点で、LED 1がさまざまなデューティサイクルで点滅しているのが見えるはずです。
以下に示すように、ホスト側でUSBケーブル経由の出力を確認するために、minicomやその他のシリアルプログラムを使用できます。
*** Booting Zephyr OS build v4.2.0-2755-g258172992551 ***
PWM-based blinkyCalibrating for channel 0…[00:00:00.011,112]
pwm_nrfx: Prescaler for period_cycles 16000000 not fou.[00:00:00.019,327] pwm_nrfx: Prescaler for period_cycles 8000000 not foun.[00:00:00.027,465] pwm_nrfx: pwm_nrfx_set_cycles: channel 0, pulse 200000.Done calibrating; maximum/minimum periods 250000000/7812500 nsec[00:00:00.043,638]
pwm_nrfx: pwm_nrfx_set_cycles: channel 0, pulse 200000.Using period 250000000[00:00:04.056,244]
pwm_nrfx: pwm_nrfx_set_cycles: channel 0, pulse 100000.Using period 125000000[00:00:08.068,788]
pwm_nrfx: pwm_nrfx_set_cycles: channel 0, pulse 500000.Using period 62500000…
LinuxにおけるZephyrのインストール手順の説明を終え、nRF54L15-DK 開発キット向けに、LED1に適用されるパルス幅変調特性を変更するサンプルをビルドし、書き込みました。ソースコードの変更も可能です。
zephyrproject/zephyr/samples/basic/blinky_pwm/src/main.c
上記のビルドとフラッシュのプロセスを繰り返してください。
カーネルが正常に動作していることを示すシンプルなアプリケーションです。2つのスレッド(AとB)が交互にコンソールへウェルカムメッセージを出力し、スリープ要求とセマフォを用いてメッセージ生成のレートを制御します。これによりカーネルのスケジューリング処理、通信処理、タイミング処理が正常に機能していることを実証します。このサンプルをビルドするには、以下の手順を実行してください。
(venv) /zephyr/zephyrproject/zephyr$ west build -p always -b nrf54l15dk/nrf54l15/cpuapp samples/synchronization/
nRF54L15-DK 開発キットに書き込みます。
(venv) /zephyr/zephyrproject/zephyr$ west flash
別のターミナル画面のminicomでは以下のイベントが報告されるはずです。
*** Booting Zephyr OS build v4.2.0-2763-g5af3adf66fb3 ***
[00:00:00.002,883] <inf> bt_hci_core: HW Platform: Nordic Semiconductor (0x0002)
[00:00:00.002,896] <inf> bt_hci_core: HW Variant: nRF54Lx (0x0005)
[00:00:00.002,908] <inf> bt_hci_core: Firmware: Standard Bluetooth controller (0x00) Version 4.2 Build 99
[00:00:00.003,274] <inf> bt_hci_core: HCI transport: Controller
[00:00:00.003,323] <inf> bt_hci_core: Identity: F2:57:B1:05:95:C5 (random)
[00:00:00.003,337] <inf> bt_hci_core: HCI: version 5.4 (0x0d) revision 0x0000, manufacturer 0x05f1
[00:00:00.003,349] <inf> bt_hci_core: LMP: version 5.4 (0x0d) subver 0xffff
Bluetooth initialized
Advertising successfully started
*** Booting Zephyr OS build v4.2.0-2763-g5af3adf66fb3 ***
thread_a: Hello World from cpu 0 on nrf54l15dk!
thread_b: Hello World from cpu 0 on nrf54l15dk!
thread_a: Hello World from cpu 0 on nrf54l15dk!
thread_b: Hello World from cpu 0 on nrf54l15dk!
thread_a: Hello World from cpu 0 on nrf54l15dk!
thread_b: Hello World from cpu 0 on nrf54l15dk!
thread_a: Hello World from cpu 0 on nrf54l15dk!
thread_b: Hello World from cpu 0 on nrf54l15dk!
thread_a: Hello World from cpu 0 on nrf54l15dk!
対応するコードは以下のところにあります。
zephyrproject/zephyr/samples/synchronization/src/main.c
ビルドして書き込みできる別の例として、:c:func:K_THREAD_DEFINEを使用して複数のスレッドを生成する例があります。この例では3つのスレッドを生成します。 それぞれのスレッドは、K_THREAD_DEFINE を使用してコンパイル時に定義されます。
最初の2つはそれぞれ1つのLEDを制御します。これらのLED(led0 と led1)は
別々の関数によって制御されます。
blink0()はled0を制御し、100msのスリープサイクルを持つblink1()はled1を制御し、1000msのスリープサイクルを持つ
これらのスレッドのいずれかがLEDを反転させると、そのスレッド/LEDと反転回数を識別する情報をファーストインファーストアウト(FIFO):ref:FIFO <fifos_v2> に記録します。
3番目のスレッドは :c:func:printk を使用して、FIFOに追加された情報をデバイスのコンソールに出力します。この例は以下の手順でビルドできます。
(venv) /zephyr/zephyrproject/zephyr$ west build -p always -b nrf54l15dk/nrf54l15/cpuapp samples/basic/threads
最後に、nRF54L15-DK 開発キットに実行ファイルをダウンロードします。
(venv) /zephyr/zephyrproject/zephyr$ west flash
再度、minicomやその他のシリアルプログラムを使用して、以下のようにUSBケーブルを介してホスト側で出力結果を確認できます。
Welcome to minicom 2.9
OPTIONS: I18nPort /dev/ttyACM1, 00:16:08
Press CTRL-A Z for help on special keys
Toggled led0; counter=8
Toggled led0; counter=9
Toggled led1; counter=1
Toggled led0; counter=10
Toggled led0; counter=11
Toggled led0; counter=12
Toggled led0; counter=13
Toggled led0; counter=14
Toggled led0; counter=15
Toggled led0; counter=16
Toggled led0; counter=17
Toggled led0; counter=18
Toggled led0; counter=19
Toggled led1; counter=2
Toggled led0; counter=20
Toggled led0; counter=21
Toggled led0; counter=22
Toggled led0; counter=23
Toggled led0; counter=24
Toggled led0; counter=25
Toggled led0; counter=26
Toggled led0; counter=27
Toggled led0; counter=28
Toggled led0; counter=29
…
以下の動画は、nRF54L15-DK 開発キットからのminicomで以前に表示されたZephyrスレッドのLED0とLED1の点滅を示しています。
ソースコードを変更することができます。
zephyrproject/zephyr/samples/basic/threads/src/main.c
そして、上記のビルドと書き込みのプロセスを繰り返します。
もう1つの例は、割り込みを使ったGPIO入力の使い方を示すシンプルなボタンによるデモです。この例では、ボタン0が押されるたびにコンソールにメッセージが出力されます。
Welcome to minicom 2.9
OPTIONS: I18nPort /dev/ttyACM1, 00:27:52
Press CTRL-A Z for help on special keys
Button pressed at 673320
Button pressed at 1464286
Button pressed at 2446485
Button pressed at 6736908
Button pressed at 7425903
Button pressed at 8269811
Button pressed at 8398743
Button pressed at 8606173
Button pressed at 8725072
Button pressed at 9167836
Button pressed at 10183197
Button pressed at 10795567
Button pressed at 11698303
上記の入力ボタンの例は、以下のようにビルドし、書き込むことができます。
(venv) /zephyr/zephyrproject/zephyr$ west build -p always -b nrf54l15dk/nrf54l15/cpuapp samples/basic/button
(venv) /zephyr/zephyrproject/zephyr$ west flash
最後に、Zephyr HCI VSコマンドを介したBluetooth LEコントローラのLLにおける動的送信電力制御を説明する例を示します。このアプリケーションは、変動するRF送信電力によるペリフェラルアドバタイジングを実装しています。アプリケーション開始後最初の5秒間のアドバタイジング送信電力は、Kconfigで設定されたデフォルトの送信電力です。その後、ペリフェラル側の送信電力は、-4dBmから-30dBmの範囲で階段状に変化し、5秒ごとに送信電力レベルが減少します。接続が成功した場合、接続の受信信号強度インジケータ(RSSI:Receive Signal Strength Indicator)が監視され、接続ごとにペリフェラルデバイスの送信電力が調整されます。これにより、接続のRSSI強度に応じて電力が節約されます。このペリフェラルはシンプルなGATT(Generic attribute profile)通信を実装しており、接続されたセントラルデバイスに2秒ごとにダミーの心拍数を通知する心拍数サービスを提供します。以下は、そのビルド方法とフラッシュメモリへの書き込み方法です。
(venv) /zephyr/zephyrproject/zephyr$ west build -p always -b nrf54l15dk/nrf54l15/cpuapp samples/bluetooth/hci_pwr_ctrl/
(venv) /zephyr/zephyrproject/zephyr$ west flash
nRF54L15-DK 開発キットは、RF電力レベルの調整を以下のように表示します。
Welcome to minicom 2.9
OPTIONS: I18nPort /dev/ttyACM1, 00:42:21
Press CTRL-A Z for help on special keys
*** Booting Zephyr OS build v4.2.0-2763-g5af3adf66fb3 ***
Starting Dynamic Tx Power Beacon Demo
[00:00:00.002,504]
bt_hci_core: HW Platform: Nordic Semiconductor (0x0002)
[00:00:00.002,517] bt_hci_core:
HW Variant: nRF54Lx (0x0005)
[00:00:00.002,529] bt_hci_core:
Firmware: Standard Bluetooth controller (0x00) Version 4.2 Build 99
[00:00:00.002,748] bt_hci_core:
HCI transport: Controller
[00:00:00.002,797] bt_hci_core:
Identity: F2:57:B1:05:95:C5 (random)[00:00:00.002,811] bt_hci_core:
HCI: version 5.4 (0x0d) revision 0x0000, manufacturer 0x05f1
[00:00:00.002,824]
bt_hci_core: LMP: version 5.4 (0x0d) subver 0xffff
Bluetooth initialized
Dynamic Tx power Beacon started
Get Tx power level ->-> default
TXP = 24.
Set Tx power level to 4
Actual Tx Power: 4
Get Tx power level → TXP = 4
Set Tx power level to 0.
Actual Tx Power: 0
Get Tx power level → TXP = 0
Set Tx power level to -3.
Actual Tx Power: -3
Get Tx power level → TXP = -3
Set Tx power level to -8
Actual Tx Power: -8
この動的なRF電力制御のメカニズムについては、以下のところでソースコードを変更することができます。
zephyrproject/zephyr/samples/samples/bluetooth/hci_pwr_ctrl/src/main.c
この概要で、Zephyrのインストール手順と nRF54L15-DK 開発キットの機能を示すいくつかのデモについてご理解いただければ幸いです
また、nRF7002-DK 開発キットのビルドと書き込みプロセスの概要を説明した新しい投稿もここにあります。
良い一日を!
この投稿はスペイン語でも こちらからご覧いただけます。
Este post esta disponible en español aqui.
最新ニュース: Nordicはこの開発キット向けにベアメタルオプションを発表しました。デモと詳細はここにあります。