什么是藍(lán)牙?
藍(lán)牙是一種短距的無線通訊技術(shù),可實現(xiàn)固定設(shè)備、移動設(shè)備之間的數(shù)據(jù)交換。一般將藍(lán)牙3.0之前的BR/EDR藍(lán)牙稱為傳統(tǒng)藍(lán)牙,而將藍(lán)牙4.0規(guī)范下的LE藍(lán)牙稱為低功耗藍(lán)牙。
很多人對藍(lán)牙的認(rèn)識還很局限于手機領(lǐng)域,其實藍(lán)牙的應(yīng)用已經(jīng)遠(yuǎn)遠(yuǎn)不止于此。過去幾年里,藍(lán)牙的增長量就達(dá)到了80%,當(dāng)然,低功耗藍(lán)牙的出現(xiàn)也起到關(guān)鍵的作用,相信未來藍(lán)牙會開創(chuàng)一個可交互的物聯(lián)世界。
標(biāo)準(zhǔn)分類
藍(lán)牙4.0標(biāo)準(zhǔn)包括傳統(tǒng)藍(lán)牙模塊部分和低功耗藍(lán)牙模塊部分,是一個雙模標(biāo)準(zhǔn)。低功耗藍(lán)牙也是建立在傳統(tǒng)藍(lán)牙基礎(chǔ)之上發(fā)展起來的,并區(qū)別于傳統(tǒng)模塊,最大的特點就是成本和功耗降低,應(yīng)用于實時性要求比較高。
BLE(Bluetooh Low Energy)藍(lán)牙低能耗技術(shù)是短距離、低成本、可互操作性的無線技術(shù),它利用許多智能手段最大限度地降低功耗。
BLE技術(shù)的工作模式非常適合用于從微型無線傳感器(每半秒交換一次數(shù)據(jù))或使用完全異步通信的遙控器等其它外設(shè)傳送數(shù)據(jù)。這些設(shè)備發(fā)送的數(shù)據(jù)量非常少(通常幾個字節(jié)),而且發(fā)送次數(shù)也很少(例如每秒幾次到每分鐘一次,甚至更少)。
BLE協(xié)議棧的結(jié)構(gòu)和配置
1、協(xié)議有兩個部分組成:Controller和Host
2、Profiles和應(yīng)用總是基于GAP和GATT之上
3、在單芯片方案中,Controller和Host,profiles,和應(yīng)用層都在同一片芯片中
4、在網(wǎng)絡(luò)控制器模式中,Host和Controller是在一起運行的,但是應(yīng)用和profiles在另外一個器件上,比如PC或者其他微控制器,可以通過UART,USB進行操作
5、在雙芯片模式中,Controller運行在一個控制器,而應(yīng)用層,profiles和Host是運行在另外一個控制器上
BLE設(shè)備連接狀態(tài)流程圖
BLE協(xié)議棧各層功能機制
低功耗藍(lán)牙體系結(jié)構(gòu)
如上圖所述,要實現(xiàn)一個BLE應(yīng)用,首先需要一個支持BLE射頻的芯片,然后還需要提供一個與此芯片配套的BLE協(xié)議棧,最后在協(xié)議棧上開發(fā)自己的應(yīng)用??梢钥闯鯞LE協(xié)議棧是連接芯片和應(yīng)用的橋梁,是實現(xiàn)整個BLE應(yīng)用的關(guān)鍵。那BLE協(xié)議棧具體包含哪些功能呢?簡單來說,BLE協(xié)議棧主要用來對你的應(yīng)用數(shù)據(jù)進行層層封包,以生成一個滿足BLE協(xié)議的空中數(shù)據(jù)包,也就是說,把應(yīng)用數(shù)據(jù)包裹在一系列的幀頭(header)和幀尾(tail)中。具體來說,BLE協(xié)議棧主要由如下幾部分組成:
PHY層(Physical layer物理層)。PHY層用來指定BLE所用的無線頻段,調(diào)制解調(diào)方式和方法等。PHY層做得好不好,直接決定整個BLE芯片的功耗,靈敏度以及selectivity等射頻指標(biāo)。
LL層(Link Layer鏈路層)。LL層是整個BLE協(xié)議棧的核心,也是BLE協(xié)議棧的難點和重點。像Nordic的BLE協(xié)議棧能同時支持20個link(連接),就是LL層的功勞。LL層要做的事情非常多,比如具體選擇哪個射頻通道進行通信,怎么識別空中數(shù)據(jù)包,具體在哪個時間點把數(shù)據(jù)包發(fā)送出去,怎么保證數(shù)據(jù)的完整性,ACK如何接收,如何進行重傳,以及如何對鏈路進行管理和控制等等。LL層只負(fù)責(zé)把數(shù)據(jù)發(fā)出去或者收回來,對數(shù)據(jù)進行怎樣的解析則交給上面的GAP或者ATT。
HCI(Host controller interface)。HCI是可選的,HCI主要用于2顆芯片實現(xiàn)BLE協(xié)議棧的場合,用來規(guī)范兩者之間的通信協(xié)議和通信命令等。
GAP層(Generic access profile)。GAP是對LL層payload(有效數(shù)據(jù)包)如何進行解析的兩種方式中的一種,而且是最簡單的那一種。GAP簡單的對LL payload進行一些規(guī)范和定義,因此GAP能實現(xiàn)的功能極其有限。GAP目前主要用來進行廣播,掃描和發(fā)起連接等。
L2CAP層(Logic link control and adaptation protocol)。L2CAP對LL進行了一次簡單封裝,LL只關(guān)心傳輸?shù)臄?shù)據(jù)本身,L2CAP就要區(qū)分是加密通道還是普通通道,同時還要對連接間隔進行管理。
SMP(Secure manager protocol)。SMP用來管理BLE連接的加密和安全的,如何保證連接的安全性,同時不影響用戶的體驗,這些都是SMP要考慮的工作。
ATT(Attribute protocol)。簡單來說,ATT層用來定義用戶命令及命令操作的數(shù)據(jù),比如讀取某個數(shù)據(jù)或者寫某個數(shù)據(jù)。BLE協(xié)議棧中,開發(fā)者接觸最多的就是ATT。BLE引入了attribute概念,用來描述一條一條的數(shù)據(jù)。Attribute除了定義數(shù)據(jù),同時定義該數(shù)據(jù)可以使用的ATT命令,因此這一層被稱為ATT層。
GATT(Generic attribute profile )。GATT用來規(guī)范attribute中的數(shù)據(jù)內(nèi)容,并運用group(分組)的概念對attribute進行分類管理。沒有GATT,BLE協(xié)議棧也能跑,但互聯(lián)互通就會出問題,也正是因為有了GATT和各種各樣的應(yīng)用profile,BLE擺脫了ZigBee等無線協(xié)議的兼容性困境,成了出貨量最大的2.4G無線通信產(chǎn)品。
BLE藍(lán)牙模塊主要應(yīng)用領(lǐng)域
1、移動擴展設(shè)備
2、汽車電子設(shè)備
3、健康醫(yī)療用品:心跳帶、血壓計等
4、定位應(yīng)用:室內(nèi)定位、井下定位等
5、近距離數(shù)據(jù)采集:無線抄表、無線遙測等
6、數(shù)據(jù)傳輸:智能家居室內(nèi)控制、藍(lán)牙調(diào)光、打印機等
BLE協(xié)議棧詳解
協(xié)議概述
所謂協(xié)議,即將指定的字節(jié)按照一定的順序排列起來,以便他人使用自己的設(shè)備時,能通過該協(xié)議同其他設(shè)備進行通信。協(xié)議一特點,就是有固定的幀格式,通過該格式發(fā)送,接收者通過解讀幀格式,進而得到新息內(nèi)容;
BLE連接過程
一般通信協(xié)議,一類通信是直接發(fā)生數(shù)據(jù),當(dāng)設(shè)備接送到數(shù)據(jù)時,直接對數(shù)據(jù)進行解析,當(dāng)接受到的數(shù)據(jù)合法時,即為有效數(shù)據(jù),該類型的通信協(xié)議,主要用在有線通信協(xié)議中,比如Modbus,Can通常采用的即為該類型的通信方式。
另一類通信協(xié)議,則需要新建立連接,當(dāng)雙方連接建立成功了方可通信,例如TCP、BLE;BLE協(xié)議在需要進行通信時,即需要向外發(fā)送廣播信號,告訴接收者,即將和它進行通信,接受者接收到廣播內(nèi)容后,確認(rèn)是與自己通信,于是向廣播者發(fā)送一響應(yīng)信息,這樣當(dāng)廣播者和接受者都有了對方的身份信息時,即表示雙方連接成功。
因此,在連接過程中,必定有相應(yīng)的廣播幀格式。在BLE通信過程中,假設(shè)設(shè)備A需要連其他設(shè)備假設(shè)為B,則A需要不斷地發(fā)送廣播信號(此過程一般有一個時間間隔,在沒發(fā)送廣播數(shù)據(jù)時間內(nèi),芯片處于低功耗狀態(tài)),每發(fā)送一次廣播包,稱之為一次廣播事件。
廣播幀格式
前導(dǎo):
是一個8比特的交替序列
接入地址的第一個比特為0:01010101
接入地址的第一個比特為1:10101010
接入地址:廣播幀為固定地址:0x8E89BED6(低字節(jié)在前)
廣播報文的報頭:
包含4bit廣播報文類型、2bit保留位、1bit發(fā)送地址類型和1bit接收地址類型。
廣播報文類型:
發(fā)送地址類型:
0:公共地址
1:隨機地址
長度:廣播報文的長度域包含8個比特,有效值的范圍是6~37
數(shù)據(jù):廣播者地址(6個字節(jié))+廣播數(shù)據(jù)(31個字節(jié))
校驗:3個字節(jié),為CRC校驗。
廣播數(shù)據(jù):分為有效數(shù)據(jù)和無效數(shù)據(jù)
有效數(shù)據(jù)部分:
包含N個AD Structure,每個AD Structure由Length,AD Type和AD Data組成。其中:
Length:AD Type和AD Data的長度。
ADType:指示AD Data數(shù)據(jù)的含義。詳見https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile/
BLE連接建立過程
1. BLE廣播與掃描
設(shè)備B不斷發(fā)送廣播信號給手機(Observer),如果手機不開啟掃描窗口,手機是收不到設(shè)備B的廣播的,如下圖所示,不僅手機要開啟射頻接收窗口,而且只有手機的射頻接收窗口跟廣播發(fā)送的發(fā)射窗口匹配成功,而且廣播射頻通道和手機掃描射頻通道是同一個通道,手機才能收到設(shè)備B的廣播信號。也就是說,如果設(shè)備B在37通道發(fā)送廣播包,而手機在掃描38通道,那么即使他們倆的射頻窗口匹配,兩者也是無法進行通信的。由于這種匹配成功是一個概率事件,因此手機掃到設(shè)備B也是一個概率事件,也就是說,手機有時會很快掃到設(shè)備B,比如只需要一個廣播事件,手機有時又會很慢才能掃到設(shè)備B,比如需要10個廣播事件甚至更多。
2. 建立連接(connection establishment)
根據(jù)藍(lán)牙spec規(guī)定,advertiser發(fā)送完一個廣播包之后150us(T_IFS),advertiser必須開啟一段時間的射頻Rx窗口,以接收來自observer的數(shù)據(jù)包。Observer就可以在這段時間里給advertiser發(fā)送連接請求。如下圖所示,手機在第三個廣播事件的時候掃到了設(shè)備B,并發(fā)出了連接請求CONN_REQ(CONN_REQ又稱為CONNECT_IND)。
注:圖中M代表手機,S代表設(shè)備B,M->S表示手機將數(shù)據(jù)包發(fā)給設(shè)備B,即手機開啟Tx窗口,設(shè)備B開啟Rx窗口;S->M正好相反,表示設(shè)備B將數(shù)據(jù)包發(fā)給手機,即設(shè)備B開啟Tx窗口,手機開啟Rx窗口。
如圖所示,手機在收到A1廣播包ADV_IND后,以此為初始錨點(這個錨點不是連接的錨點),T_IFS時間后給Advertiser發(fā)送一個connection request命令,即A2數(shù)據(jù)包,告訴advertiser我將要過來連你,請做好準(zhǔn)備。Advertiser根據(jù)connect_req命令信息做好接收準(zhǔn)備,connect_req包含如下關(guān)鍵信息:
Transmit window offset,定義如上圖示
Transmit window size,定義如上圖所示
connect_req數(shù)據(jù)包完整定義如下所示
connect_req其實是在告訴advertiser,手機將在Transmit Window期間發(fā)送第一個同步包(P1)給你,請在這段時間里把你的射頻接收窗口打開。設(shè)備B收到P1后,T_IFS時間后將給手機回復(fù)數(shù)據(jù)包P2(ACK包)。一旦手機收到數(shù)據(jù)包P2,連接即可認(rèn)為建立成功。當(dāng)然,實際情況會比較復(fù)雜,手機有可能收不到P2,這個時候手機將持續(xù)發(fā)送同步包直到超時時間(supervision timeout)到,在此期間只要設(shè)備B回過一次ACK包,連接即算成功。所以一旦P1包發(fā)出,主機(手機)即認(rèn)為連接成功,而不管有沒有收到設(shè)備的ACK包。這也是為什么在Android或者iOS系統(tǒng)中,應(yīng)用經(jīng)常收到連接成功的回調(diào)事件(該回調(diào)事件就是基于P1包有沒有發(fā)出,只要P1包發(fā)出,手機即認(rèn)為連接成功,而不管有沒有收到設(shè)備的ACK包),但實際上手機和設(shè)備并沒有成功建立連接。后續(xù)手機將以P1為錨點(原點),Connection Interval為周期,周期性地給設(shè)備B發(fā)送數(shù)據(jù)包(Packet),Packet除了充當(dāng)數(shù)據(jù)傳送功能,它還有如下兩個非常重要的功能:
同步手機和設(shè)備的時鐘,也就是說,設(shè)備每收到手機發(fā)來的一個包,都會把自己的時序原點重新設(shè)置,以跟手機同步。
告訴設(shè)備你現(xiàn)在可以傳數(shù)據(jù)給我了。連接成功后,BLE通信將變成主從模式,因此把連接發(fā)起者(手機)稱為Master或者Central,把被連接者(之前的Advertiser)稱為Slave或者Peripheral。BLE通信之所以為主從模式,是因為Slave不能“隨性”給Master發(fā)信息,它只有等到Master給它發(fā)了一個packet后,然后才能在規(guī)定的時間把自己的數(shù)據(jù)回傳給Master。
3. 連接失敗
有如下幾種典型的連接失敗情況:
如步驟2圖所示,如果slave在transmit window期間沒有收到master發(fā)過來的P1,那么連接將會失敗。此時應(yīng)該排查master那邊的問題,看看master為什么沒有在約定的時間把P1發(fā)出來。
如果master在transmit window期間把P1發(fā)出來了,也就是說master按照connect_req約定的時序把P1發(fā)出來了,但slave沒有把P2回過去或者沒有在超時時間內(nèi)把P2回過去,那么連接也會失敗。此時應(yīng)該排查slave這邊的問題,看一看slave為什么沒有把P2回過去
如果master把P1發(fā)出來了,slave也把P2回過去了,此時主機或者從機還是報連接失敗,這種情況有可能是軟件有問題,需要仔細(xì)排查master或者slave的軟件。
還有一種比較常見的連接失敗情況:空中射頻干擾太大。此時應(yīng)該找一個干凈的環(huán)境,比如屏蔽室,排除干擾后再去測試連接是否正常。
數(shù)據(jù)幀格式
連接成功后,雙方將可以互相發(fā)送數(shù)據(jù),那么將涉及到其數(shù)據(jù)幀格式:
字段釋義:
LLID:表示此包數(shù)據(jù)是 LL Date PDU 還是 LL Control PDU
00b: Reserved
01b: LL Date PDU:Continuation fragment of L2CAP message, or an Empty PDU.
10b: LL Date PDU:Start of an L2CAP message or a complete L2CAP message with no fragmentation.
11b: LL Control PDU
MIC( Message Integrity Check):信息完整性檢測。涉及到加密操作,上圖中是用虛線表示的,并不是一定要有此項。
MD:這個標(biāo)志位是用來通知對方設(shè)備自己還有其他數(shù)據(jù)準(zhǔn)備發(fā)送。0 表示沒有更多數(shù)據(jù)發(fā)送, 1 表示有更多數(shù)據(jù)準(zhǔn)備發(fā)送。這樣,只要還有數(shù)據(jù)需要發(fā)送,連接事件會自動擴展。一旦不再有數(shù)據(jù)發(fā)送,連接事件立即關(guān)閉。
Note:如何區(qū)分是確定包、新包還是重發(fā)包?
SN:只有一個 bit 位,所以值是在 0 和 1 之間進行切換。如果序列號與之前的一樣,則為重傳報文,如果序列號和之間的不同,則為新報文。
NESN:預(yù)期序列號,它是接收方希望接到的下一包的序列號,也就是數(shù)據(jù)包的確認(rèn)標(biāo)志。當(dāng)設(shè)備接收到序列(SN)為 0 的報文后,在發(fā)送給對方的數(shù)據(jù)包中,應(yīng)將 NESN 設(shè)為 1,這樣對方接收到這個包后,會發(fā)送一個新的數(shù)據(jù)包過來,否則就會重發(fā)上一次序列號為 0 的包。這個標(biāo)志可以用來判斷數(shù)據(jù)包是否被正確接收還是需要重傳。
責(zé)任編輯:xj
原文標(biāo)題:“藍(lán)牙”技術(shù)專題周2 - 藍(lán)牙BLE詳解
文章出處:【微信公眾號:FPGA入門到精通】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
藍(lán)牙
+關(guān)注
關(guān)注
114文章
5862瀏覽量
170936 -
BLE
+關(guān)注
關(guān)注
12文章
670瀏覽量
59494
原文標(biāo)題:“藍(lán)牙”技術(shù)專題周2 - 藍(lán)牙BLE詳解
文章出處:【微信號:xiaojiaoyafpga,微信公眾號:電子森林】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論