LoginSignup
3
2
この記事誰得? 私しか得しないニッチな技術で記事投稿!

XIAO nRF52840でnRF Snifferを動かす

Last updated at Posted at 2023-07-12

まとめ

技適の通ったXIAO nRF52840とnRF Snifferを使って安価にBLEのパケットを取得してみました。

はじめに

BLEの接続が上手くいかない時、空中を飛んでるパケットを解析することがあります。パケットの中身を見ると接続不良の原因が判明しやすくなり、効率よくデバッグできます。

Bluetoothのパケットを取得するための機器は Bluetooth プロトコル・アナライザスニファーなどと呼ばれ、主に法人向けに販売されています。以下はellisys社のアナライザーで、価格は$10,000~となっています (2023年7月の為替相場で140万円以上)

ellisys Bluetooth Tracker
image.png

他にもアナライザーは販売されてますが、どれも高価なので個人やスタートアップにとって使用のハードルが高い状況です:confounded:

nRF Snifferでお手軽BLEアナライザー

BLEチップ大手Nordic SemiconductorのnRF Snifferというツールと開発ボードを使うと安価にパケットの取得を行うことができます:heart_eyes:

nRF Snifferに対応したnordicの開発ボード

名前 価格 技適取得:zap:
nRF51 DK 約6,000円 ×
nRF51 Dongle 生産中止 ×
nRF52 DK 約6,000円 ×
nRF52833 DK 約7,500円 ×
nRF52840 DK 約7,000円 ×
nRF52840 Dongle 約1,500円 ×

しかし、これらの開発ボードは技適未取得のため日本国内で使うにはハードルが高いです:confounded:

技適が通ったデバイスでnRF Snifferを使いたい!

なんと技適の通ったXIAO nRF52840というデバイスでnRF Snifferを使えるという情報を見つけました!

こちらの記事によると、J-Linkも使わずにSniffer用のFWを書き込めるらしい :muscle:

Seeed Studio XIAO nRF52840

さっそくスイッチサイエンスさんで購入。送料込みで2136円でした。
Screenshot from 2023-07-11 15-11-27.png

デバイスは親指の爪くらいのサイズでとても小さいです。技適のマークがついてますね!
image.png


では、さっそく XIAO nRF52840 を使ってスニファーを動かしていきます! :muscle:

動作環境

今回は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
スクリーンショット 2023-07-11 15.38.53 1.png

ダウンロードしたZIPファイルの中の hex/sniffer_nrf52840dongle_nrf52840_4.1.1.hex が今回使うHEXファイルです。

HEX→UF2変換用のスクリプトをダウンロードする

uf2conv.pyuf2families.jsonをダウンロードします。
https://github.com/microsoft/uf2/tree/master/utils
スクリーンショット 2023-07-11 16.13.58.png

スクリプトで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ドライブとして認識されます。
image.png

変換したUF2ファイル flash.uf2 をUSBドライブにドラッグアンドドロップします。
image.png

以上でnRF Sniffer用のファームウェアの書き込みは完了です。

3. Wireshark

WiresharkのStable Releaseをインストールします。
https://www.wireshark.org/download.html

image.png

nRF Sniffer v4.1.1のZIPを展開したフォルダで以下のコマンドを実行します。

$ cd extcap
$ python3 -m pip install -r requirements.txt

nRF Sniffer用のキャプチャツールをWiresharkの指定フォルダにコピーします。

Wiresharkを起動し、メニューバーから About wiresharkを選択します。
image.png

赤枠のフォルダーにnRF Sniffer v4.1.1のZIPファイル内の extcapフォルダ内のファイルをコピーします。

Capture -> Refresh Interfacesでリフレッシュします。
image.png

nRF Sniffer用のツールバーを表示します。
スクリーンショット 2023-07-11 17.02.57.png

XIAO nRF52840 とMacをUSBケーブルで接続します。
image.png

Wiresharkの画面で nRF Sniffer for Bluetooth LEをダブルクリックします。
スクリーンショット 2023-07-11 17.04.25.png

BLEのパケットの取得が始まりました :bangbang: :sparkles:
image.png

パケットの解析方法について

具体的なパケットの解析方法については以下のサイトが参考になりそうです。

おわりに

私が業務で使ったアナライザーは数百万円もしましたが、今回の方法では2000円程度の機材で安価にパケットを取得できました。高価なアナライザーとnRF Snifferではできることに違いはありますが、基本的な接続・切断・アドバタイズなどのパケットを見て流れを追うことができますので、今後活用していきたいと思います。

参考サイト

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2