Wiresharkで BLEパケットをみるために、RedBearLabの BLE Nano v1.5 を プログラム書き込み用の MK20 USB V1.5 を使ってnRF Sniffer を書き込んで一応使えるようにした。
BLE Nano v1.5 とMK20 USB V1.5は、既に販売終了になっているが、スイッチサイエンスのRedBearLab BLE Nanoキットとして以前入手したものである。プログラム書き込みにはDAPLINKを使ったものがあるが以下では試していない。
一応動作させることはできたが、動作が不安定で、Wiresharkが起動しなかったり、起動してもSnifferからデータを受け取れない場合がある。何が原因かはっきりしていないが、nRF Sniffer の書き込みでも手間取ったりしたので備忘録として現時点までの状況を書いておく。試した環境はWindows10である。
次の記事が参考になった。
目次
Bootloader
まず、RedBearLab BLE Nano v1.5のブートローダを更新する必要があった。
MK20 USB V1.5
(2018年7月11日追記)
https://github.com/redbear/nRF5x にある次のページからMK20 USB V1.5 用のブートローダー HEXファイルを入手した。
tree/master/nRF51822/daplink/MK20-USB/board_v1.5
CMSIS-DAP_MK20_BLENano.bin が BLE Nano用
RBL_nRF51822_MK20.binは、RBL nRF51822 development board用
以下は古いようだ。
https://github.com/RedBearLab/BLENano にある次のページからMK20 USB V1.5 用のブートローダー HEXファイルを入手した。
BLENano/USB-IF/MK20-USB/board_v1.5/
https://github.com/RedBearLab/BLENano/tree/master/USB-IF/MK20-USB/board_v1.5
MK20 USB V1.5 Hexファイル
(2018年7月11日追記)
以下は古いようだ。
ブートローダの書き込み
RedBearLab BLE Nano v1.5 を装着した MK20 USB V1.5のリセットボタンを押しながらUSBに接続すると以下のように BOOTLOADERドライブとして見える。
先にダウンロードしておいた CMSIS-DAP_MK20_BLENano.bin をBOOTLOADERドライブにドラッグ・アンド・ドロップをすると書き込みがされる。
ブートローダーの書き込みが終了するとMK20 USB V1.5のLEDが速く点滅するようだ。
MK20 USB V1.5をUSBから抜いて、再度入れると以下のように MBEDドライブが見えるようになり、アプリケーションを書き込む準備ができていることがわかる。
Windows10 Storage Serviceの停止
bootloaderを更新できたら、アプリケーションである nRF Sniffer を書き込むだけであるが、以下の記事にあるように、Windows10などではStorage Serviceが動作していると書き込みに失敗する。
アプリケーションプログラム書き込み失敗
Storage Serviceが動作したまま、アプリケーションのHEXファイルを MBEDドライブにドラッグ・アンド・ドロップすると、書き込みが始まるようだが途中で次のような書き込みエラーが発生する。
Storage Service の停止
書き込みエラーを解消するためには、Windows のStorage Service を停止する必要がある。
ブートローダーの書き込みの際にも Storage Serviceが動作していると問題になることがあるかもしれないが、Storage Service を停止させるまでに試していた範囲では大丈夫だった。アプリケーションの書き込みではStorage Service を停止させないとうまくいかなかった。
Lチカプログラム (BLE Nano V1.5)
アプリケーションプログラム書き込みがうまくいくことを確認するために、LEDを点滅させるLチカのプログラムを試すことができる。
次のところにソースコードがある。
https://os.mbed.com/teams/RedBearLab/code/nRF51822_blinky/
単にプログラム書き込みを試すだけなら以下のところのHEXファイルを使うのが早い。
https://github.com/RedBearLab/BLENano/blob/master/Test/nRF51822_blinky_RBLAB_BLENANO.hex
このHEXファイルをMBEDドライブにドラッグ・アンド・ドロップして、正常に書き込みが終わると、BLE Nano V1.5のLEDが点滅する。BLE Nano V1.5のLEDは基板裏面にあるので見づらい。
BLE NanoでのLチカについては以下の記事が参考になった。
nRF Sniffer v2
(2018年12月14日補足)
Nordic nRF Sniffer v2 の新しいバージョンがリリースされている。
新しいバージョンの Snifferプログラムについては「nRF52832 USB ドングルの BLE Sniffer 化」で少し触れている。
以下は以前のバージョンの記述のままである。
アプリケーション書き込みの準備が整ったので、Snifferを書き込むことになる。
次のページから nRF-Sniffer-v2 のファイルをダウンロードする。
https://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF-Sniffer
執筆時点では、nrf_sniffer_2.0.0-beta-1_51296aa.zip というファイルが得られた。User guide for nRF Sniffer v2 も役立つのでダウンロードしておく。
User guide for nRF Sniffer v2の記載をみると、BLE Nano v1.5 (nRF51822)に対応する Sniffer は、nRF51 Development Kit (PCA10028) v1.0 or later and a micro USB cable用のZIPファイル内の次のHEXファイル(sniffer_pca10028_51296aa.hex)である。
nrf_sniffer_2.0.0-beta-1_51296aa\hex\sniffer_pca10028_51296aa.hex
このHEXファイルを MBEDドライブにドラッグ・アンド・ドロップすればSnifferプログラムの書き込みが行われる。
正常に書き込みが行われれば、MBEDドライブが一度閉じて、再度接続される。
Wiresharkの設定
BLE NanoのSnifferだけでは表示もできない。インタフェースはWiresharkで行うことになっている。
nRF_Sniffer_User_Guide_v2.1.pdf に記載されているが次のアプリケーションなどがあらかじめインストールされているとする。
- Wireshark v2.4.2 以降 (http://www.wireshark.org/ から入手可能)
- python v2.7.x ( https://www.python.org/downloads/ から入手可能)
- pyserial v3.4 以降 ( https://github.com/pyserial/pyserial から入手可能)
Wireshark のHelpの「Wiresharkについて」の「フォルダ」タブの中に表示されているextcap path を調べる。
私の環境では、C:\Program Files (x86)\Wireshark\extcap であった。
そこに、nrf_sniffer_2.0.0-beta-1_51296aa.zip の中にあるnrf_sniffer_2.0.0-beta-1_51296aa\extcap 以下のファイルなどをコピーする。コピーには管理者権限が必要である。
extcapに最初は何もなければ、コピー後のextcapフォルダーは次のようになるはず。
Wiresharkの起動
Wiresharkを起動してうまくSnifferと通信ができれば、以下のような画面になるので、nRF Sniffer COM?? を選択すればBLEパケットのキャプチャが行われるようになる。
データがうまく受信できている場合には、書き込みインタフェースボードのMK20 USBのLEDが点滅する。
以下のような画面であとはWiresharkの操作をすればよい。
(2018年7月11日追記)
新しいBootloaderを書き込んでからSnifferを書き込んだところ、nRF Sniffer COM??の選択はできるようになった。通信がうまく行われない場合はあるようだが、再試行すれば大丈夫のように思われる。
COM??でのハングは Nordic nRF Sniffer v2をインストール後のWireshark起動の不具合 の問題が関係しているのかもしれない。
うまくいかない場合には、そもそもnRF Sniffer COM??を選択できるようにいつまでもならないでハングしたり、通信がうまく行われず、MK20 USBのLEDが点灯したままになったりした。
後始末
使い終わったら、必要に応じてWindows10 のStorage Serviceを開始する。
今後の課題
(2018年7月11日追記)
RedBearLab BLE NanoをSnifferにすることは概ねできたように思われる。
まず、時々うまくSniffingができない原因を調べる必要がある。結構な頻度で動作せず、回復方法もはっきりしないので時間が無駄になる。
また、RedBearLab BLE Nanoキット V2 (RedBearLab BLE Nano v2.0 と DAPLink v1.5)を買ったので、可能ならば Snifferを使えるようにしたい。
しかしながら、Lチカですらうまく動作ビルドさせることができていない状況である。mbedのオンラインのIDEではLチカプログラムのビルドが正常終了しない。
(2018年7月11日追記)バイナリを実行するだけなら次のHEXを書き込むことでLチカができた。
https://github.com/redbear/nRF5x/blob/master/nRF51822/test/nRF51822_blinky_RBLAB_BLENANO.hex
検索した範囲ではBLE Nano 2.0 で nRF Snifferを動作させたという記事が見つからない。そもそも可能なのかも調べる必要がある。単純に、BLE Nano v2.0 (nRF52832)に、nrf_sniffer_2.0.0-beta-1_51296aa.zipの中の nrf_sniffer_2.0.0-beta-1_51296aa\hex\sniffer_pca10040_51296aa.hex を書き込むことでは動作しないようである。
(2018年7月20日追記)「RedBearLab BLE Nano v2 をBLE Snifferとして利用する」に、BLE Nano v2.0 をSnifferとして使う方法を示した。