蓝牙基础知识整理
1、背景
上一次藍牙過的比較匆忙,這次下定決心要把藍牙的基礎知識和應用搞清楚。
1.1 參考資料
藍牙版本發展概述?http://blog.sina.com.cn/s/blog_d2db96110102xnj6.html
深入淺出低功耗藍牙(BLE)協議棧?https://blog.csdn.net/shunfa888/article/details/80140475
BLE 協議系列之(一) 藍牙介紹?https://blog.csdn.net/zwc1725/article/details/80703326
2、藍牙基礎知識
藍牙協議也是通信協議的一種,目的就是把復雜的問題簡單化,任何通信協議都具有層次性,特點如下:
1、從下到上分層,通過層層封裝,每一層只需要關心特定的、獨立的功能,易于實現和維護
2、在通信實體內部,下層向上層提供服務,上層是下層的用戶。
3、在通信實體之間,協議僅針對每一層。實體間的通信,就像每一層之間的通信一樣,這樣有利于交流、理解、標準化。
當前的藍牙協議包括BR/EDR(Basic Rate/Enhanced Data Rate)、AMP(Alternate MAC/PHYs)、LE(Low Energy)三種技術。
2.1當前藍牙技術特點---藍牙協議版本看
藍牙歷史我不追究,就從V4.0版本藍牙開始。藍牙4.0版本包括3個子規范,即傳統藍牙技術、高速藍牙和低功耗藍牙技術。
目前移動設備上適用的藍牙大多是V4.0以上,經典V4.0是傳統的3.0藍牙升級而成,向下兼容。而BLE4.0 是新的分支,不向下兼容。經典藍牙模塊,一般用于數量比較大的傳輸:如語音、音樂等較高數據量傳輸。經典藍牙模塊可細分為傳統藍牙模塊和高速藍牙模塊。低功耗藍牙模塊是指支持藍牙協議4.0或更高的模塊,特點是成本和功耗的降低,應用于實時性要求比較高的產品中。
藍牙4.0有諸如低成本、跨廠商互操作性、3毫秒低延時、100米以上超長距離、AES-128加密等特點外,有效傳輸距離有所提升。
藍牙4.0 主打的是省電,藍牙V4.1主打的是IOT(物聯網)。
藍牙V4.1 以“internet of things”為目標對V4.0進行軟件升級,在連接性進行提升(在硬件層面V4.0無需任何改動即可使用V4.1)。
表現在:1、V4.1標準下藍牙設備可以同時作為發射方(bt smart,v4.0上貼著的)和接收方(bt smart Ready),并且可以連接到多個設備上。 (主從一體,如智能手環作為主 和防丟器連接,同時也可以作為從 和智能手機相連)
2、長期睡眠下的自動喚醒功能(離開則斷開,回來則直接連上); 3、通過IPV6建立網絡連接???? -----即藍牙芯片設備可以取得互聯網上的唯一標記,與其他的聯網設備進行通信,即藍牙V4.1連上可上網的設備后,就可以直接利用IPV6連接網絡了,實現和WIFI模塊相同的功能,但在兼容性上還在做改進,加油吧,騷年。
藍牙V4.2改善了數據傳輸速度和隱私保護程度,并接入了該設備將可直接通過IPv6和6LoWPAN接入互聯網。 速度提高2.5,數據包容量相當于之前的10倍。低功耗從260kbps---》650Kbps,全功耗仍為2.1Mbps。新標準為固件升級提供了支持。
V4.1 和V4.2都在規格書上添加對無線共存項的測試,因此在4G共存上確保與其的共存性。
當前藍牙協議包括BR/EDR、AMP、LE三種技術。
2.2藍牙模塊分類標準
1、按支持的藍牙協議分
單模藍牙模塊:支持藍牙某一種協議的模塊;
雙模藍牙模塊:同時支持經典藍牙(BT)和低功耗藍牙(BLE)協議的模塊。
2、按應用分
藍牙數據模塊:一般多使用BLE低功耗藍牙模塊
藍牙音頻模塊:音頻需要大碼流的數據傳輸更適合使用BT經典藍牙模塊。
低功耗藍牙和傳統藍牙實際上有很大的不同,低功耗藍牙是nokia的wibree標準上發展起來的。在功耗上,傳統藍牙有3個級別的功耗,class1、class2、class3分別支持100m、10m、1m的傳輸距離;低功耗藍牙沒有功耗級別,一般發送功率在7dbm。
3 低功耗藍牙協議棧
3.1 協議棧架構
BLE工作在免許可的2.4G ISM射頻端,它一開始就設計為高低功耗無線技術。
BLE協議可分為2大部分:BLE?Application 和BLE?Core;而BlueTooth core有包括BLE controller 和BLE Host 2部分。
BLE Core 包括Controller 到Host的L2CAP層,以及相關的核心profile.
BlueTooth Application 包括各種各樣的profile(規范),如HOGP、A2DP、HFP、OOP等。
?
上圖為BLE協議棧整體架構(application+core),要想實現一個BLE應用,首先需要一個支持BLE射頻的芯片,然后還需要提供一個與此芯片配套的BLE協議棧,最后再協議棧上開發自己的應用。因此BLE協議棧是連接芯片和應用的橋梁,是實現整個 BLE應用的關鍵。
圖上的BlueTooth Core 和BlueTooth Application? Host Controller,都是指"邏輯實體"。所謂“邏輯實體”,需要和日常生活中的"物理實體"區分開。如一塊藍牙芯片、主控CPU,就是指物理實體。而藍牙協議所描述的這些“邏輯實體”,不一定會和物理實體一一對應。如在實際應用中,host和Bluetooth Application可能會位于同一物理實體中(主控CPU),而Controller單獨位于另一個物理實體中(藍牙芯片)。
藍牙協議規定了兩個層次的協議,分別為藍牙核心協議和(Buletooth Core)藍牙應用層協議(Bluetooth Application).藍牙核心協議關注對藍牙核心技術的描述和規范,它只提供基礎的機制,并不關心如何使用這些機制;應用層協議,是在藍牙核心協議的基礎上,根據具體的應用需求,定義出各種各種的策略,如FTP,文件傳輸,局域網等。
Controller負責定義RF、Baseband等偏硬件的規范,并在這之上抽象出用于通信的邏輯鏈路(Logical Link);Host負責在邏輯鏈路的基礎上,進行更為友好的封裝,這樣就可以屏蔽掉藍牙技術的細節,讓Bluetooth Application更為方便的使用。
在一個系統中,Host只有一個,但Controller可以是一個,或多個。如:單獨的LE Controller,單獨的BR/EDR Controller,單獨的LE+BR/EDR Controller;在單獨的BR/EDR? Controller或LE+BR/EDR Controller基礎上,增加一個或多個AMP Controller。
3.2 通信實體內從下到上各層分析
3.2.1 物理層PHY
任何一個通信系統,首先要確定的是通信介質(通信通道,Physical Channel)
Physical Layer(PHY)? ----PHY層用來指定BLE所用的無線頻段、調制解調方式和方法。
具體描述:由于BLE屬于無線通信,則其通信介質是一定頻率范圍下的頻帶資源(Frequency Band);BLE的市場定位是個體和民用,因此使用免費的ISM頻段(頻率范圍是2.400~2.4835GHz);為了同時支持多個設備,將整個頻帶分為40份,每份的帶寬為2MHz,稱為RF Channel。--------BLE的物理通道? ?頻點為f=2402+K*2 MHz? k=0~39,帶寬為2MHz的40個RF Channel。
除了物理通道之外,Physical Layer還需要定義RF收發雙方的而一些其他特性:
RF發射相關的特性(Transmitter Characteristics),包括發射功率(Transmission power、調制方式(Modulation),高斯頻移鍵控(Gaussian Frequency Shift Keying ,GFSK)、Spurious Emissions、Radio Frequency Tolerance等等。(不影響本文后續的討論,不用深究);
RF接收相關的特性(Receiver Characteristics),包括接收靈敏度等。
3.2.2、Link Layer 鏈路層
主要功能:在Physical Channel(即40個RF Channel)上可靠收發數據。需要控制RF收發相關的參數以及解決Physical Channel的共享問題,還需要(對于兩個通信實體),有一條獨享的傳輸通道(即logical Link,邏輯鏈路)。另外,由于Physical Channel是不可靠的,Link Layer需要提供校驗、重傳等機制,確保數據傳輸的可靠性。
解決問題1:Physical? Channel的共享問題
1、數據量比較少、發送不頻繁、對時延不很敏感的場景
----Link Layer采用 廣播通信,從40個RF Channel中選取3個,作為廣播通道(advertising? channel);即所有參與者,共享同一個邏輯傳輸通道(廣播通道)
2、數據量大、發送頻率高、對時延較敏感的場景
-----從Link Layer剩余的37個RF Channel中,選取一個,為這種場景里面的通信雙方建立獨立的通道(data channel)------這是連接的過程。
----注意,為了增加對4G(2.4G 頻段)的抗干擾能力,采用跳頻技術(Hopping)。即在多個channel之間隨機但有規律的切換。
解決問題2:如何建立獨享的邏輯鏈路----狀態和角色定義
BLE協議在Link Layer抽象出5中狀態:
Standby Stae、Advertising State、Scanning State、Initiating State、Connection State。 同一時刻設備只能處于一種狀態。
?注意雙向箭頭和單向箭頭。
Link Layer 狀態機變化圖
1、Standby狀態是初始狀態,即不發送數據,也不接受數據。根據上層實體的CMD(如位于Host軟件中GAP),可由其他任何一種狀態進入,也可以切換至出Connection狀態外的任何一種狀態。
2、Advertising狀態是可以通過廣播通道發送數據的狀態,有Standby狀態進入。Advertiser廣播的數據可以由處于Scanning或者Initiating狀態的實體接收。上層實體可通過命令將Advertising狀態切換回Standby狀態。另外,連接成功后,可切換至Connection狀態。
3、Scanning狀態是可以通過廣播通道接收數據的狀態,由Standby狀態進入。上層實體可通過命令將Scanning狀態切換回Standby狀態。
4、Initiating狀態和Scanning狀態類似,不過是一種特殊的接受狀態,由Standby狀態進入,只能接受Adverstiser廣播的connectable的數據,并在接收到數據后,發送連接請求,以便和Advertiser建立連接。當連接成功后,Initiater和對應的Adverstiser都會切換至Connection狀態,
5、Connection狀態是和某個實體建立了單獨通道的裝填,在通道建立之后,由Initiating或Advertising自動切換而來。通道斷開后,會重新回到Standby狀態。
在通道建立后,處于Connection狀態的雙方,有兩種角色Master和Slave。
對于Initiater方稱作Master;? Advertiser方為Slave。? ?主機從機兩種角色。
解決問題3:可靠性---空中點對點通信協議
1、在某一狀態下,和其他實體對應狀態之間的數據交換機制;2、根據上層實體的指令,以及當前的實際情況,負責狀態間切換。---------由空中接口協議(Air Interface Protocol)處理。
兩種類型的Physical Channel(advertising channel 和data channel)統一使用一種packet format。
Preamble(1 octet)? ?Access Address(4 octets) PDU(2~257 octets)? CRC(3 octets)? ?octets 8位字節
數據報格式特別說明:
注1:
Access Address 接入地址: 用于是被是數據包還是廣播包
PDU,BLE在Link Layer的PDU長度最大為257 octets。
Link Layer 總長度在9~264bytes(1+8 ~257+8)?????
注2:
數據鏈路層link Layer 有5種狀態,每種狀態下所傳輸的功能不盡相同,因此,定義了多種PDU類型。
以白名單(White List)的形式定義數據鏈路層的數據過濾機制-------針對廣播通道
數據控制協議(Link Layer Control),用于管理、控制兩個Link Layer實體間所建立的這個Connection。主要功能:
1、更新Connection相關的參數
2、更新該鏈接所使用的調頻圖譜(即使用哪些Physical Channels)
3、執行鏈路加密(Encryption)有關的過程。
3.2.3 HCI
定義Host和Controller(通常是兩顆IC,ESP32可以在一顆上)之間的通信協議,可基于Uart、USB和軟件模擬。
3.2.4?L2CAP Protocol
?
3.2.5?ATT Protocol
BLE的初衷是用于物聯網,物聯網中最重要、最廣泛的應用是信息采集。基于信息采集的需求,BLE抽象出一個協議:Attribute protocol。這個協議將這些信息以"Atributte(屬性)"的形式抽象出來,并提供一些方法,供遠端設備remote devece 讀取、修改這些屬性的值(Attribute Value).
ATT(Attribute Protocol) 屬性層是GATT和GAP的基礎,它定義了BLE協議棧上層的數據結構和組織方式。
屬性概念是ATT層的核心,定義了屬性的內容,規定了訪問屬性的方法和權限。----類似于編程的數據結構
屬性包括三種類型:服務項、特征值和描述符。三者之間存在樹狀包含關系,服務項包含一個或多個特征值,特征值包含一個或多個描述符,多個服務項組織在一起,構成屬性規范(Attribute Profile)。
對于常用的屬性規范,比如體重計、心率計,BLE協議做了具體定義。
只要BLE主從設備均遵守某個Profile來進行設計,那么兩者就能優雅的通信。
GATT Profile 用ATT協議在設備間來傳輸命令、請求、應答、指示、通知和確認消息。這些數據存于Attibute? Protocol PDUS。
Opcode :操作碼---特定命令、請求、應答、指示、通知、確認的操作碼和用于身份驗證的標志。
Attribute Parameter:特定命令或請求的數據, 或者是應答、通知和指示的數據。
Authentication signature: 可選的。
在服務器server設備上: 屬性協議命令和請求以屬性形式存儲
屬性有四部分組成:屬性句柄、屬性類型、屬性值、屬性權限。
2.3.2.4.1? 屬性數據結構
屬性數據結構包含:句柄、類型、屬性值、權限。下圖是邏輯屬性表示。
屬性句柄(Attribute Handle)就是一個對應特定屬性的一個索引。它是一個2字節的十六進制碼,起始于0x0001,在系統初始化時候,各個屬性的句柄遞增(但不一定加一),最大不超過0xFFFF。與編程中的句柄的概念類似,就是某個屬性值的查詢地址。
屬性類型(Attribute Type)是UUID,用于說明屬性值的類型。用以區分當前屬性是服務項或是特征值等。
屬性值(Attribute Value): 數據(由Attribute Type描述,由Attribute handle 索引)。
屬性權限(Attribute permissions):有Server使用決定給定的attribute是否允許寫或讀訪問。由GATT來確認。
?
?
3.2.6?GATT
~1 Role
GATT的角色有兩種:GATT server 和GATT client。客戶端和服務器:提供數據的設備稱為GATT服務器,訪問GATT服務器而獲得數據的設備稱為GATT客戶端
~2?profile 架構
GATTProfile 指定了pfofile data 交換的數據結構。這個結構定義基本元素(如services和characteristics)。所有元素都用Attibute表示。
上圖是GATT Profile的架構。一個profile包含一個或多個services。一個service包括多個characteristics 或其他service的應用(include)。每個characteristic包括值和其他可選的值的信息。在server設備中,service和characteristic和characteristic的組成(valus和descrptors)以Attributes存儲。
~2.1 Characteristic
Characteristic定義至少包括2個屬性,一個屬性用于聲明(characteristic declaration),另一個用于存放特征的值(characteristic value declaration)。另外可能還有特征描述符(characteristic descriptor declaration) 。上述的三種declaration都是包含在獨立的Attribute中。?characteristic declaration之后緊跟characteristic value declaration。而可選的所有characteristic descriptor declaration跟在characteristic value declaration之后。characteristic descriptor declarations之間的順序就那么不重要了。
可以把多個characteristic value declaration聚合在一起成為一個復合的Characteristic。
~2.1.1characteristic declaration 特征聲明
對于Characteristic declaration 特征聲明是一個屬性。
其Attribute Type 為0x2803----- UUID for <<Characteristic>>;? ?特征聲明的UUID類型
其Attribute Value為Characteristic Properties,Characteristic Value Attribute的句柄和Characteristic UUID。
其Attribute Permissions 需要是可讀的且無需身份驗證或授權。
注意:當服務器和客戶端建立信任關系時,特征聲明的Attribute Value 不能改動。
一個service 可能有多個擁有相同Characteristic UUID的 特征聲明。
有必要對特征聲明的三個屬性值在細究一下。
Characteristic Properties---------決定了特征值如何使用、特征描述符如何訪問。如下表3.5所列,如果設置了對應的位,則表中UI對應描述會被允許。位或操作。
~2.1.2?characteristic value declaration 特征值
特征值是一個屬性,它包括特征的值。
其Attribute Type:16-bit BlueTooth UUID 或者是 128-bit的Characteristic UUID。
其Atrribute Vlaue: Characteristic 的值。
Attribute Permissions:有service指定,沒有指定時由spcecific實現。
~2.1.3characteristic descriptor declaration
這里面的內容比較多。
~2.1 Service
Service定義包括service描述(service declaration),也可能包括定義(definitions)和特征定義(Characteristic definitions)。
server設備上Service definitions按Attribute Handle的順序排列。
服務描述是一個Attribute。
Attribute Type屬性類型: 設置為0x2800——《Primary Service》或0x2801——《Secondary Service》.
Attribute Value:16bit的BlueTooth的UUID 或者 128bit 服務UUID。-------稱為服務UUID。客戶端必須同時支持16bit 和128bit 的UUID。一個客戶端可能可以忽略任何具有未知服務UUID的服務定義。一個未知的服務UUID是服務不支持的UUID。
Attribute Permission:必須是可讀的且無需身份驗證或授權。
當存在多個服務,服務定義中有16bit的藍牙UUID服務說明分在一組,128bi的UUID的服務說明分在另一組。
2.3.2.7?GAP-Generic Access Profile
該Profile保證不同的Bluetooth產品可以互相發現對方并建立連接。
GAP定義了藍牙設備如何發現和建立與其他設備的安全/不安全連接。它出一些一般的業務(如詢問、命名和搜索)和一些安全性問題(如擔保)?同時還處理一些有關連接的業務(如鏈路建立、信道和連接建立)。
GAP規定的是一些一般性的運行任務。因此,它具有強制性,并作為所有其它藍牙應用規范的基礎。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結
- 上一篇: 百度云资源下载链接获取
- 下一篇: 10万镜子反射月光,组成3.6平方公里巨