0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

色々なボードでZephyrを動かしてみる

Last updated at Posted at 2025-01-13

この文章は、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が付いている機種では、このデモを最初に試すと良いでしょう。

blinkyデモをbuildする
$ west build -p always -b <ボード名> samples/basic/blinky

buttonデモ

buttonデモでは、オンボードのボタンを押すと、そのボタンに応じてオンボードのLEDが点滅するものになっています。

以下のコマンドで、実際にbuildが行われます。

buttonデモを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

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経由で行われます。

STM32F746G-DISCO flashの様子
% 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

Raspberry Pi Picoシリーズ(Zephyr 5 )は、Raspberry Pi財団が開発しているマイクロコントローラーRP2040RP2350を使って作ったコンパクトなボードです。

このボードには、ボタンが付いていなくて、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をファームウエア書き込みモードでコピーする必要があります。

Raspberry Pi Picoのファームウエア書き込み(macOS)
$ cp build/zephyr/zephyr.uf2 /Volumes/RPI-RP2

Arduino UNO R4 MINIMA

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 M5Stamp C3 Mate

M5StackファミリーのいくつかのボードもZephyrでサポートされているようです。
ただし、M5Stamp C3 Mate以外のボードはうまくbuildできない状況でした。

M5Stamp C3 Mate(Zephyr 8 )は、コンパクトなシリーズで、この機種には一つのボタンと一つのフルカラーLEDがついています。

ボード名は、stamp_c3です。

flashは標準的なESP32の書き込みツールであるesptool.pyを使って行われます。

Stamp C3のflash
$  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製品

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 をインストールしてください。

Wio Terminal
$ 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ができました。

WindowsでBOSSAで書き込む
$ west flash -r bossac --bossac="C:\Program Files (x86)\BOSSA\bossac.exe" --bossac-port="COM12"

macOSの場合は、デバイスが見つからず、flashすることができませんでした。原因は不明です。bossacを単体で動かしても同じエラーのため、bossac側の問題のように思えます。

macOSでBOSSAを使った場合
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を試してみませんか?

  1. https://docs.zephyrproject.org/latest/develop/getting_started/index.html

  2. https://docs.zephyrproject.org/latest/boards/index.html

  3. https://qiita.com/610t/items/65feb82e35db99568d25

  4. https://docs.zephyrproject.org/latest/boards/st/stm32f746g_disco/doc/index.html

  5. https://docs.zephyrproject.org/latest/boards/raspberrypi/rpi_pico/doc/index.html

  6. https://qiita.com/kazueda/items/b3783ea987b8056ccbba

  7. https://docs.zephyrproject.org/latest/boards/arduino/uno_r4/doc/index.html

  8. https://docs.zephyrproject.org/latest/boards/m5stack/stamp_c3/doc/index.html

  9. https://docs.zephyrproject.org/latest/boards/seeed/xiao_esp32c6/doc/index.html

  10. https://docs.zephyrproject.org/latest/boards/seeed/xiao_rp2040/doc/index.html

  11. https://docs.zephyrproject.org/latest/boards/seeed/xiao_ble/doc/index.html

  12. https://docs.zephyrproject.org/latest/boards/seeed/seeeduino_xiao/doc/index.html

  13. https://docs.zephyrproject.org/latest/boards/seeed/wio_terminal/doc/index.html

  14. https://www.shumatech.com/web/products/bossa

  15. https://docs.zephyrproject.org/latest/boards/adafruit/nrf52_adafruit_feather/doc/index.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?