あんパン

こしあん派

Raspberry Piに接続されたRaspberry Pi Pico / Pico2にuf2を効率的に書き込む補助ツールを作った

会社でBoard43というRP2350A互換ボードを作り、量産して配布するにあたってファームウェアを書き込む必要があった。

blog.smartbank.co.jp

今回、ファームウェアは2種類に分けていて、動作確認用のCで書いたものと、実際に動かすためのカスタムR2P2(PicoRuby)ビルドという構成。動作確認用でLED、ボタン、ブザーなどすべての構成要素を検証して、本番用のR2P2を書き込む流れにしたかった。1枚ずつちまちまコマンドを書いて焼いているといつまで経っても終わらないのは明白だったので、1ボタンで焼ける仕組みが欲しかった。ので作った。

github.com

BOOTSELモードで接続されたRaspberry Pi Pico / Pico 2 / RP2***ボードすべてに対して、GPIOのLOWをトリガーにファームウェアを書き込んでくれる。GP27がGNDと短絡したらdebug.uf2、GP17がGNDと短絡したらproduction.uf2を書き込む、みたいな感じ。

設定はtomlで書ける。

[general]
log_level = "info"           # debug, info, warn, error
poll_interval_ms = 500       # USB device polling interval (ms)

[[pin]]
gpio = 17
uf2_path = "/home/pi/firmware/production.uf2"
label = "Production firmware"

[[pin]]
gpio = 27
uf2_path = "/home/pi/firmware/debug.uf2"
label = "Debug firmware"

実際に使ってみると、とにかく高速に焼けるのでかなり便利だった。これがなければ発送の締切に間に合ってなかっただろう。。。

Raspberry Piに大量のボードを繋ぐと、おそらく電源がネックになって4台が限界だった。8台だと書き込んでる最中に落ちちゃってうまく書き込めないということが頻発した。バスパワーじゃなくてセルフパワーのUSBハブがあるといいかもしれない。また、ときおり書き込みに失敗するのでログを監視する画面はあると便利。

こういう調子で量産することがなければもう使うことはないような気がするけど、そんな機会は果たしてくるだろうか……?