@(嵌入式)[藍(lán)牙]
低功耗藍(lán)牙兩類報文 : 廣播報文 和 數(shù)據(jù)報文厦取。
本文討論廣播報文數(shù)據(jù)段,不包括完整報文其他部分医增,比如前導(dǎo),接入地址等
藍(lán)牙設(shè)備通過廣播表明自己的存在老虫,等待被連接叶骨, 就好象一個人站在接口大喊“我要脫單,我要脫單祈匙,快來牽手...”忽刽。
BLE 考慮功耗, 使用了3個廣播信道夺欲,順序廣播跪帝。
兩個藍(lán)牙設(shè)備想要建立連接, 第一步是 從機(server) 向外廣播些阅, 主機(client) 搜索到后發(fā)起請求伞剑。 從機廣播中包含設(shè)備的相關(guān)信息,比如設(shè)備名稱市埋,設(shè)備具有的服務(wù)uuid 等黎泣。
廣播包類型
- 廣播包 (Advertising Data)
- 響應(yīng)包 (Scan Response)
主機主動掃描的情況下, 發(fā)送掃描請求給從機缤谎, 從機返回掃描響應(yīng)數(shù)據(jù)抒倚。
廣播數(shù)據(jù)包格式
每個包都是 31 字節(jié),數(shù)據(jù)包中分為有效數(shù)據(jù)(significant)和無效數(shù)據(jù)(non-significant)兩部分弓千。
-
有效數(shù)據(jù)部分
包含若干個廣播數(shù)據(jù)單元衡便,稱為 AD Structure 。如圖所示洋访,AD Structure 的組成是:- 長度 Len 镣陕,表示這個 AD Structure 的長度(除去 len本身 1)
- 類型 AD Type
標(biāo)記這段廣播數(shù)據(jù)代表什么, 比如設(shè)備名姻政, uuid 等呆抑。 - 數(shù)據(jù) AD data
無效數(shù)據(jù)部分
廣播包的長度必須是 31 個 byte,如果有效數(shù)據(jù)部分不到 31 自己汁展,剩下的就用 0 補全鹊碍。這部分的數(shù)據(jù)是無效的。
Flags
對于低功耗藍(lán)牙設(shè)備食绿, 廣播中需要包括的一個 Structure侈咕, 包含一個byte 的標(biāo)記, 標(biāo)記設(shè)備
Flags used over the LE physical channel are:
- Limited Discoverable Mode
- General Discoverable Mode
- BR/EDR Not Supported
- Simultaneous LE and BR/EDR to Same Device Capable (Controller)
- Simultaneous LE and BR/EDR to Same Device Capable (Host)
廣播設(shè)備的服務(wù)uuid
假如藍(lán)牙設(shè)備有心率等profile器紧, 可以在廣播中添加那對應(yīng)的服務(wù)uuid 耀销,這樣其他設(shè)備可以通過廣播直接了解設(shè)備具備的功能。
GAP 和 GATT 服務(wù)的 UUID 不應(yīng)該出現(xiàn)在廣播中铲汪, 這對于每個設(shè)備都是具有的熊尉。
廣播中包含服務(wù)uuid 包括六種類型, 對應(yīng)不同程度 uuid 和列表完整性(complete 和 incomplete)
- 16-bit Bluetooth Service UUIDs
- 32-bit Bluetooth Service UUIDs
- Global 128-bit Service UUIDs
complete 和 incomplete 的區(qū)別
比如罐柳, 我設(shè)備有兩個服務(wù)對應(yīng)的 16 bit uuid 分別是 0x1122 和 0x 2233。
- 如果我只想廣播其中一個
value | note |
---|---|
0x03 | len |
0x02 | Incomplete List of 16-bit Service Class UUIDs |
0x22 | uuid_L |
0x11 | uuid_H |
- 如果我兩個都廣播
value | note |
---|---|
0x05 | len |
0x03 | Complete List of 16-bit Service Class UUIDs |
0x22 | uuid1_L |
0x11 | uuid1_H |
0x22 | uuid2_L |
0x33 | uuid2_H |
廣播中的廠商信息
這個一段的廣播標(biāo)記時 0XFF狰住, 對應(yīng)用于標(biāo)記設(shè)備的生產(chǎn)商和其他信息张吉。
數(shù)據(jù)前兩個字節(jié)時廠商ID, 其他自定義催植。
具體其他廣播數(shù)據(jù)段類型詳見 參考肮蛹。
官方提供例子
Value | Notes |
---|---|
0x02 | Length of this Data |
0x01 | Flags |
0x06 | 廣播標(biāo)記頭 |
0x06 | Length of this Data |
0x09 | Complete Local Name |
0x50 | 'P' |
0x68 | 'h' |
0x6F | 'o' |
0x6E | 'n' |
0x65 | 'e' |
0x05 | Length of this Data |
0x03 | Complete list of 16-bit Service UUIDs, 列出所有服務(wù)uuid 查邢,否則使用imcomplete |
0x15 | PANU service class UUID |
0x11 | |
0x1F | Hands-free Audio Gateway service class UUID |
0x11 | |
0x01 | Length of this data |
0x05 | Complete list of 32-bit Service UUIDs |
0x01 | Length of this data |
0x07 | Complete list of 128-bit Service UUIDs |
0x00 | End of Data (Not transmitted over the air) |