BLE掃
藍牙掃描想必是藍牙使用者最常操作的動作吧,那大家了解傳統掃描和BLE掃描的區別嗎?本篇我們就簡單聊聊BLE掃描(scan)那點事。
傳統掃描:Inquiry,掃描周圍環境中的BR/EDR藍牙設備,常見於設置-藍牙中的搜索
BLE掃描:Scan,掃描周圍環境中的低功耗藍牙設備,常見於第三方APP搜索低功耗藍牙(手環、手錶、體脂秤等應用中)
簡單的BLE掃描其實也是分為多種掃描方式,按照協議主要分為如下兩種:
1、Passive Scanning— 被動掃描,藍牙設備被動掃描周圍環境中對等設備發送出來的廣播包並直接上報到Host
2、Active Scanning— 主動掃描,藍牙設備主動掃描來獲取更多對端設備的信息上報Host,為後續建立鏈路做準備
因此BLE的主動掃描相比於被動掃描更具優勢(獲取更多信息),接下來以Active Scan為主進行分析。
不管是主動還是被動掃描,BLE scan的基本流程為:設置掃描參數 -> 使能掃描 -> Controller上報掃描結果 -> 停止掃描,經過如上四步則整個BLE掃描完成。
設置掃描參數
Host設置BLE掃描所必須的參數到Controller,這樣Controller才知曉掃描上報哪類低功耗設備信息
LE_Scan_Type:掃描類型,就是上面所說的被動掃描(type = 0)和主動掃描(type = 1)
LE_Scan_Interval、LE_Scan_Window:掃描的窗口和間隔,Range: 0x0004 ~ 0x4000,因此掃描的這兩個時間範圍:2.5 ms ~ 10.24 s,Interval
Own_Address_Type:本端設備的掃描請求數據包中使用的地址類型
Scanning_Filter_Policy:BLE掃描的過濾策略,Controller依據該過濾策略只上報Host關心的設備信息
使能掃描、停止掃描
Host啟動和停止掃描,啟動掃描後Controller發現周圍環境中的廣播設備。
LE_Scan_Enable:使能還是停止掃描,使能—1、停止—0
Filter_Duplicates:是否開啟廣播重複過濾,開啟enable—1、關閉disable—0,開啟後可避免Host在BLE掃描期間接收到重複的低功耗設備信息,該值只有在掃描使能才會生效
Controller上報掃描結果
BLE掃描過程中一個或多個低功耗藍牙設備對主動掃描作出了響應,或者在被動掃描期間收到了廣播。 控制器Controller依次將掃描到的這些設備信息上報給Host。
BLE掃描流程中涉及到的HCI命令和事件如上所述,如果本端藍牙晶片支持擴展廣播能力,則以上指令使用對應的擴展命令即可。
本端藍牙晶片是否支持擴展廣播能力參考藍牙初始化階段HCI命令HCI_LE_Read_Local_Supported_Features中晶片側的回覆。
本篇基於藍牙4.2協議分析的BLE掃描到這兒就結束了,最新協議5.2上還涉及到周期廣播的掃描以後有機會再給大家分享。感興趣的小夥伴歡迎私信留言一起討論,共同學習,一起進步!