[玩轉BLE]通用訪問規範層(GAP層)協議筆記

通用訪問規範GAP(Generic Access Profile)是BLE設備內部功能對外的接口層,它規定了三個方面:GAP角色、模式和規程、安全問題。

GAP層將設備分爲四種角色,分別是外圍設備,中央設備,播報設備和觀察設備。這些設備圍繞着廣播和連接的差異性而區分,外圍設備和播報設備對外發出廣播數據,中央設備和觀察設備掃描外部廣播數據,播報設備和觀察設備通常不建立連接,而外圍設備和中央設備可以建立連接。

圍繞着廣播和連接,GAP層定義了許多不同的廣播模式和連接模式,在不同模式下的操作稱爲“規程”。

對於安全問題,GAP層提供了BLE安全管理器的一些列參數設置接口,包括:設備的安全模式、IO能力、安全級別和密鑰長度等參數。設備需要根據實際能力設置GAP的安全管理器參數,從而使用合適的配對方法。

GAP層可以與L2CAP建立聯繫,設置自定義的MTU值。

1. GAP角色

GAP層定義了四種角色:

  • 外圍設備(Peripheral)
  • 中央設備(Central)
  • 播報設備(Broadcaster)
  • 觀察設備(Observer)

外圍設備可以發送廣播數據和接收連接請求,進而建立連接,對應着鏈路層的廣播狀態。

中央設備掃描廣播數據和發送連接請求,進而建立連接,對應着鏈路層的掃描狀態或發起狀態。

播報設備可以發送廣播和接收掃描請求,通常不建立連接,對應着鏈路層的廣播狀態。

觀察設備可以掃描廣播和發起掃描請求,通常不建立連接,對應着鏈路層的掃描狀態。

由於鏈路層支持同時擁有多個狀態機,GAP層也支持一個設備同時具有多個GAP角色,比如在一個連接中充當中央設備,同時對外發出廣播充當外圍設備。

2.用戶接口

GAP定義了幾個與用戶操作密切相關的參數:設備地址,設備名,PIN碼和設備外觀。

2.1 設備地址

設備地址在協議棧內部指BD_ADDR,在用戶界面顯示爲“Bluetooth Device Address”。

設備地址爲一個6字節的整形數組成,可以用冒號作爲分隔符,比如00:0C:3E:3A:4B:69。

在用戶界面,設備地址以自然順序顯示,而內部的BD_ADDR則以逆序保存,對於上述地址,BD_ADDR[0]等於0x69而不是0x00。

設備地址分爲共有地址和隨機地址,隨機地址分爲靜態隨機地址和私有地址,私有地址進一步分爲可解析的私有地址和不可解析的私有地址。常用的地址爲共有地址和可解析的私有地址兩種類型。

關於設備地址類型分析,參見鏈路層的文章介紹。

2.2 設備名

設備名稱僅起識別設備的作用,在用戶界面顯示爲“Bluetooth Device Name”。

設備名最長可達248個字節,但是對端設備可能並不能顯示這麼長的名稱。

設備名支持UTF-8編碼,因此設備名可以使用中文。

2.3 PIN碼

PIN碼指兩個設備配對時使用的passkey密碼,在用戶界面顯示爲“Bluetooth Passkey”。

PIN碼爲6位十進制整形數,因此它的有效範圍爲000000-999999(0x00000000 – 0x000F423F)。使用時必須顯示全部6位數字,包括前導0。

2.4 設備外觀
設備外觀僅起識輔助別設備的作用,在用戶界面顯示爲一個圖標或一個字符串。

設備外觀爲一個2字節數,掃描設備可以通過設備外觀值爲設備分配一個合適的圖標或描述。

3. 模式和規程

模式表示一種工作狀態,規程是針對模式實現的一套操作方法。模式和規程成對出現,GAP規定了五種模式和規程,如下:

模式 規程
Broadcast Mode Observer Procedure
Discovery Mode Discovery Procedure
Connection Mode Connection Procedure
Bonding Mode Bonding Procedure
Periodic Advertising Mode Periodic Advertising Procedure
3.1 播報模式和觀察規程

播報模式並不等同於普通的廣播狀態。

在播報模式下,設備在廣播事件中發送不可連接的廣播數據,播報設備可以響應外部的掃描請求。

播報設備的廣播數據格式與普通的廣播數據相同,但是它不設置LE Limited Discoverable ModeLE General Discoverable Mode這兩個標誌位,即播報設備是Non-discovery設備,這意味着中央設備掃描到該廣播數據,應該選擇忽略。

觀察規程用於監聽播報設備的廣播數據和掃描響應數據,也可以監聽普通廣播設備。

3.2 可發現模式和發現規程

可發現模式分爲三種,如下:

可發現模式 描述
Non-Discoverable mode 不可發現模式,掃描設備應該選擇忽略這類廣播數據。
Limited Discoverable mode 有限發現模式,廣播數據僅工作有限時間內是可被發現的。
General Discoverable mode 普通發現模式,沒有額外限制。

有限發現模式將廣播數據的LE Limited Discoverable Mode位置爲1,普通發現模式將廣播數據的LE General Discoverable Mode位置爲1,如果這兩個標誌位均不設置,就是不可發現模式。

不可發現模式的廣播數據與其他兩種模式相同,所以其廣播數據仍然能夠被掃描設備正確讀取,但由於沒有設置相應的標誌位,掃描設備在解析廣播數據時應該尊重其不願意被發現的意圖,主動忽略該廣播數據。

使用觀察規程的觀察設備,則不會忽略不可發現模式的廣播數據。

有限發現模式通常用於用戶指定的行爲讓設備臨時進入可發現狀態,可發現狀態持續時間爲T_GAP[lim_adv_timeout]

普通發現模式是默認模式,它沒有時間限制。

發現規程分爲兩種,如下:

發現規程 描述
Limited Discovery Procedure 有限發現規程,僅能發現有限發現模式的廣播數據。
General Discovery Procedure 普通發現規程,沒有額外限制。

有限發現規程,僅處理有限發現模式下的廣播數據,包括設備地址和廣播數據,忽略其他發現模式下的廣播設備。

常規發現規程,能普通發現模式和有限發現模式下的廣播數據。

此外還有一種發現規程,專用於發現設備名稱,如下:

發現規程 描述
Name Discovery Procedure 設備名發現規程,用於發現廣播設備的設備名稱。

設備名發現規程,可以發現普通發現模式和有限發現模式下的廣播設備名稱。

發現設備名稱的步驟如下:

  1. 建立連接
  2. 讀取GATT中的名字特徵值
3.3 可連接模式和連接規程

可連接模式分三種,如下:

可連接模式 描述
Non-Connectable Mode 不可連接模式,無法與其他設備建立連接。
Directed Connectable Mode 定向可連接模式,可以與指定的中央設備建立連接。
Undirected Connectable Mode 非定向可連接模式,可以與任何中央設備建立連接,這是默認的可連接模式。

而相關的連接規程則由四種,如下:

連接規程 描述
Auto Connection Establishment Procedure 自動連接建立規程,利用中央設備的設備地址白名單,一旦地址匹配就自動建立連接。
General Connection Establishment Procedure 普通連接建立規程,這是默認的連接規程,沒有額外條件。
Selective Connection Establishment Procedure 可選連接建立規程,利用中央設備的設備地址白名單,只有地址匹配的設備才能建立連接。
Direct Connection Establishment Procedure 定向連接建立規程,與指定地址的外圍設備建立連接。

此外,還有兩個與連接相關的規程,如下:

規程 描述
Connection Parameter Update Procedure 連接參數更新規程,更新連接參數信息。
Terminate Connection Procedure 終止連接規程,終止當前連接。
3.4 可綁定模式和綁定規程

可綁定模式分爲:

可綁定模式 描述
Non-Bondable mode 不可綁定模式,設備不支持配對操作,在配對請求命令中清除Bonding_Flags標誌位。
Bondable mode 可綁定模式,設備將設置認證請求命令中的Bonding_Flags標誌位,並且保存綁定信息。

兩個未綁定的設備,在訪問需要綁定權限的數據時,執行綁定規程。

3.5 週期廣播模式和週期廣播規程

週期廣播模式分爲:

模式 描述
Periodic Advertising Synchronizability mode 週期廣播同步模式,發送週期廣播事件的同步信息,適用於播報設備,
Periodic Advertising mode 週期廣播模式,發送週期廣播數據,適用於播報設備

週期廣播規程爲:

規程 描述
Periodic Advertising Synchronization Establishment procedure 週期廣播同步建立規程,接收週期廣播事件的同步信息並同步週期廣播事件,適用於觀察設備。
3.6 安全模式和認證規程

共有兩種安全模式:

安全模式 描述
LE Security mode 1 安全模式1,使用認證信息保證安全。
LE Security mode 2 安全模式2,使用數字簽名保證安全。

安全模式1下有四種安全級別:

  1. No security (No authentication and no encryption)
  2. Unauthenticated pairing with encryption
  3. Authenticated pairing with encryption
  4. Authenticated LE Secure Connections

四種安全級別圍繞着認證和加密進行,安全級別依次增加,第1種安全級別沒有認證和加密, 第2種安全基本提供未認證的加密,第3、4種安全級別能夠提供認證和加密。

安全模式2下有兩種安全級別:

  1. Unauthenticated pairing with data signing
  2. Authenticated pairing with data signing
    假如設備同時要求加密和數字簽名,將視認證需求選擇合適的安全模式,比如需要認證則選擇模式1.3,不需要認證則選擇模式1.2,如果需要安全連接則選擇模式1.4。

共有四種安全規程,如下:

規程 描述 適用安全模式
Authentication procedure 認證規程,執行認證和加密操作。 安全模式1
Authorization procedure 授權規程,用戶行爲確認是否爲某個操作提供授權。 安全模式1
Connection data signing procedure 連接數據簽名規程,在未加密的連接中傳輸認證的數據。 安全模式2
Authenticate signed data procedure 認證已簽名的數據規程,校驗帶有前面的數據是否有效。 安全模式2
Encryption procedure 加密規程,對連接和數據進行加密。 安全模式1
3.7 隱私規程

隱私與私有地址有密切關係,跟私有地址相關的規程如下:

規程 描述
Non-resolvable private address generation procedure 不可解析私有地址生成規程
Resolvable private address generation procedure 可解析私有地址生成規程
Resolvable private address resolution procedure 可解析私有地址解析規程

4. 廣播包

廣播包和掃描響應使用相同的數據格式,如下:
在這裏插入圖片描述

一個廣播包由多個AD Structure組成,傳統廣播包的最大長度爲31字節,擴展廣播包的最大長度爲255字節,未佔用的數據則補零。

一個AD Structure中包含三個元素:長度、廣播數據類型和廣播數據。

其中長度指廣播數據類型加上廣播數據的總長度,廣播數據類型決定了廣播數據的屬性,可以代表設備名、設備地址或服務的UUID。完整的廣播數據類型可以在官方網站檢索(鏈接)。

動態的廣播數據適合放在廣播包中發送,靜態的廣播數據適合放在掃描響應包中發送。

7. GAP特徵項

每個BLE設備的GATT均包含必要的GAP服務項,GAP服務項包含以下特徵項:

詳細內容,點擊跳轉→ cc2640廣播數據格式簡介

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章