この文章は、ZephyrRTOS Advent Calendar 2024の5日目のエントリとして書かれました。
はじめに
Zephyrをお試しする場合に、手元に解説されている記事のボードが無くて試せないなぁと考えている人は多いかと思います。
この記事では、手元のボードが対応しているかを調べる方法を紹介し、実際にいくつかのボードでZephyrを試してみます。
Zephyr開発環境の準備
Zephyr公式サイトのGetting Started Guide1で、各OS(Ubuntu(Linux), macOS, Windows)に対応したタブを選択して表示される手順で問題なく開発環境が構築できます。
というわけで、ここでは詳細は説明しません。
Zephyrのディレクトリ階層
Zephyrのディレクトリ階層の中で、今回のデモの動作に関連した部分に関して紹介します。
Zephyrのトップディレクトリを${ZEPHYR}
と仮定します。
ボード情報
対応ボードの一覧は、以下のコマンドで得ることができます。
今回の環境では、650ものボードがサポートされているようです。
$ west boards
...
esp32s2_lolin_mini
linum
w5500_evb_pico
xenvm
$ west boards|wc
650 650 9253
各種ボードの詳しい作業方法はSupported Boards and Shields 2 も参照してください。
ボードの情報は、${ZEPHYR}/zephyr/boards/
にメーカごとで分けられて配置されています。
例えば、STのボードは、${ZEPHYR}/zephyr/boards/st/
の下にあります。
同じように、micro:bitのボード定義は${ZEPHYR}/zephyr/boards/bbc/
にあり、M5Stackのボード定義は${ZEPHYR}/zephyr/boards/m5stack/
にあります。
このディレクトリ直下のボード毎のディレクトリに、ハードウエア定義のDevice Tree Source(DTS:*.dts
)やCmake用の定義board.cmake
などのbuildに必要な情報が配置されています。
今回使うSTM32F746G-DISCOの場合、${ZEPHYR}/zephyr/boards/st/stm32f746g_disco/
があるので、サポートされていると考えることができます。このディレクトリ名stm32f746g_disco
が、west
コマンドの-b
オプションに与えるボード名となります。
ただ、手元で確認したところ、M5Stackシリーズのstamp_c3
を除くボードはbuildがうまくいきませんでした。
このような、現在動かない状態のボードもそれなりの数あると思われます。
build生成物のディレクトリ
buildされた生成物は${ZEPHYR}/zephyr/build/zephyr/
に作成されます。
ここに、zephyr.bin
, zephyr.hex
, zephyr.elf
, zephyr.uf2
などの名称で、各種フォーマットのバイナリが生成されています。
これらのバイナリは、west build
が実行されるごとに上書きされますので、複数のボードで作業しているときには注意してください。
デモプログラムのディレクトリ
デモプログラムは、${ZEPHYR}/zephyr/samples/
(以下、${SAMPLES}
)の下に収められています。
-
${SAMPLES}/hello_world
:シリアルに"Hello World!"に続いて、ボード名を表示します。 -
${SAMPLES}/basic/
: 基本的なデモです。Lチカ(blinky
)やボタン操作(button
)などが含まれています。 -
${SAMPLES}/boards/
: ボードに特化したデモです。さらにメーカーごとに分けられており、例えばmicro:bitの場合は${SAMPLES}/boards/bbc/microbit/
に3つのデモ(display, sound, pong
)があります。
デモを実行する
ここでは、デモを実行してみます。
実際のbuild
実際のデモをbuildするためのコマンドラインは以下のようになります。
<ボード名>
に関しては、後述のボードの説明部分に書いてありますので、参考にしてください。
blinkyデモ
blinkyデモを動かす場合は、サンプルの名前をsamples/basic/blinky
とします。
ボタンがなく、LEDが付いている機種では、このデモを最初に試すと良いでしょう。
$ west build -p always -b <ボード名> samples/basic/blinky
buttonデモ
buttonデモでは、オンボードのボタンを押すと、そのボタンに応じてオンボードのLEDが点滅するものになっています。
以下のコマンドで、実際にbuildが行われます。
$ west build -p always -b <ボード名> samples/basic/button
完成したプログラムをflashする
完成したプログラムをボードに書き込む(flash)するには、以下のコマンドを使います。
ボードごとに適切な方法でプログラムが書き込まれます。
$ west flash
RP2040などのボードの場合は、ストレージとして見えて、そこにUF2形式のプログラムを書き込むものがあります。これらのボードでは、BOOTSELボタンを押しながらPCに接続して見えたストレージに、いつものように、build/zephyr/zephyr.uf2
を書き込むことでflashを行います。
今回試したボードたち
今回、手元にあった以下のようなボードを使って試してみました。
- STM32F746G-DISCO
- Raspberry Pi Pico
- Arduino UNO R4 MINIMA
- M5Stack Stamp C3
- Seeed Studio 製品(XIAOシリーズ, WioTerminal)
- Adafruit Feather nRF52840 Sense
これらのボードを選んだ理由は、偶然手元にあったからというだけで、深い意味はありません。
micro:bitに関しては、別記事「macOSでZephyrのmicro:bitデモを動かす 3 」を書いていますので、こちらをご覧ください。
結論:どのボードを使えばいいのか
最初に、今回試してみた結果、どのボードを使えばいいのかの結論から説明しておきます。
今回試したボードですが、buildはできてもflashの所でJ-LinkやCMSIS-DAPアダプターなどのハードウエアが必要なものも少なくありませんでした。
筆者はこれらのものを持っていないため、動作の確認を行うことができませんでした。
その中で、オンボードだけでflashまでできたものとしては、以下のボードがあります。
手軽に利用できる順に並べてあります。
- Raspberry Pi Pico/XIAO RP2040:UF2を手動でコピー
- micro:bit (v1.5, v2.0):J-Linkファームウエアを利用
- Wio Terminal:手動でコマンドラインの指定が必要
- STM32F746G-DISCO
順番としては最後に並べてありますが、STの製品はSTM32CubeProgrammerがすぐに使える開発ボードであれば、とても手軽に利用できると思います。
ボート選択の参考になれば幸いです。
STM32F746G-DISCO
STM32F746G-DISCO(Zephyr4 )は、写真のようなディスプレイのついた評価ボードです。
Ethernet用のRJ45ポートなどもあり、すぐにTCP/IP通信ができて魅力的です。
主な仕様は、以下の通りです。
- 価格: $55.13(直販)
- SoC: STM32F746NGH6
- Display: 4.3” RGB 480×272 LCD-TFT
- タッチパネル: 非マルチタッチ
- Built-in: ボタン
- インタフェース: RJ45, Audio, microSD, Arduino互換ピン, USB-microB x 2
ボード名は、stm32f746g_disco
です。
flashは、STM32CubeProgrammer経由で行われます。
% west flash
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner stm32cubeprogrammer
-------------------------------------------------------------------
STM32CubeProgrammer v2.15.0
-------------------------------------------------------------------
ST-LINK SN : 066EFF535748775187113829
ST-LINK FW : V2J45M30
Board : 32F746GDISCOVERY
Voltage : 3.22V
SWD freq : 4000 KHz
Connect mode: Under Reset
Reset mode : Hardware reset
Device ID : 0x449
Revision ID : Rev Z
Device name : STM32F74x/STM32F75x
Flash size : 1 MBytes
Device type : MCU
Device CPU : Cortex-M7
BL Version : 0x90
Debug in Low Power mode enabled
Memory Programming ...
Opening and parsing file: zephyr.hex
File : zephyr.hex
Size : 17.05 KB
Address : 0x08000000
Erasing memory corresponding to segment 0:
Erasing internal memory sector 0
Download in Progress:
[==================================================] 100%
File download complete
Time elapsed during download operation: 00:00:00.595
RUNNING Program ...
Address: : 0x8000000
Application is running, Please Hold on...
Start operation achieved successfully
Interfaceだったかトランジスタ技術だったかのプレゼントで当たりました。
Raspberry Pi Pico
Raspberry Pi Picoシリーズ(Zephyr 5 )は、Raspberry Pi財団が開発しているマイクロコントローラーRP2040やRP2350を使って作ったコンパクトなボードです。
このボードには、ボタンが付いていなくて、LEDだけになっています。
他のメーカーから出ているボードにはボタンが付いていたり他のLEDが付いていたりしますが、ボード定義がないので、簡単に使うのは難しいでしょう。
ボード名は、rpi_pico
です。
他にもW5500が付いたw5500_evb_pico
もサポートされているようです。
この記事では、RP2040搭載のRaspberry Pi Picoボードに関して取り扱っています。
RP2350搭載ボードでの利用例は、別記事「RP2350搭載のRaspberry pi pico2でZephyrOSのLチカ 6 」をご覧ください。
既に説明したように、Raspberry Pi Picoの場合はbuild/zephyr/zephyr.uf2
をファームウエア書き込みモードでコピーする必要があります。
$ cp build/zephyr/zephyr.uf2 /Volumes/RPI-RP2
Arduino UNO R4 MINIMA
Arduino UNO R4 Minima(Zephyr 7 )は、最近提供が始まった最新バージョンのArduinoです。
ArduinoシリーズもZephyrのサポート対象で、色々なボードが対応されています。
Arduinoシリーズは、共通の拡張ボードが利用できるのが魅力的だと思います。
Arduino UNO R4 Minimaは、CMSIS-DAPアダプターがないとflashできないようになっています。
今回は、buildのみを試しています。
ボード名は、arduino_uno_r4_minima
です。
このボードは、ルネサスのセミナー受講を条件としたモニタープログラムでいただきました。
M5Stack M5Stamp C3 Mate
M5StackファミリーのいくつかのボードもZephyrでサポートされているようです。
ただし、M5Stamp C3 Mate以外のボードはうまくbuildできない状況でした。
M5Stamp C3 Mate(Zephyr 8 )は、コンパクトなシリーズで、この機種には一つのボタンと一つのフルカラーLEDがついています。
ボード名は、stamp_c3
です。
flashは標準的なESP32の書き込みツールであるesptool.py
を使って行われます。
$ west flash
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner esp32
-- runners.esp32: reset after flashing requested
-- runners.esp32: Flashing esp32 chip on None (921600bps)
esptool.py v4.7.0
Found 3 serial ports
Serial port /dev/cu.wchusbserial53190069071
Connecting....
Detecting chip type... ESP32-C3
Chip is ESP32-C3 (QFN32) (revision v0.3)
Features: WiFi, BLE, Embedded Flash 4MB (XMC)
Crystal is 40MHz
MAC: 7c:df:a1:a5:34:e4
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash will be erased from 0x00000000 to 0x00020fff...
Wrote 147456 bytes at 0x00000000 in 2.3 seconds (519.0 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
Seeed Studio製品
Seeed Studioは、様々な開発用ボードなどを販売しています。
XIAOシリーズは、共通のコンパクトなフォームファクタ(18mm x 21mm)で、様々なSoC(SAMD, ESP32, nRF52840, RP2040など)の製品が提供されています。これらも、Zephyrでサポートされています。
更に、Wio Terminalもサポートされています。
ボード名は、以下の通りです。ここで紹介したボードは、少なくともbuildができる所まで確認しています。
各リンクは、Zephyrプロジェクトの解説に統一しています。
機種(Zephyr情報) | ボード名 | build | flash | 備考 |
---|---|---|---|---|
XIAO ESP32C6 9 | xiao_esp32c6 |
o | 不明 | 所有せず |
XIAO RP2040 10 | xiao_rp2040 |
o | o | flashはPicoと同じ方法 |
XIAO BLE(Sense) 11 (nRF52840) | xiao_ble |
o | 未確認 | J-Link必要 |
Seeeduino XIAO(SAMD21) 12 | seeeduino_xiao |
o | 未確認 | |
Wio Terminal 13 | wio_terminal |
o | x(macOS),△(Windows) | 手動flash |
Wio Terminalの場合
Wio Terminalの場合、FATAL ERROR: required program bossac not found; install it or add its location to PATH
というエラーが出るときは、追加でBOSSA 14 をインストールしてください。
$ west flash
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner bossac
There are multiple serial ports available on this system:
1. /dev/cu.usbmodem141101
2. /dev/cu.Bluetooth-Incoming-Port
Please select one (1-2, or EOF to exit): 1
FATAL ERROR: required program bossac not found; install it or add its location to PATH
Windowsの場合、BOSSAをインストールしてPATH
を設定しても、自動ではflashできませんでした。
以下のように、コマンドラインで指定することで、flashができました。
$ west flash -r bossac --bossac="C:\Program Files (x86)\BOSSA\bossac.exe" --bossac-port="COM12"
macOSの場合は、デバイスが見つからず、flashすることができませんでした。原因は不明です。bossac
を単体で動かしても同じエラーのため、bossac
側の問題のように思えます。
west flash
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner bossac
There are multiple serial ports available on this system:
1. /dev/cu.usbmodem141301
2. /dev/cu.Bluetooth-Incoming-Port
Please select one (1-2, or EOF to exit): 1
No device found on /dev/cu.usbmodem141301
FATAL ERROR: command exited with status 1: /usr/local/bin/bossac -p /dev/cu.usbmodem141301 -R -e -w -v -b /Users/mutoh/work/zephyrproject/zephyr/build/zephyr/zephyr.bin -o 16384
$ west flash -r bossac --bossac="bossac" --bossac-port="/dev/cu.usbmodem141301"
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner bossac
No device found on /dev/cu.usbmodem141301
FATAL ERROR: command exited with status 1: bossac -p /dev/cu.usbmodem141301 -R -e -w -v -b /Users/mutoh/work/zephyrproject/zephyr/build/zephyr/zephyr.bin -o 16384
$ bossac -e -w -v -b -i -p /dev/cu.usbmodem141301 build/zephyr/zephyr.bin
No device found on /dev/cu.usbmodem141301
Adafruit Feather nRF52840 Sense
Adafruit Feather nRF52840 Sense(Zephyr 15 )は、SoCにnRF52840を使ったボードで、色々なセンサー類がついているバージョンです。
ボード名は、nrf52_adafruit_feather
です。
このボードは、別途J-Linkアダプターが必要なため、今回はbuildのみを試しています。
おわりに
色々なボードでZephyrを試してみました。
あなたの所に対応ボードがあったら、一度Zephyrを試してみませんか?
-
https://docs.zephyrproject.org/latest/develop/getting_started/index.html ↩
-
https://docs.zephyrproject.org/latest/boards/st/stm32f746g_disco/doc/index.html ↩
-
https://docs.zephyrproject.org/latest/boards/raspberrypi/rpi_pico/doc/index.html ↩
-
https://docs.zephyrproject.org/latest/boards/arduino/uno_r4/doc/index.html ↩
-
https://docs.zephyrproject.org/latest/boards/m5stack/stamp_c3/doc/index.html ↩
-
https://docs.zephyrproject.org/latest/boards/seeed/xiao_esp32c6/doc/index.html ↩
-
https://docs.zephyrproject.org/latest/boards/seeed/xiao_rp2040/doc/index.html ↩
-
https://docs.zephyrproject.org/latest/boards/seeed/xiao_ble/doc/index.html ↩
-
https://docs.zephyrproject.org/latest/boards/seeed/seeeduino_xiao/doc/index.html ↩
-
https://docs.zephyrproject.org/latest/boards/seeed/wio_terminal/doc/index.html ↩
-
https://docs.zephyrproject.org/latest/boards/adafruit/nrf52_adafruit_feather/doc/index.html ↩