如何提高藍牙BLE的傳輸速率和穩定性

藍牙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米,穩定性也有保證。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章