1. 程式人生 > >藍芽基礎知識整理

藍芽基礎知識整理

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規定的是一些一般性的執行任務。因此,它具有強制性,並作為所有其它藍芽應用規範的基礎。