まとめ
技適の通ったXIAO nRF52840とnRF Snifferを使って安価にBLEのパケットを取得してみました。
はじめに
BLEの接続が上手くいかない時、空中を飛んでるパケットを解析することがあります。パケットの中身を見ると接続不良の原因が判明しやすくなり、効率よくデバッグできます。
Bluetoothのパケットを取得するための機器は Bluetooth プロトコル・アナライザ
、スニファー
などと呼ばれ、主に法人向けに販売されています。以下はellisys社のアナライザーで、価格は$10,000~
となっています (2023年7月の為替相場で140万円以上)
他にもアナライザーは販売されてますが、どれも高価なので個人やスタートアップにとって使用のハードルが高い状況です
nRF Snifferでお手軽BLEアナライザー
BLEチップ大手Nordic SemiconductorのnRF Snifferというツールと開発ボードを使うと安価にパケットの取得を行うことができます
nRF Snifferに対応したnordicの開発ボード
名前 | 価格 | 技適取得 |
---|---|---|
nRF51 DK | 約6,000円 | × |
nRF51 Dongle | 生産中止 | × |
nRF52 DK | 約6,000円 | × |
nRF52833 DK | 約7,500円 | × |
nRF52840 DK | 約7,000円 | × |
nRF52840 Dongle | 約1,500円 | × |
しかし、これらの開発ボードは技適未取得のため日本国内で使うにはハードルが高いです
技適が通ったデバイスでnRF Snifferを使いたい!
なんと技適の通ったXIAO nRF52840
というデバイスでnRF Snifferを使えるという情報を見つけました!
こちらの記事によると、J-Linkも使わずにSniffer用のFWを書き込めるらしい
Seeed Studio XIAO nRF52840
さっそくスイッチサイエンスさんで購入。送料込みで2136円
でした。
デバイスは親指の爪くらいのサイズでとても小さいです。技適のマークがついてますね!
では、さっそく XIAO nRF52840
を使ってスニファーを動かしていきます!
動作環境
今回はMacを使いましたが、Windowsでも動かすことができると思います。
ハードウェア
- MacBook Pro 13-inch, 2020, macOS 13.4.1
- Seeed Studio XIAO nRF52840
ソフトウェア
- nRF Sniffer v4.1.1
- Wireshark v4.0.6
- Python 3.11.4
1.nRF Sniffer用のHEXファイルをUF2形式に変換する
XIAO nRF52840
はUF2という形式のFWアップデートに対応しているそうです。
nordicが提供しているSnifferのFWはHEXという形式なのでHEX → UF2にファイルを変換します。
(変換にはPython 3が必要になるので事前にインストールしておきましょう)
nRF SnifferのHEXファイルをダウンロードする
2023年7月時点の最新バージョン v4.1.1をダウンロードしました。
https://www.nordicsemi.com/Products/Development-tools/nRF-Sniffer-for-Bluetooth-LE/Download?lang=en#infotabs
ダウンロードしたZIPファイルの中の hex/sniffer_nrf52840dongle_nrf52840_4.1.1.hex
が今回使うHEXファイルです。
HEX→UF2変換用のスクリプトをダウンロードする
uf2conv.py
とuf2families.json
をダウンロードします。
https://github.com/microsoft/uf2/tree/master/utils
スクリプトでHEX→UF2に変換する
$ python3 uf2conv.py sniffer_nrf52840dongle_nrf52840_4.1.1.hex -c -f 0xada52840
Converted to uf2, output size: 139264, start address: 0x1000
Wrote 139264 bytes to flash.uf2
変換が終わると flash.uf2
というファイルが出来上がります。
2. 変換したUF2ファイルをXIAO nRF52840に書き込む
XIAO nRF52840
と MacをUSBケーブルで接続し、リセットボタンを素早く2回押すとUSBドライブとして認識されます。
変換したUF2ファイル flash.uf2
をUSBドライブにドラッグアンドドロップします。
以上でnRF Sniffer用のファームウェアの書き込みは完了です。
3. Wireshark
WiresharkのStable Releaseをインストールします。
https://www.wireshark.org/download.html
nRF Sniffer v4.1.1のZIPを展開したフォルダで以下のコマンドを実行します。
$ cd extcap
$ python3 -m pip install -r requirements.txt
nRF Sniffer用のキャプチャツールをWiresharkの指定フォルダにコピーします。
Wiresharkを起動し、メニューバーから About wireshark
を選択します。
赤枠のフォルダーにnRF Sniffer v4.1.1のZIPファイル内の extcap
フォルダ内のファイルをコピーします。
Capture -> Refresh Interfacesでリフレッシュします。
XIAO nRF52840
とMacをUSBケーブルで接続します。
Wiresharkの画面で nRF Sniffer for Bluetooth LE
をダブルクリックします。
パケットの解析方法について
具体的なパケットの解析方法については以下のサイトが参考になりそうです。
- DevAcademy Lesson 6 – Bluetooth LE sniffer
- Master BLE Sniffing: nRF52840 USB Dongle & Wireshark Guide
おわりに
私が業務で使ったアナライザーは数百万円もしましたが、今回の方法では2000円程度の機材で安価にパケットを取得できました。高価なアナライザーとnRF Snifferではできることに違いはありますが、基本的な接続・切断・アドバタイズなどのパケットを見て流れを追うことができますので、今後活用していきたいと思います。