在未進行連線之前,有兩種封包會在空氣中傳遞,廣播(Advertising Data)以及掃描回應(Scan Response),
這兩種封包一般來說最長都可以到31 Bytes,在藍牙 5之後最長可以到254 Bytes 。
廣播封包的類型共有八種,如下表,
其中ADV_開頭的是在主要的廣播頻道(#37~#39)中發送,
另外AUX_開頭的則是在次要的廣播頻道(資料傳輸頻道, #0~#36)中發送。
Advertising PDU | Description | Max adv data len | Allow scan req | Allow connect |
---|---|---|---|---|
ADV_IND | 代表可被連線且可回應掃描的封包;這是最常用的廣播封包,沒有指定廣播的對象。 | 31 bytes | Yes | Yes |
ADV_DIRECT_IND | 代表可被連線但不回應掃描的封包;專門用於點對點的廣播,已經有指定連線的對象。 | N/A | No | Yes |
ADV_SCAN_IND | 代表不可連線且但可回應掃描的封包 | 31 bytes | Yes | No |
ADV_NONCONN_IND | 代表不可連線且不回應掃描的封包 | 31 bytes | No | No |
ADV_EXT_IND | 用來表示有廣播封包在次要頻道中被發送 | No adv data allowed. | No | No |
AUX_ADV_IND | 用來發送可被連線且可回應掃描的封包, 且在次要廣播頻道中發送 | 254 bytes | Yes | Yes |
AUX_SYNC_IND | 用來發送週期性的廣播封包, 且在次要廣播頻道中發送 | 254 bytes | No | No |
AUX_CHAIN_IND | 用來串接多個廣播封包, 且在次要廣播頻道中發送 | 254 bytes | N/A | N/A |
前四個都是藍牙 5 之前就存在的廣播類型,
其中ADV_DIRECT_IND 沒有31 bytes 的廣播資料,只有6 Bytes 的指定對象的裝置位址,
除了這個之外的另外三種廣播封包(ADV_IND、ADV_SCAN_IND、ADV_NONCONN_IND),都可以攜帶31 Bytes 的資料。
後面四個則是藍牙 5 之後才新增的,我們試著用例子來理解這四個新的類型,
當我們想要發送資料量較大的封包時,
先透過 ADV_EXT_IND 這個封包來告訴對方"在次要廣播頻道中,將有廣播資料被發送",
接著對方就可以在該頻道中接收到資料量較大的廣播封包。
如果要廣播的資料超過一個封包的長度限制(254 Bytes),
就會在第一個帶有資料的廣播封包中告訴對方下一個封包的廣播頻道。
我比較憨慢講話,大家可以試著參考下圖來理解
參考文章: