RedBearLab BLE Nano v2 をBLE Snifferとして利用する

RedBearLab BLE Nano v1.5 をBLE Snifferとして試す」でRedBearLabの BLE Nano v1.5をWiresharkで BLEパケットをみるためのSnifferとして試したが、今回はBLE Nano v2.0 をSnifferとして使うことを試みた。OS環境はWindows10である。

スイッチサイエンスのRedBearLab BLE Nanoキット V2 のプログラム書き込み用DAPLink v1.5モジュールと BLE Nano v2.0 を利用しているが、SnifferプログラムがDAPLink v1.5モジュールではシリアル通信ができないため、シリアルUSB変換モジュールが必要である。

シリアルUSB変換モジュールが必要な理由

RedBearLab BLE Nano v1.5 をBLE Snifferとして試す」の最後に書いたように、DAPLink v1.5モジュールと BLE Nano v2.0だけではSnifferとして使えなかった。

Snifferプログラムが想定しているシリアルに利用するピンとBLE Nano v2.0 のピンが異なっている。Snifferプログラムが想定しているシリアルに利用するピンでシリアル通信できるようにシリアルUSB変換モジュールが必要である。

nRF52 Development Kitの Virtual COM portのピンの割り当て

[ble]BLE NanoでnRF Snifferを動かす を参考にして、NordicのnRF52用 Snifferの動作環境の開発ボードの Virtual COM port のピンの割り当てを調べると次のようになっていた。

nRF52 Series > nRF52832 > nRF52 Development Kit (for nRF52832) Interface MCU

Table 1. Relationship of UART connections on nRF52832 and the interface MCU
Default GPIO nRF52832 UART nRF52832 Interface MCU UART
P0.05 RTS CTS
P0.06 TXD RXD
P0.07 CTS RTS
P0.08 RXD TXD

BLE Nano v2.0 のピンの割り当て

BLE Nano v2.0のピンの割り当てはGithubのredbear/nRF5x/nRF52832にある次の図を見ると下の表のようにまとめられる。

https://github.com/redbear/nRF5x/blob/master/nRF52832/README.md

PO_28 CTS
PO_29 TX
PO_30 RX
PO_2 RTS

Snifferプログラムが想定しているnRF52 Development Kitの Virtual COM portと割り当てが異なるので、そのままでは受信したデータをシリアル通信で出力することはできない。

幸い、Snifferプログラムがシリアル通信に用いる PO_5、PO_6、PO_7、PO_8が BLE Nano v2.0 のピンもしくはパッドに出ているので、シリアルUSB変換モジュールがあれば、Snifferとして使える。

必要なハードウェア

RedBearLab BLE Nanoキット V2

Switch Science で購入した。

  • DAPLink v1.5ボード
    • Snifferプログラムの書き込みに必要
  • BLE Nano v2.0

シリアルUSB変換モジュール

BLE Nano v2.0 は3.3Vインタフェースである。snifferのデータを受けるWiresharkのextcap にある uart.py のプログラムから通信速度は460800 bpsである。

これらのことから、シリアルUSB変換モジュールは、3.3Vインタフェースで460800 bpsの通信ができるものであれば何でも良いはずである。以下の変換ボードを試した。

ピンソケット

  • 2.54mmピッチの5Pのピンソケット
    • BLE Nano v2.0 に取り付けて、シリアルUSB変換モジュールとジャンパー線などで接続できるようにするため。

配線材

  • BLE Nano v2.0とシリアルUSB変換モジュールを接続するためのブレッドボードやジャンパー線
  • シリアルUSB変換モジュールとPCを接続するためのUSBケーブル

Bootloader

まず、RedBearLab BLE Nano v2.0のブートローダを更新しておく。

DAPLink V1.5

https://github.com/redbear/nRF5x/tree/master/nRF52832/daplink にあるDAPLink V1.5 用のブートローダー HEXファイルを入手した。

https://github.com/redbear/nRF5x/blob/master/nRF52832/daplink/DAPLink_V1.5_Interface_nRF52_20170106.bin

ブートローダの書き込み

RedBearLab BLE Nano v1.5 をBLE Snifferとして試す」に書いたのと同様であるが、RedBearLab  BLE Nano v2.0 を装着した DAPLink v1.5のリセットボタンを押しながらUSBに接続するMAINTENANCEドライブとして見える。

先にダウンロードしておいた DAPLink_V1.5_Interface_nRF52_20170106.bin をMAINTENANCEドライブにドラッグ・アンド・ドロップをすると書き込みがされる。

ブートローダが書き込まれればDAPLINKドライブが見えるようになり、アプリケーションを書き込む準備ができていることがわかる。

Windows10 Storage Serviceの停止

RedBearLab BLE Nano v1.5 をBLE Snifferとして試す」に書いたのと同様に、DAPLINKを利用した際の書き込みエラーを解消するためには、Windows のStorage Service を停止する。

Lチカプログラム (BLE Nano V2.0)の書き込み

アプリケーションプログラム書き込みがうまくいくことを確認するために、LEDを点滅させるLチカのプログラムを試すことができる。

プログラム書き込みを試すためには以下のところのHEXファイルを使うのが早い。

https://github.com/redbear/nRF5x/blob/master/nRF52832/test/nRF52_Blink.hex

このHEXファイルをDAPLINKドライブにドラッグ・アンド・ドロップして、正常に書き込みが終わると、BLE Nano v2.0のLEDが点滅するようになる。

BLE Nano v1.5 と異なり、DAPLINKモジュールに装着した状態でBLE Nano v2.0のLEDは見えるので、点滅状態を確認しやすい。

LEDの点滅を確認できれば、プログラムのDAPLINKを使った書き込みができたことがわかる。

nRF Sniffer v2の書き込み


(2018年12月15日補足)

Nordic nRF Sniffer v2 のこの記事の執筆時よりも新しいバージョンがリリースされている。https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Sniffer からアクセス可能。

新しいバージョンの 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 の記載をみると、BLE Nano v2.0 (nRF52832)に対応する Sniffer は、nRF52 Development Kit (PCA10040) and a micro USB cable用のZIPファイル内の次のHEXファイル(sniffer_pca10040_51296aa.hex)である。

nrf_sniffer_2.0.0-beta-1_51296aa\hex\sniffer_pca10040_51296aa.hex

このHEXファイルを DAPLINKドライブにドラッグ・アンド・ドロップすればSnifferプログラムの書き込みが行われる。

正常に書き込みが行われれば、DAPLINKドライブが一度閉じて、再度接続される。

このままではSnifferが取得したデータをシリアルから取得できないので、シリアルUSB変換モジュールとBLE Nano v2.0 を接続する。また、シリアルUSBのUSBをPCに接続する。

BLE Nano v2.0 とシリアルUSB変換モジュールの接続

BLE Nano v2.0へのピンソケット取り付け

BLE Nano v2.0 では、PO_6, PO_7, PO_8 がパッド部分につながっている。パッド部分にピンソケット(5P)を取り付けた。下手だが、以下のようにはんだ付けした。

FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)

Switch Science の FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)では以下のように接続する。

アダプターの電圧設定用ジャンパーピンは3.3Vを選択する。

BLE Nano v2.0 FTDI USBシリアル変換アダプター
PO_5 (RTS) CTS (接続しなくても可)
PO_6 (TXD) RX
PO_7 (CTS) DTR (接続しなくても可)
PO_8 (RXD) TX
VIN (3.3VならVDDでも可) VCC
GND GND

PO_6(RTS) — CTS と PO_7(CTS) — DTR は接続しなくても動作した。

Wiresharkの起動時にエラーが出ることがあった。再起動してデバイスとしてBLE Nano v2.0 が接続されている COM を選択することを繰り返せば、動作するようになった。

CP2102 を使ったmicro usb – TTL serial 変換モジュール

CP2102 を使ったmicro usb – TTL serial 変換モジュールでは以下のように接続する。

BLE Nano v2.0 CP2102 を使ったmicro usb – TTL serial 変換モジュール
PO_6 (TXD) RX
PO_7 (CTS) DTR (接続しなくても可)
PO_8 (RXD) TX
VIN (3.3VならVDDでも可) 3V3
GND GND

変換モジュールにCTSがないためにWiresharkからの送信制御がうまくいかないのか、一旦BLE Nano v2からのデータ送出が始まると、パケットキャプチャしていないときでもBLE Nano v2.0からデータが送信しつづけられる。

Wiresharkの設定

Wiresharkの設定方法は「RedBearLab BLE Nano v1.5 をBLE Snifferとして試す」と同じである。また、「Nordic nRF Sniffer v2をインストール後のWireshark起動の不具合」に記載のpythonファイルの修正を加えておいた方が良いと思う。

Wiresharkの起動

Wiresharkを起動してうまくSnifferと通信ができたら、nRF Sniffer COM?? を選択する。うまくいけばBLEパケットのキャプチャが行われるようになる。

Wiresharkで受信がうまく行われていて、シリアルUSB変換モジュールに送受信を示すLEDなどがあれば点滅しているはず。

今後

BLE Nano v2.0 でも Snifferを動作させることができたので、気分的にはすっきりした。

しかし、実際に使うことを考えると現状ではBLE Nano v2.0 をSnifferとして使う際にブレッドボードなどが必要であり、面倒で、ジャンパー線などが安定しておらず使いにくい。

RedBearLab BLE Nano v1.5 をBLE Snifferとして試す」で使った BLE Nano v1.5 の方が書き込みモジュールと一緒に使えて便利なので、既に販売されていないとは言え、不具合が発生しなければ BLE Nano v1.5 をSnifferとして使うことになろう。