Edited at

hcidump で BLE でアドバタイジングの内容を確認する

以前以下の記事を書きました。

「gatttool を使って NUS( Nordic UART Service ) とつなぐ実験」

https://qiita.com/nanbuwks/items/7c448837eedf439b8ee9

これは connect を行って、gatttool から各種操作を行うお話。

さて、BLEはコネクトせずにアドバタイジングパケットを使っての操作ができます。

connectせずにアドバタイジングの中身を見るには?

「Raspberry PiでiBeaconを検知する」

https://qiita.com/katsuyoshi/items/9d5417495a47c4b15ac1

を参考にhcidumpを使うことにします。


環境

Ubuntu 18.04

hcidump 5.48

BBC micro:bit + Scratch micro:bit HEX

hcidumpは以下のようにしてインストールします。


$ sudo apt-get install bluez-hcidump


操作


$ sudo hcidump -R &
[1] 2462

としておいてから、

$ sudo hcitool lescan

とします。


D1:7C:18:BB:9E:96 FABLIB aonodn [penbee]
> 04 3E 27 02 01 00 01 96 9E BB 18 7C D1 1B 02 01 05 17 09 42
42 43 20 6D 69 63 72 6F 3A 62 69 74 20 5B 70 65 6E 62 65 65
5D C2
D1:7C:18:BB:9E:96 (unknown)
> 04 3E 10 02 01 04 01 96 9E BB 18 7C D1 04 03 03 05 F0 C5
CA:59:5C:B9:F3:41 BBC micro:bit [puvut]
> 04 3E 2A 02 01 00 01 41 F3 B9 5C 59 CA 1E 02 01 06 16 09 42
42 43 20 6D 69 63 72 6F 3A 62 69 74 20 5B 70 75 76 75 74 5D
03 03 05 F0 C5
CA:59:5C:B9:F3:41 (unknown)
> 04 3E 0C 02 01 04 01 41 F3 B9 5C 59 CA 00 C5

となりました。

ここで、micro:bitからのアドバタイジングのみを抽出すると


CA:59:5C:B9:F3:41 BBC micro:bit [puvut]
> 04 3E 2A 02 01 00 01 41 F3 B9 5C 59 CA 1E 02 01 06 16 09 42
42 43 20 6D 69 63 72 6F 3A 62 69 74 20 5B 70 75 76 75 74 5D
03 03 05 F0 C5
CA:59:5C:B9:F3:41 (unknown)
> 04 3E 0C 02 01 04 01 41 F3 B9 5C 59 CA 00 C5

となります。

BBC micro:bit では、最初の通信に名前とF005が入っているのがわかります。

ScratchLink は F005 を認識し、 micro:bit を通信します。

さて、BLE の Advertizing PDU

は ヘッダ 2 バイト + 0〜37 バイトのペイロード からなりますが、1つ目の通信は45バイトあるのでこれはパケットそのものを見ているのではないようです。また、プリアンブルとアクセスアドレスについてもここには出てないようです。

したがって、ここに表示されているのは複数のパケットからなる通信の内容のうち、ペイロードのみがここには出ているようです。

通信内容のフォーマットについては、以下のようにして判読します。

BLE Core Spec

` Bluetooth.org

https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=229737

から

Core_V4.0.zipをダウンロード

全部で2302ページあります。

http://todotani.cocolog-nifty.com/blog/2013/02/bluetooth-le-bt.html

によると、


Volume-3 (Core System Package), Part-C (Generic Access Profile), Section-11 “ADVERTISING AND SCAN RESPONSE DATA FORMAT”に必要な情報を見つけました。


ということで、該当箇所から読み解きます。

?
BD address
?
length
AD Type
flag
length
AD Type
BBC micro:bit [puvut]
length
AD Type
service UUID
?

04 3E 2A 02 01 00 01
41 F3 B9 5C 59 CA
1E
02
01
06
16
09
42 42 43 20 6D 69 63 72 6F 3A 62 69 74 20 5B 70 75 76 75 74 5D
03
03
05 F0
C5

このうち、AD Typeは

"SPECIFICATIONS Assigned Numbers"

https://www.bluetooth.com/specifications/assigned-numbers/

の "Generic Access Profile" を選んだ先の

"​​Assigned numbers are used in GAP for inquiry response, EIR data type values, manufacturer-specific data, advertising data, low energy UUIDs and appearance characteristics, and class of device."

https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile/

で参照できます。

さて、BD address の両端にある

04 3E 2A 02 01 00 01 と 1E とは何でしょうか?

先の資料の Core_V4.0.zip 中の

Volume-2 Core System Package [BR/EDR Controller volume]



Part E HOST CONTROLLER INTERFACE FUNCTIONAL SPECIFICATION



Secsion-7 HCI COMMANDS AND EVENTS



7.7.65.2 LE Advertising Report Event に該当がありました。それとつきあわせると

Event Type
Scan Response
0x04

Event Code
LE Meta
0x3E

Data Length

0x2A

Sub Envent
LE Advertising Report
0x02

Num Reports

0x01

Peer Address Type[0]
Public Device Address
0x00

BD_ADDR[0]

0x41 0xF3 0xB9 0x5C 0x59 0xCA

Length[0]

0x1E

ということでした。

更に、最後の C5 についても、

RSSI[0]

0xC5

ということでした。