Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

「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

ということでした。

nanbuwks
iotlt
IoT縛りの勉強会です。 毎月イベントを実施しているので是非遊びに来てください! 登壇者を中心にQiitaでも情報発信していきます。 https://iotlt.connpass.com
https://iotlt.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away