Zephyr RTOS を試そうとしていろいろ折れた話

# First Touch・・・?

Zephyr RTOS 触ってみようとして、あれこれハマった話。


Zephyr RTOS の特徴

- MS-Windows / OSX / Linux マルチプラットフォーム
- 様々なアーキテクチャに対応
- Nucreo なら概ね対応してるヨ!!
- 公式 getting_started が充実

ということでカンタンぽいな・・・と思って試してみたのだけれど・・・

# SDK 設定まで

かなりのボリュームのダウンロードが必要。ワークショップ会場の WiFi に影響が出てしまった。

ストレージも必要。
SDK のための環境構築に 2GBytes ぐらい。
SDK を展開していって 更に10数GBytes ぐらい。

空き容量の小さい PC を使っていて、空き領域が足りなくなってワークショップでは撃沈。




# Nucleo-H503RB をターゲットにして


![IMG_20241230_001303.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e109dc72-9633-cd27-f532-8cb573bd70bc.jpeg)

ターゲットボードはデバッガが使えるものを前提だそうで、無難ぽい Nucreo のうち新しいスタンダードだ、という情報から H503RB を選んできました。 SDK をインストールしてバイナリをビルドしてさあ書き込みというところで、どうにも書き込みができない・・・

そもそもボードが書き込みができる状態になっているのかな?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e15a75c1-e31f-1bdf-0394-66f35c5daf19.png)
まず最初にジャンパーがこのようになっているらしいのですが、これで上側のUSBコネクタに電源を供給してもLEDがマニュアル通りに点灯しない。


![IMG_20241230_001727.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e1ad9887-d911-d685-71de-34e0759a5dff.jpeg)

これは正常に動作している時の Nucreo-H503RBのLEDの位置と機能。

|LED|機能|点灯状態|
|:---:|:---:|:---: |
|LD1|オンボードSTLINK 通信状態|赤：待機／緑：通信成功／オレンジ：通信失敗／赤オレンジ点滅：USBエラー|
|LD2|GPIO PA5|ユーザLED High-緑/Low-消灯|
|LD3|パワー|STM32H5が5Vで動作していると緑|
|LD7|オンボードSTLINK 電源状態|緑：正常／オレンジ：オーバーロード／赤：過電流保護／赤点滅：エラー|

しかしながらこのように点灯せず、LD2が点灯しない。LD2はユーザLEDなので、購入時に入っているテストファームウェアがどうなっているのが正常なのか、そういったレベルの情報がなくてこんなところで苦労。

ボードが壊れたかな? と追加で購入しても同じ動作であれれ?

後から考えると、

> • If the Host is not able to provide the requested current, the enumeration fails. Therefore, the power switch
(U4) remains OFF and the MCU part including the extension board is not powered. As a consequence, the
green LED (LD3) remains turned OFF. In this case, it is mandatory to use an external power supply.

ということでUSBポートからの電源供給が弱かったのかも。

しかしながら実はそれ以外に、行き着いていなかったところに落とし穴があったらしい。

@Tolucky さんに Help! したら写真の実機を直接触っていただいたうえで、以下のようにしてファーム書き込みができたと教えていただきました。

> nucleo h503rb への書き込みには下記の追加インストールが必要でした@Windows
> https://www.st.com/ja/development-tools/stm32cubeprog.html
> linux もおそらく同様だと思います。

なるほどー、公式ドキュメントとか強い人の資料等だと既に揃っている前提があって、それを網羅しておかないといけないぽいですね。


これについては、もうちょっとアレコレ試してドキュメントを整備してみようと思います。



# micro:bit をターゲットにして



@610t(武藤 武士) さんの「nRF Connect SDK FundamentalsでZephyrを試してみる: micro:bit編」において、 micro:bit に J-link のファームを書き込んで Zephyr が試せるということで、追試してみました。

Zephyr 開発においてはデバッガが使えることが重要です。ST-Link がボードに搭載されており J-Link 化も可能な Nucreo が何かとカンタンかなと思っていました。しかしながら micro:bit も同じように J-Link 搭載化できるファームを書き込んで Zephyr を動かせる、ということで、それはめちゃめちゃありがたい。

micro:bit 2 はアプリケーションプロセッサとして Nordic nRF52833 USB インターフェースとして KL27Z が搭載されていて、 KL27Z を J-Link 化するということかな?

ということで秋月電子から購入してきました。


![IMG_20241230_010410.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/70144947-d30b-bb69-8989-6dde7274bca9.jpeg)

しかしながら、こちらも書き込みができない!? 

あれこれやっているうちに、 micro:bit V2.2 は J-Link化できないらしいということがわかった。

KL27Z が、V2.2で nRF52833 または nrf52820 となっていて J-Link 化ファームが対応できていないということらしかった。
確かに、ボードをよく見ると V2.21 と書いてあった。V2.21とは何だ? 全然情報が無い。トホホ。

![IMG_20241230_010431.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d68d638f-8d92-eaab-773b-b12a42ab4c8b.jpeg)

# あれこれ挫けた結果

結局お恥ずかしながらまだ Zephyr は全然動かせていない。
今回示した失敗は、いずれもわかってしまえばなあんだということだと思うのだけれど、わかるまでが大変。
そこらへんがわからずに人知れず挫折した勇者も多いのではないかと心配になってくる。
「やってみて、動いた」 および 「やってみて、ダメだった」レベルの、一見くだらない情報がもっとたくさん必要ではないか。

今後も、試した結果を報告していきます。