Seeed XIAO BLEがJ-Linkとか無しに Snifferとして使えたという記録。
ESP32のBLE-MIDIライブラリをつかって家の電子ピアノを制御しようとしたところ、どうもうまくいかない。Google Playにあるアプリだと一応音が出る。とりあえず差分を見たい。Bluetoothだとお手軽なSnifferが結構あるのではないかと調べてみた。
BLE Sniffer調査
世の中でどういうものがあるかというと、
- Nordicの提供しているnRF Sniffer
- TI社提供の、PACKET-SNIFFER
が無償で使えそうなところ。どちらもそれぞれの提供するチップの開発キットやドングルで動作。nRF52840とかCC2540とかその手のチップ。CC2540使ったドングルのほうがお安め?
nRF SnifferはWiresharkのプラグインとして提供されているが、PACKET-SNIFFERは独自のツール。Wiresharkベースのほうが後々良さそうなので、nRF Snifferにしてみる。
nRF Sniffer導入
HW購入
HWはnRF系のチップの乗ったドングルや開発キット、場合によってはFWを書き込む環境が必要とのこと。一番簡単そうなのは、Adafruit社の以下のドングル。SnifferのFWが書き込まれているとのこと。
ただAmazonで4,000円(2022/9)とちと値がはる。というわけで汎用のドングルを調べると、Seeed社の
が安くて入手性もよさそう。とりあえずこれにしてみる。すぐに欲しかったのでマルツで頼んだ。翌日配送で送料いれると2,400円くらい。
FW/SW導入
「nRF Sniffer for Bluetooth LE でデータ解析」を参考にすすめてみる。
FWやSWはNordicのページからダウンロードすればよいらしい。まずは関連ツール類としてnRF Connect for Desktopとかいうのをインストールした。

とりあえず、立ち上げて上記のようにBluetoothとProgrammerをインストール(必要かどうか不明)。Snifferを書き込むためProgrammerを立ち上げる。
ここで、seeed studioのXIAO nRF52840のwikiページを見てProgramming方法を調べると、boot loader書き換えにはJ-Linkを使えと書いてある。とりあえず持っていないのと、安く手に入るらしいJ-Link EDU miniとかはずっと欠品中。
ただ、先の、「nRF Sniffer for Bluetooth LE でデータ解析」を見ると
DFU モードで起動して書き込む方法と、J-Link Lite に接続してデバッグピンから書き込む方法があります。
とあった。
DFU(UF2)によるFW書き込み
Nordic 系のチップでの、Device Firmware Upgrade(DFU) は、bootloaderのサポート状況にもよるが、OTA/Serial/USB CDC経由でいけるとの事。また、UF2によるFWアップデートというのもあるらしく、これはDFUモードで起動するとFlash driveに見えるようになり、バイナリをドラッグアンドロップでコピーするだけというお手軽さ。
これ使っている人いないかと見たら、Nordicのドングルでやっている人がいた。幸いなことに、Seed XIAOもUF2アップデートに対応しているらしいとのこと。早速PCに接続して、Type-Cコネクタの直近の小さいボタンを素早く二回押す。

すると以下のようにドライブとして認識される。

もともとあるファイルを消したくなるが、そのままここにバイナリをコピーすればOKらしい。バイナリの準備の方法は、uf2のレポジトリから、uf2conf.pyとuf2families.jsonをとってきて(pythonある前提)、hexと同じディレクトリにおいて、
python uf2conv.py sniffer_nrf52840dongle_nrf52840_7cc811f.hex -c -f 0xada52840
などで変換。コピーしてから抜き差しすると、nRF connect等から無事 Snifferとして認識された。
そのあとのWiresharkの設定などはいろいろなページを参考に特に詰まることなく進められて、無事パケットのキャプチャーまで進められた。
こんにちは。
このページを参考にして、Seeed Studio XIAO nRF52840をBLE Sniffer化を試みました。
pythonコマンドでflash.uf2を作成することに成功しました。
また、Seeed Studio XIAO nRF52840をPCに接続して、ドライブとしてマウントしました。
そして、当該ドライブ内に、そのflash.uf2ファイルをコピーしようとしたところ、コピーの途中でマウントが接続されて、コピーに失敗します。
別のファイルのコピーなどは問題なくできるのですが、flash.uf2ファイルのコピーは必ず失敗します。
もし解決策にお心あたりがあれば、ご助言頂けると助かります。
よろしくお願いします。
こんにちは。
上記の記事を参考にいてSeeed Studio XIAO nRF52840(以後、デバイス)のsniffer化に挑戦しました。
flash.uf2ファイルの作成までは成功したと思います。
作成したflash.uf2ファイルを、
デバイスをDFUモードでPC(Windows 10)に接続し、ドライブとして認識された場所にコピーしようとしたところ、直後に「予期しないエラーのため、ファイルがコピーできません。このエラーが再発する場合は、エラーコードを使用して、この問題についてヘルプを検索してください。エラー0x800701B1:存在しないデバイスを指定しました。」というエラーが表示されてデバイスがPCから切断されます。
デバイスを2台用意して、それぞれ試しましたが、同じ症状が再現しました。もし解決策などわかりましたらご助言ください。
Thank you for confirming this works. I have now made my own sniffer with the XIAO BLE module, it works great…