本文主要是介绍BLE的Advertising包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Physical Channel:40个RF频道,3个是advertising 的,37个是data的。advertising channel index的37对应的频率是:2402Mhz,38是2426Mhz,39是2480Mhz。data channe l index 0是2404,步进2Mhz。
空中包结构:Link Layer packet format:
|1byte Preamble| 4byte Access address | 2-39byte PDU | 3by te CRC |
Preambel byte是用来同步通讯的,advertising 包用 10101010b作为Preamble.(都是固定的,抓包里省去这个)
Access Address针对Advertising 包的是:0x8e89bed6. (固定的,数字信道。通过地址就知道这是adv包,同一频道区分不同通讯设备的)
advertising的PDU格式是:|16bit Header|payload|
16bit header:LSB|PDU Type 4bit |2bit RFU|1bit TxAdd|1bit Rx Add|6bit Length|2bit RFU|MSB
Length有效是6到37之间。
advertising的PDU type:
0000 ADV_IND
0100 SCAN_RSP
( 使用的是2,ADV_NONCONN_IND)
ADV_IND: connectable undirected advertising event.这个用来广播可以连接的设备。说明自己是可以被连接的。广播中带有自己的地址。
• ADV_DIRECT_IND: connectable directed advertising event。包的payload:|AdvA 6byte| InitA 6byte| 这个包用来向特定的设备建立连接。
• ADV_NONCONN_IND: non-connectable undirected advertising event。包的payload:|AdvA 6byte| 0-31byte AdvData| 这个包用来广播信息。
• ADV_SCAN_IND: scannable undirected advertising event。包格式同上。
SCAN_REQ包:payload:|ScanA 6byte| AdvA 6byte|
SCAN_RSP包:payload:|AdvA 6byte| 0-31byte ScanRspData|
CONNECT_REQ包:payload:|6byte InitA|6byte AdvA|22byte LLData|
AdvData 结构:
|AD 结构1|AD结构2|。。。
每个结构都是:
|length|AD type|AD data|
简单的说就是 |数据长度|AD数据种类|数据| 这种一块一块拼起来的数据包。
AD type定义:
Service UUIDs: 需要外部查表,不用这个字段。
Local Name:0x09
Flags:
Manufacturer Specific Data:0xff . The first 2 octets contain the Company Identifier Code followed by additional manufacturer specific data
TX power Level : (难道算距离的??)0x0A。
Security Manager Out of Band (OOB):仅仅在out-of-band 机制中使用???什么破机制??0x0d,0x0e,0x0f
Security Manager TK Value:仅在out-of-band机制中使用。0x10
Slave Connection interval range : 连接的交换信息的间隔。(不用连接这个参数就没用了)
Service Solicitation: 给别的设备说自己要的服务。(这个似乎用不到)
Service Data:service UUID和相关的数据。0x16
这篇关于BLE的Advertising包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!