2015/09/06

[nrf52]まだNFCペアリングできないのだ

タイトルには「できない」と書いたが、うまく行くときもある。
こういうときはだめ、というのがわからないのは、できないのと同じだ。

シーケンスは、これだろうと思う。
http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.s132.api.v0.9.0%2Fgroup___b_l_e___g_a_p___p_e_r_i_p_h___b_o_n_d_i_n_g___p_k___c_e_n_t_r_a_l___o_o_b___m_s_c.html&resultof=%22oob%22

Connection Establishedとあるから、まず接続して、Centralから「ペアリングしよう」と言われて動き出すようだ。
が、Centralへペアリングの応答を返した後でOOBの入力をやって、それ以降はやりとりがなさそうなのだ。
まあ、OOBだから、Bluetoothのところでは何もしないといわれればそれまでなんだけど。

では、Androidで失敗しているのは、何ができなかったからダメだと思ったのだろう?
ペアリングに成功した端末は、Android設定画面のBluetoothで「ペアリングされたデバイス」に現れている。
ペアリングはしてないが、検出できた端末は「使用可能なデバイス」に出てくるようだ。
TIのSensorTagも、ここに出てくる。
しかし、どうも「使用可能なデバイス」は常に見ているわけじゃなく、設定画面に入ったり、メニューで「更新」としたときにやっているようなのだ。

ペアリングするかどうかのダイアログは、NFCタッチのタイミングで表示される。
サンプルプログラムではNFCタッチのタイミングでAdvertisingをし始めるのだけど、そこら辺にずれがあるんじゃなかろうか。


ならば、だ。

  1. AndroidのBluetooth設定画面を開く or 「更新」を実行する
  2. Androidが端末を探している間にPreview nRF52 DKのNFCアンテナに軽くタッチし、Advertisingさせる
  3. 設定画面の「使用可能なデバイス」にNordic_HRMが表示されたら、ちゃんとタッチしてペアリング確認ダイアログを表示させる
  4. OKする

だとどうだろう?

・・・やってみたが、だめだった。
ペアリングされたデバイスになってくれない。

そもそも、ペアリングされたデバイスになっていなくても、HRMサンプルは動くようだ。
元のHRMサンプルにペアリングのところだけ付けたものだから、接続さえできればよいのだろう。
あれ、じゃあこのサンプルのペアリングって何のためにやってるのだ?


NXP Tag Infoアプリで読んだデータだ。
XMLも出力してくれるのだが、解析した画面の方がわかりやすい。

image

仕様は、これだろう。
http://members.nfc-forum.org/apps/group_public/download.php/18688/NFCForum-AD-BTSSP_1_1.pdf

まずNDEFレコードが1つしかない。
これはSimplified Tag Format for a Single Bluetooth Carrierというやつだろう。
そのときは、Bluetooth OOB情報だけをNDEFメッセージに入れるようだ。
以下、順にデータを切り出していく。AD Typeは2番目だ。

02 1c 00 : LE Role - Only Peripheral Role supported
08 1b 9a 7d b8 6a 25 cd 01 : LE Bluetooth Device Address
03 19 41 03 : Appearance - Heart Rate Sensor: Heart Rate Belt
02 01 04 : Flags - BR/EDR Not Supported
0b 09 4e 6f 72 64 69 63 5f 48 52 4d : Complete Local Name
- "Nordic_HRM"

Advertisingしているデータは、こんなのだった。

image

LE Bluetooth Device Addressを確認しよう。
CSS_v5.pdfによると、LE Bluetooth Device Addressのサイズは7byteで、6byteはCore_V4.2のVol.3, Part B, Section1.3と同じ。残りは、bit0がRandom Device AddressかPublic Device Addressか。

まず、最後のデータは01なので、これはRandom Device Address。
では、残りのデバイスアドレスをどう並べるか。Section 1.3だけを見ても、エンディアンなどは書いてない。でも、48bitって書いてあるので、何も考えずにリトルエンディアンにすればいいんじゃないかな。
ならば「cd:25:6a:b8:7d:9a」。
AdvAと一致するな。

暗号化に関することなど書かれているかと思ったが、NFCのデータにはそんな要素はなさそうだ。


結局、今回もペアリングのことはわからないままだった。
AndroidでOOBのペアリングができないというわけでは無く(PaSoRi RC-S390で試した)、NFCでのペアリングができないだけのような気がする。
私が「動いている」と思っていたのも、単にNFCタッチによってAdvertising開始して、アプリがConnectしただけのようだし。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。