あけましておめでとうございます!
OpenHaystack記事二個目です。nRF52832が乗った基板を調達できたので、これも偽AirTag化することにしました。
今回はその備忘録です。
(あけおめ記事はまた別に書きます。)
今回調達したnRF52832デバイスはDev KitなどのようにUSBでシリアルポート接続できたりする代物ではなく、まあせいぜいUARTとSWDで通信ができるよくらいの代物だったので、プログラマとしてOpenOCDを載せたラズパイ4でSWD経由でファームウェア書き込みを行いました。
今回使うもの#
- Raspberry Pi 4 Model B
- ジャンパワイヤ(必要な分だけ)
- nRF52832
やること#
OpenOCDの準備#
(Raspberry OSが載っている)ラズパイにOpenOCDを入れるのはとても簡単です。
以下のコマンドで入れられます。
ラズパイからSWDを使ってハードウェアと通信するには、GPIOの24番ピンと25番ピンを使います。
ピンの配置は以下から確認するのが便利です。
- 24番:IO
- 25番:CLK
です。
ジャンパワイヤでラズパイと基板をいい感じに繋いだら設定ファイルを書いていきます。
以下がnRF523832とラズパイ4、そしてSWDを使う人向けのOpenOCDの設定になります。
参考にしたのは以下の記事中の設定ファイルですが、古い記述やラズパイ4に対応させるための記述が見当たらなかったので加筆・修正しました。
Using Raspberry Pi as SWD programmer via OpenOCD Bitbang protocol — Ayan Pahwa
↑をopenhaystack.cfg
などの名前で保存し、以下を実行してtelnetサーバとgdbサーバなどが立ち上がっていれば一旦準備は完了です。
nRF52832のファームウェアの用意#
ファームウェアは自分は一からビルドもできますが一番簡単なのはコンパイル済みのバイナリを焼くことですね。
こんかいはmacless-haystackというリポジトリのファームウェアを使用します。(使用するのはファームウェアのみです。)
以下のコマンドでファームウェアをダウンロードします。(v2.2.0
の箇所は適宜変更してください)
generate_keys.pyも鍵情報の作成に使うのでダウンロードします。
generate_keys.pyを実行するとoutput/
に鍵情報のファイルが作成されます。
output/
配下のXXXXXX_keyfile
がアドバタイズ用のキーです。これをファームウェアに埋め込みます。
手順は公式のREADMEに書いてありますが、ここでも紹介します。
以下を実行すると埋め込まれます。
ここまで出来たらファームウェアの用意は完了です。
ファームウェアをnRF52832に焼く#
「OpenOCDの準備」の項で作ったOpenOCDの設定ファイルに以下を追記します。
注意:nrf5 mass_erase
を忘れないようにしてください。これはReadback Protectionという書き込み保護を解除するコマンドです。忘れるとファームウェアが書き込めずエラーで失敗します。
追記したら以下を実行
ファームウェアが正常に書き込まれればOpenHaystackのアプリから数分以内にデバイスがオンラインになると思います。
まとめ#
本当はめっちゃ悪戦苦闘したんですがだいぶ端折って書いてます。
最近マイコンとかハードウェアとか弄るの楽しくなってます。また何かおもしろいおもちゃを見つけたら紹介しようと思います。
では!