12日目です。まずい、ネタがない。ここまで続いてるだけでも十分それはそう。
今日は作ろうとしたけどできなかった話。
Raspberry Pi 4と5のワンタイムブート機能について
Raspberry Pi 4と5では、秋ごろにワンタイムブートメニュー機能が追加されました。普通のPCで言うところの、起動時にF11とかF12あたりを押した時にでてくるやつです。このブログでもすでに2回くらい取り上げてるやつです。
この機能を使えるようにするには、2024-10-10以降のEEPROMが適用されている必要がありますが、まだdefaultリリースはないので、raspi-configコマンドからlatestリリースに切り替えたうえでEEPROMをアップデートする必要があります。
使い方は簡単で、通電開始時にスペースキーを少し押しっぱなしにしているだけ。すると、こんなメニューがでてきます。
60秒の間に1, 2, 4, 6いずれかのキーを押せば、希望したストレージで起動できるというものです。時間を延長するにはスペースキーを押せば60秒にカウントが伸びます。また、0かESCキーを押せば、通常のブート順で起動をします。
使い道としては、普段はNVMeブートとかUSB-MSDブートが優先だけど、今日は別の環境のテストにSDカードから起動したい!みたいなときとかでしょうか。
ヘッドレスでやりたい
さて本題。先月のブログでも触れましたが、いちいちHDMIとキーボードを繋いでワンタイムブートメニューをやるのは面倒なので、それこそPicoでキーボードを作ったら、ワンタイムブース専用デバイスが作れそうだなと考えました。
こんな感じで、起動したらPicoがひとまずスペースキーを押してメニューを出してくれていて、3つのキーから(例えばSD、USB、NVMeを割り当てて)選んだら行けるぜ!みたいなやつですね。
かんたんやん……あれ?
というわけでキーボードデバイスをいつも通り作ればいいので、こいつをベースに、一旦スペースキーと、2(SD)と、6(NVMe)を割り当てました。
軽く動作テストをしたら、Pi 5につなぎ込んで電源オン、左のキーを押してメニューが出……ない!?
普通のキーボードでは当然スペースキーを拾いますが、Picoではキーボードとして認識しないようです。先のCircuitPythonスクリプトは、どうもコケているようで、PicoのLEDが点滅しています。スタックトレースを拾うすべを今のところ思いつかない(try〜exceptで拾ってファイルに吐く?)ですが、まあとにかくダメそうです。なんで〜ッ!
CircuitPythonの起動が遅いからという仮説をたてて、pico-sdkとtinyUSBを直接使ったプログラムも試してみましたが、こちらの場合でもデバイスを認識しないようでした。つまり、ブートローダーのファームウェアがRP2でできたHIDデバイスを認識できないということのようです。なんでやねん。
できなかった
というわけで、先月から構想して温めていた企みは一旦失敗となりました。たぶん、ブーストローダーのIssueにあげたら良いんでしょうけど、そこまでして作って常時利用したいものでもない気がして、面倒だなあと思っているところです。どうしたもんか。
追記
Pi5のUARTから得たログ。認識はするけどHIDデバイスとして見てもらえない。
6.19 USB2[2] 000206e1 connected 6.76 USB2[2] 00200603 connected enabled 6.77 USB2 root HUB port 2 init 6.96 DEV [01:00] 2.00 000000:02 class 0 VID 2e8a PID 10a4
ロジクールのキーボードが見えている
10.72 USB2[2] 000206e1 connected 10.22 USB2[2] 00200603 connected enabled 10.23 USB2 root HUB port 2 init 10.48 DEV [01:00] 2.00 000000:02 class 0 VID 046d PID c534 10.56 HID [01:00] 2.00 000000:02 register HID 10.17 USB2[2] 000206e1 connected 10.85 USB2[2] 00200603 connected enabled 10.86 USB2 root HUB port 2 init
あ。キーボードを2つつないでいると、先に認識した方しか使えないのか。Pi5で言うと、USB2.0の上が先で、下があとになるらしい。USB3.0は未テスト。ただし、これとPicoのキーボードは別の問題でした。
5.54 DEV [01:00] 2.00 000000:02 class 0 VID 046d PID c534 ←際に認識したロジクール 5.68 HID [01:00] 2.00 000000:02 register HID 5.73 DEV [01:00] 1.16 000000:02 class 0 VID 0430 PID 0031 ←FKB8769キーボード 5.84 HID [01:00] 1.16 000000:02 register HID