怎麼增加藍芽連線穩定性?

怎麼增加藍芽連線穩定性?莫失莫忘a2021-03-02 14:51:34

藍芽BLE的最大特點就是低功耗,而低速率和簡單的互動協議是降低功耗的重要組成部分。因此BLE一般應用於低速率的近場控制和資料互動,如智慧家電、運動手環等等,小數量的控制和互動對傳輸速度沒有要求,每秒1K位元組就可以了,有時為了功耗可能會更低。但在某些場景下,可能要求BLE儘可能提高傳輸速率,如無線空中升級OTA、無線對講語音傳輸等等。接下來,我們來分析如何提高BLE的速率來滿足需求,並探討BLE連線的穩定性。

一、BLE資料包分析

BLE包的結構是:

preamble(1 Byte)+ AccessAddress(4 Bytes)+ PDU + CRC(3 Bytes)

1)preamble = 10101010 or 01010101

2)Access Address = 0x8e89bedd6

3)連線以後的資料傳輸的PDU是:Header(2 Bytes)+ Payload (27 Bytes max)+MIC(4bytes),所以傳輸一個包的 最大長度是1+4+33+3=41位元組,有效資料最大是27位元組。

二、自定義characteristic的最大長度

從上面分析可見,透過WRITE或者NOTIFY characteristic傳送一個包的最大長度是27位元組。但是這個27位元組指的是BLE底層的協議包格式。對於profile層的characteristic,其最大的長度是20位元組,也即是每個包最大的長度是20位元組。

這是因為profile所用的characteristic處於GATT協議層,而GATT到ATT層需要增加一個位元組的op code,兩個自己的attribute handle。然後ATT到L2CAP適配層需要增加4個位元組的L2CAP頭。所以從GATT到底層需要封裝7個位元組的額外協議資料,因此GATT層最大是20位元組。

其實,按照藍芽BLE的協議,L2CAP協議層自動對資料包進行拆包和封裝,理論上是支援ATT/GATT層更大的資料包的。但一般SDK預設ATT_MTU=23,這樣L2CAP的工作會變得很簡單,事實上,BLE的應用場景也不需要定義太長的資料包,20個位元組足夠了。

三、BLE的傳輸速率分析

根據藍芽BLE協議, 物理層physical layer的傳輸速率是1Mbps,相當於每秒125K位元組。事實上,其只是基準傳輸速率,協議規定BLE不能連續不斷地傳輸資料包,否則就不能稱為低功耗藍芽了。連續傳輸自然會帶來高功耗。所以,藍芽的最高傳輸速率並不由物理層的工作頻率決定的。

在實際的操作過程中,如果主機連線不斷地傳送資料包,要麼丟包嚴重要麼連接出現異常而斷開。

在BLE裡面,傳輸速度受其連線引數所影響。連線引數定義如下:

1)連線間隔。藍芽基帶是跳頻工作的,主機和從機會商定多長時間進行跳頻連線,連線上才能進行資料傳輸。這個連線和廣播狀態和連線狀態的連線不是一樣的意思。主機在從機廣播時進行連線是應用層的主動軟體行為。而跳頻過程中的連線是藍芽基帶協議的規定,完全由硬體控制,對應用層透明。明顯,如果這個連線間隔時間越短,那麼傳輸的速度就增大。連線上傳完資料後,藍芽基帶即進入休眠狀態,保證低功耗。其是1。25毫秒一個單位。

2)連線延遲。其是為了低功耗考慮,允許從機在跳頻過程中不理會主機的跳頻指令,繼續睡眠一段時間。而主機不能因為從機睡眠而認為其斷開連線了。其是1。25毫秒一個單位。明顯,這個數值越小,傳輸速度也高。

藍芽BLE協議規定連線引數最小是5,即7。25毫秒;而android手機規定連線引數最小是8,即10毫秒。Ios規定是16,即20毫秒。

連線引數完全由主機決定,但從機可以發出更新引數申請,主機可以接受也可以拒絕。Android手機一部接受,而ios比較嚴格,拒絕的機率比較高。

一般場景,連線引數設定16,即20毫秒,一般的傳輸速率是50* 20 = 1000位元組/每秒。如果每個連線事件傳輸更多的包,可以獲得更高的傳輸速率。

四、BLE高速傳輸的應用場景和技術實踐

降低連線間隔,提高每個連線事件的發包數能夠顯著地提高速率,但是兩者往往是矛盾的。因為一個連線事件的傳送時間總是有限的。從實踐來看,BLE的傳輸速率不僅跟連線引數有關,還跟CPU的處理能力有關[CC2541的51核要比DA14580的M0遜色不少]。此外還要對傳送和接收流程進行最佳化處理,這個非常重要。需要注意的是,高速率也會帶來穩定性問題,需要最佳化profile的資料互動場景和一些引數。

高速率傳輸會帶來更高的功耗,但是這個功耗應該是遠比經典藍芽的功耗低的。語音傳輸以往一般使用經典藍芽晶片,功耗一般在毫安級別。行動式電子產品對功耗要求很高,對於單純的語音對講場景來說,BLE是可以滿足需求的。語音使用8K取樣率,16位量化,一秒即是16K位元組/每秒。如果使用ADPCM編碼壓縮,可以壓縮四分之一,即4K位元組每秒。對於BLE來說,這個速度是完全可以達到的。如果是8bit量化,不壓縮也是8K位元組每秒。TI官方宣稱CC2541的最大的傳輸速率是5。9K位元組每秒。而DA14580則可以達到8K位元組/每秒的速率。嵌入式企鵝圈基於目前最低功耗藍芽單晶片DA14580已經demo透過,距離超過10米,穩定性也有保證。