1. 程式人生 > >藍芽解析(2):協議架構分析

藍芽解析(2):協議架構分析

轉自http://www.wowotech.net/bluetooth/bt_protocol_arch.html

 

1. 前言

 

本文是藍芽解析的第二篇文章,在part1的基礎上,從整體架構的角度,瞭解藍芽協議的組成,以便加深對藍芽的理解。

2. 協議層次

藍芽協議是通訊協議的一種,為了把複雜問題簡單化,任何通訊協議都具有層次性,特點如下:

從下到上分層,通過層層封裝,每一層只需要關心特定的、獨立的功能,易於實現和維護;

在通訊實體內部,下層向上層提供服務,上層是下層的使用者;

在通訊實體之間,協議僅針對每一層,實體之間的通訊,就像每一層之間的通訊一樣,這樣有利於交流、理解、標準化。

藍芽協議也不例外,其協議層次如下:

bluetooth_stack_layer

從OSI(Open System Interconnection)模型的角度看,藍芽是一個比較簡單的協議,它僅僅提供了物理層(Physical Layer)和資料鏈路層(Data Link Layer )兩個OSI層次。但由於藍芽協議的特殊性、歷史演化因素等原因,其協議層次又顯的不簡單,甚至晦澀難懂(如上面圖片所示的Physical Link、Logical Transport等)。

藍芽協議分為四個層次:物理層(Physical Layer)、邏輯層(Logical Layer)、L2CAP Layer和應用層(APP Layer)。

物理層,負責提供資料傳輸的物理通道(通常稱為通道)。通常情況下,一個通訊系統中存在幾種不同型別的通道,如控制通道、資料通道、語音通道等等。

邏輯層,在物理層的基礎上,提供兩個或多個裝置之間、和物理無關的邏輯傳輸通道(也稱作邏輯鏈路)。

L2CAP層,L2CAP是邏輯鏈路控制和適配協議(Logical Link Control and Adaptation Protocol)的縮寫,負責管理邏輯層提供的邏輯鏈路。基於該協議,不同Application可共享同一個邏輯鏈路。類似TCP/IP中埠(port)的概念。

APP層,理解藍芽協議中的應用層,基於L2CAP提供的channel,實現各種各樣的應用功能。Profile是藍芽協議的特有概念,為了實現不同平臺下的不同裝置的互聯互通,藍芽協議不止規定了核心規範(稱作Bluetooth core),也為各種不同的應用場景,定義了各種Application規範,這些應用層規範稱作藍芽profile。

在以上四個層次的基礎上,藍芽協議又將物理層和邏輯層劃分了子層,分別是Physical Channel/Physical Links和Logical Transports/Logical Links,這一劃分,相當使人崩潰,要多花費大量的腦細胞去理解它們,具體請參考下面的分析。

2.1 物理層

物理層負責提供資料傳輸的物理通道,藍芽的物理層分為Physical Channel和Physical Links兩個子層。我們先介紹Physical Channel。

2.1.1 Physical Channel(物理通道)

一個通訊系統中通常存在多種型別的物理通道,藍芽也不例外。另外,由“藍芽協議分析(1)_基本概念”的介紹可知,藍芽存在BR/EDR、LE和AMP三種技術,這三種技術在物理層的實現就有很大的差異,下面讓我們一一介紹。

首先是相同點,BR/EDR、LE和AMP的RF都使用2.4GHz ISM(Industrial Scientific Medical) 頻段,頻率範圍是2.400-2.4835 GHz。

注1:不同國家和地區藍芽的頻率和通道分配情況是不同,本文所有的描述都以中國採用的“歐洲和美國”標準為準。

除了相同點,剩下的都是不同點了。

BR/EDR是傳統的藍芽技術,它這樣定義物理通道:

1)ISM頻率範圍內被分成79個channel,每一個channel佔用1M的頻寬,在0 channel和78 channel之外設立guard band(保護頻寬,Lower Guard Band為2MHz,Upper Guard Band為3.5MHz)。

2)採用跳頻技術(hopping),也就是說,某一個物理通道,並不是固定的佔用79個channel中的某一個,而是以一定的規律在跳動(該規律在技術上叫做"偽隨機碼",就是"假"的隨機碼)。因此藍芽的物理通道,也可以稱作跳頻通道(hopping channel)。

3)BR/EDR技術定義了5種物理通道(跳頻通道),BR/EDR Basic Piconet Physical Channel、BR/EDR Adapted Piconet Physical Channel、BR/EDR Page Scan Physical Channel、BR/EDR Inquiry Scan Physical Channel和BR/EDR Synchronization Scan Channel。

4)BR/EDR Page Scan Physical Channel用於藍芽裝置的發現操作(discovery),即我們常用的搜尋其它藍芽裝置(discover)以及被其它藍芽裝置搜尋(discoverable)。

5)BR/EDR Inquiry Scan Physical Channel用於藍芽裝置的連線操作(connect),即我們常用的連線其它藍芽裝置(connect)以及被其它藍芽裝置連線(connectable)。

6)BR/EDR  Basic Piconet Physical Channel和BR/EDR  Adapted Piconet Physical Channel主要用在處於連線狀態的藍芽裝置之間的通訊。它們的區別是,BR/EDR  Adapted Piconet Physical Channel使用較少的RF跳頻點。BR/EDR Basic Piconet Physical Channel使用全部79個跳頻點,而BR/EDR Adapted Piconet Physical Channel是根據當前的通道情況使用79個跳頻點中的子集,但是跳頻數目也不能少於20個。這個主要是因為藍芽使用ISM頻段,當藍芽和WIFI共存的時候,部分跳頻點被WIFI裝置佔用而使得藍芽裝置在這些跳頻點上的通訊總是失敗,因此,需要避過那些WIFI裝置佔用的頻點。

7)BR/EDR Synchronization Scan Channel可用於無連線的廣播通訊,後續文章會詳細介紹。

8)同一時刻,BT 裝置只能在其中一個物理通道上通訊,為了支援多個並行的操作,藍芽系統採用時分方式,即不同的時間點採用不同的通道。

LE是為藍芽低功耗而生的技術,為了實現低功耗的目標,其物理通道的定義與BR/EDR有些差異:

1)ISM頻率範圍內被分成40個channel,每一個channel佔用2M的頻寬,在0 channel和39 channel之外設立guard band(保護頻寬,Lower Guard Band為2MHz,Upper Guard Band為3.5MHz)。

2)LE技術定義了2種物理通道,LE Piconet channel和LE Advertisement Broadcast Channel。

3)LE Piconet Channel用在處於連線狀態的藍芽裝置之間的通訊,和BR/EDR一樣,採用調頻技術。和BR/EDR不一樣的地方是,只會在40個頻率channel中的37個上面跳頻。

4)LE Advertisement Broadcast Channel用於在裝置間進行無連線的廣播通訊,這些廣播通訊可用於藍芽的裝置的發現、連線(和BR/EDR類似)操作,也可用於無連線的資料傳輸。

8)和BR/EDR一樣,同一時刻,BT 裝置只能在其中一個物理通道上通訊,為了支援多個並行的操作,藍芽系統採用時分方式,即不同的時間點採用不同的通道。

AMP是為高速資料傳輸設計的技術,其物理層規範直接採用802.11(WIFI)的PHY規範,主要有如下特點:

AMP物理通道只有一種,即AMP Physical Channel,主要用於已連線裝置之間的資料通訊,和BR/EDR技術中的BR/EDR Adapted Piconet Physical Channel位於一個級別,可以互相切換使用。

2.1.2 Physical Links(物理鏈路)

由2.1.1的描述可知,藍芽協議為BR/EDR、LE和AMP三種技術定義了8種類型的物理通道,包括:

AMP physical channel

BR/EDR Basic Piconet Physical Channel 
BR/EDR Adapted Piconet Physical Channel 
BR/EDR Page Scan Physical Channel 
BR/EDR Inquiry Scan Physical Channel 
BR/EDR Synchronization Scan Channel

LE Piconet Channel 
LE Advertisement Broadcast Channel

而物理鏈路,則是對這些物理通道(主要是BR/EDR技術中的Basic Piconet Physical Channel和Adapted Piconet Physical Channel)的進一步封裝,其主要特徵是(可參考2.5中的圖片以輔助理解):

1)Physical Link是一個虛擬概念,不對應協議中任何的實體,資料包封包/解包的過程中不被體現。

2)AMP Physical Channel、LE Piconet Channel、LE Advertisement Broadcast Channel均有一個一一對應的Physical Link,分別是AMP Physical Link、LE Active Physical Link、LE Advertising Physical Channel。

3)BR/EDR Page Scan Physical Channel、BR/EDR Inquiry Scan Physical Channel、BR/EDR Synchronization Scan Channel只在特定時間段使用,且無法控制任何屬性,因此不需要再Physical Link中體現。

4)BR/EDR Basic Piconet Physical Channel和BR/EDR Adapted Piconet Physical Channel是BR/EDR技術中已連線裝置之間進行資料通訊的通道,且同一時刻只能根據應用場景選擇一種channel進行資料傳輸。因此這兩個channel被map到BR/EDR Active Physical Link、BR/EDR Parked Physical Link和BR/EDR Connectionless Slave Broadcast Physical Link三個物理鏈路上。

5)BR/EDR Active Physical Link和BR/EDR Parked Physical Link的抽象主要有兩個方面的意義: 
        5-1)遮蔽底層的Basic/Adapted Piconet Physical Channel之間的差異,統一使用Physical Link取代。在需要的時候,可以通過上層的鏈路管理協議,指定使用哪一種physical channel(Basic or Adapted)。 
        5-2)可以通過Physical Link的抽象,控制Physical Channel的一些屬性(如發射功率、收發週期等),以達到節省功耗的目的。而上面的層次(如邏輯層)不需要對這些動作知情。

6)BR/EDR Active Physical Link定義了連線狀態的藍芽裝置在鏈路處於active狀態時的物理鏈路,該物理鏈路對應的裝置的發射功率是可修改的。

7)BR/EDR Parked Physical Link定義了連線狀態的藍芽裝置在鏈路處於parked狀態時的物理鏈路。parked狀態是一種特殊的連線狀態,連線雙方沒有正在進行的資料傳輸,所有的鏈路消耗,都是為保持連線所做的事情。此時可以通過降低在物理通道上的收發頻率而降低功耗。該物理鏈路和BR/EDR Active Physical Link使用相同的物理通道。

8)BR/EDR Connectionless Slave Broadcast Physical Link使用BR/EDR Adapted Piconet Physical Channel,用於一點到多點的廣播通訊。

9)由上面的描述可知,物理鏈路這一層抽象,實在是可有可無,希望大家不要糾結,知道怎麼回事即可。

2.2 邏輯層

邏輯層的主要功能,是在已連線(LE Advertisement Broadcast可以看做一類特殊的連線)的藍芽裝置之間,基於物理鏈路,建立邏輯通道。所謂的邏輯通道,和城市道路上的車道類似:

一條城市道路可以看做一個物理鏈路(可能有兩個方向,我們只考慮其中一個即可),該物理鏈路根據行車用途,可以劃分為多個邏輯通道,如直行車道、右轉車道、左轉車道、掉頭車道、快速車道、慢速車道等等。

這裡的車道(邏輯通道),從物理角度看,並沒有什麼分別,只是為了方便交通(資料傳輸),人為的抽象出來的。和車道類似,藍芽邏輯通道的劃分依據是傳輸型別,主要包括下面3類(即Logical Link):

1)用於管理底層物理鏈路的控制類傳輸,包括AMP-C、ACL-C、PSB-C、LE-C、ADVB-C。

2)傳輸使用者資料的使用者類傳輸,包括AMP-U、ACL-U、PSB-U、LE-U、ADVB-U。

3)其它比較特殊的傳輸型別,包括流式傳輸(stream)、PBD(Profile Broadcast Data)。

以上每種Logic Link都會在下層對應一個Logical Transport,這些Logical Transport具有一些屬性值,如流控、應答/重傳機制等。如下:

AMP ACL(Asynchronous Connection-Oriented Link),基於AMP技術的、面前連線的、非同步傳輸鏈路,為AMP-U提供服務。

BR/EDR ACL,基於BR/EDR技術的ACL鏈路,為ACL-C、ACL-U提供服務。

SCO/eSCO(Synchronous Connection-Oriented/Extended SCO),基於BR/EDR技術的、面向連線的、同步傳輸鏈路,為stream型別的Logical Link提供服務。

ASB(Active Slave Broadcast)、PSB(Parked Slave Broadcast),基於BR/EDR技術的、面向連線的廣播傳輸鏈路,為ACL-U、PSB-U、PSB-C提供服務。

CSB(Connectionless Slave Broadcast),基於BR/EDR技術的、無連線的廣播鏈路,為PBD提供服務。

LE ACL,基於LE技術的、面前連線的、非同步傳輸鏈路,為LE-U、LE-C提供服務。

ADVB(Advertising Broadcast),基於LE技術的、廣告/廣播鏈路,為ADVB-U、ADVB-C提供服務。

注2:AMP-C沒有對應的Logical Transport,而是直接控制AMP Physical Link完成所需功能。

注3:藍芽邏輯層的抽象也是讓人醉了!還是那句話,不要逼自己去理解一個瘋子的行為,不然自己也會瘋的。

2.3 L2CAP Channels

L2CAP是Logical Link Control and Adaptation Protocol(邏輯鏈路控制和適配協議)的縮寫,藍芽協議到這個層次的時候,就清爽多了:

對下,它在使用者類XXX-U Logical Link的基礎上,抽象出和具體技術無關的資料傳輸通道(包括單播和廣播兩類),至此使用者就不再需要關心繁雜的藍芽技術細節。

對上,它以L2CAP channel endpoints的概念(類似TCP/IP中的埠),為具體的應用程式(profile)提供獨立的資料傳輸通道(當然,也是一個邏輯通道)。

2.4 Profiles

profile是藍芽Application的代指,也可以翻譯為服務,為了實現不同平臺下的不同裝置的互聯互通,藍芽協議為各種可能的、有通用意義的應用場景,都制定的了規範,如SPP、HSP、HFP、FTP、IPv6/6LoWPAN等等。

Profiles基於L2CAP提供的L2CAP channel endpoints實現,在它們對應的層次上進行資料通訊,以完成所需功能。有關藍芽profile的介紹,會在後續文章中陸續給出,這裡就不再詳細說明了。

2.5 總結

下面圖片包含上面各個層次(除了APP layer)中涉及到的一些實體、概念以及相互關係,供大家參考。

Overview of transport architecture entities and hierarchy

摘錄自:Core_v4.2.pdf---->Vol1: Architecture & Terminology Overview---->Part A: Architecture---->3 DATA TRANSPORT ARCHITECTURE---->3.2 TRANSPORT ARCHITECTURE ENTITIES

3. 藍芽核心框架

藍芽規範有兩類:一類是藍芽核心規範,由Bluetooth Core Specification定義,囊括到L2CAP層,以及相關的核心profile;另一類是藍芽Application規範,包含了各種各樣的profile規範(具體可參考“https://www.bluetooth.com/specifications/adopted-specifications”中的列表)。

藍芽核心規範所定義的框架如下:

Bluetooth core system architecture摘錄自:Core_v4.2.pdf ---->Vol1: Architecture & Terminology Overview---->Part A: Architecture---->2 CORE SYSTEM ARCHITECTURE

經過第2章協議層次的介紹,藍芽核心框架已經比較容易理解了,這裡對層次中各個模組做一個簡單的說明,更為詳細的分析,請參考後續的文章。

1)BR/EDR Radio & LE Radio & AMP PHY

藍芽RF層(物理層),包括BR/EDR、LE以及AMP三種。負責在物理channel上收發藍芽packet。

對BR/EDR和LE RF來說,還會接收來自Baseband的控制命令來控制RF頻率的選擇和timing。

AMP PHY使用802.11(WIFI)的規範,本文不再詳細介紹,後續有關AMP的內容,也不過多涉及。

2)Link Controller & Baseband resource management

Link Controller和Baseband resource management組成了藍芽的基帶(baseband)。

Link Controller負責鏈路控制,主要是根據當前物理channel的引數、邏輯channel的引數、邏輯transport的引數將資料payload組裝成bluetooth packet。另外,通過Link Control Protocol(對LE來說是LL Layer Protocol),可以實現流控、ack、重傳等機制。

Baseband resource management,主要用於管理RF資源。

3)Link Manager

Link Manager主要負責建立、修改、釋放藍芽邏輯連線(Logical Link),同時也負責維護藍芽裝置之間物理連線(Physical Link)的引數。它的功能主要是通過Link Management Protocol(LMP,for BR/EDR)和Link Layer Protocol(LL,for LE)完成。

4)Device Manager

Device Manager主要負責控制藍芽裝置的通用行為(藍芽資料傳輸除外的行為),主要是:

搜尋附近的藍芽裝置

連線到其他的藍芽裝置

使得本地的藍芽裝置connectable和discoverable

控制本地藍芽裝置的屬性(例如本地藍芽裝置的名字、link key等)

5)HCI(Host Controller Interface)

我們在“藍芽協議分析(1)_基本概念”介紹過,藍芽系統分為Bluetooth Controller和Bluetooth Host兩個大的block。它們之間通過HCI介面以HCI協議進行通訊。

6)L2CAP

L2CAP位於Bluetooth Host中,包括兩個子模組:

Channel Manager主要負責建立、管理、釋放L2CAP channel。

L2CAP Resource Manager負責統一管理、排程L2CAP channel上傳遞的PDU(Packet Data Unit),以確保那些高QoS的packet可以獲得對物理通道的控制權。

7)SMP(Security Manager Protocol)

SMP是一個點對點的協議,基於專用的L2CAP channel,用於生成加密(encryption)和識別(identity)用的密匙(keys)。

8)SDP(Service Discover Protocol)

SDP也是一個點對點的協議,基於專用的L2CAP channel,用於發現其它藍芽裝置能提供哪些profile以及這些profile有何特性。在瞭解清楚了其他藍芽裝置的profile以及特性之後,本藍芽裝置可以發起對自己感興趣的藍芽profile的連線動作。

9)AMP Manager

基於L2CAP channel,和對端的AMP manager互動,用於發現對方是否具備AMP功能,以及收集用於建立AMP物理鏈路的資訊。

10)GAP(Generic Access Profile)

GAP是一個基礎的藍芽profile,用於提供藍芽裝置的通用訪問功能,包括裝置發現、連線、鑑權、服務發現等等。

GAP 是所有其它應用模型的基礎,它定義了在 Bluetooth 裝置間建立基帶鏈路的通用方法。還定義了一些通用的操作,這些操作可供引用 GAP 的應用模型以及實施多個應用模型的裝置使用。GAP 確保了兩個 藍芽裝置(不管制造商和應用程式)可以通過 Bluetooth 技術交換資訊,以發現彼此支援的應用程式。

4. 參考文件

[1]: Core_v4.2.pdf

[2]: https://www.bluetooth.org/en-us/Documents/Bluetooth4-2FAQ.pdf

[3]: https://www.bluetooth.com/specifications/adopted-specifications

--------------------- 本文來自 no輸給現實 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/z497544849/article/details/53929515?utm_source=copy