在R128使用前我們需要了解BLE的最高吞吐量,以方便評估相關功能的開發。
首先我們了解一下哪些因素會影響藍牙的吞吐量:
1、藍牙版本與PHY: 藍牙設備的版本和物理層(PHY)對于吞吐量有很大影響。例如,R128設備支持藍牙5.0,而藍牙5.0版本后支持2M PHY,使用2M PHY會獲得更高的數據吞吐量。
2、DLE(數據長度擴展): 在藍牙4.2版本之后,BLE(藍牙低功耗)開始支持DLE(也稱為長包),使用長包可以使單個BLE數據包傳輸的payload達到251字節。通常,此功能是默認啟用的,這有助于提高數據吞吐量。
3、MTU與數據發送量: 協議規定LL data PDU的Payload最大為251字節,即一次可以傳輸251字節的L2CAP數據。在L2CAP Data之上還有4個字節的頭部,因此L2CAP的Payload為251-4=247字節,即一次可以傳輸247字節的ATT data。而在ATT Data之上還有3個字節的頭部,所以ATT的payload為247-3=244字節,即一次可以傳輸244字節的應用數據。MTU(最大傳輸單元)通常指的是L2CAP的Payload,即ATT data,其大小為247字節。在發送數據時,應盡量減少拆包和組包的過程,以便提高吞吐量。這意味著應用在發送數據時,應盡量每次發送不超過244字節的數據。
4、連接間隔: BLE技術的特點是低功耗,這主要是因為BLE的兩個設備并不是傳統意義上的長連接,而是間隔一段時間進行周期性交互。這個周期性的間隔稱為連接間隔。連接間隔越小,單位時間內可以發送的數據包就越多。因此,為了提高吞吐量,應盡量減小連接間隔。
5、每個連接事件的最大數據包數: 在藍牙連接過程中,每個連接事件內可以發送的數據包數量通常為7個。如果在一個連接事件內發送過多的數據包,可能會導致吞吐量下降。因此,應盡量保證在一個連接事件內發送不超過7個數據包。
6、寫操作: 在藍牙通信中,write和write_without_response、indicate和notify是常見的操作方式。write操作需要對方確認,效率相對較低;而write_without_response和notify操作則不需要對方確認,效率較高。因此,為了提高吞吐量,應優先使用write_without_response和notify操作。
針對以上因素,我們可以制定出一套可以滿足最大吞吐需求的正確配置
1、使用2M PHY
(1)若我方作為GATTC,應該由我方發起PHY UPDATE的動作。
在較新的btmanager中已經適配(在SDK V0.9版本后才有),老版本上未有。若客戶不使用btmanager,需要自行檢查適配。
(2)若我放作為GATTS,一般支持藍牙的5.0的手機設備默認有PHY UPDATE的動作。
2、更新LL data length
雖然默認支持長包功能,但是為了兼容4.0和4.1版本,藍牙controller默認還是使用27字節的包發送。
需要在連接的時候主動更新LL data length為251字節。在較新的btmanager中已經適配(在SDK V0.9版本后才有)。若客戶不使用btmanager,需要自行檢查適配。
3、MTU與數據發送量
L2CAP MTU 設置為247:
-CONFIG_BT_L2CAP_RX_MTU=65
+CONFIG_BT_L2CAP_RX_MTU=247
-CONFIG_BT_L2CAP_TX_MTU=65
+CONFIG_BT_L2CAP_TX_MTU=247
同時,應用或測試demo在發送數據時,應該每次最多發送244字節。
4、連接間隔
連接間隔范圍是7.5ms ~ 4s。
但是并不是越小就越好
- 連接間隔越小,抗干擾能力就越差。
- 若藍牙controller在一個連接事件中能發送7個數據包,連接間隔應該設置大于12.5ms,因為這7個包已經占用了大概9.5ms了。
- 建議連接間隔在12.5ms、13.75ms、15ms中嘗試。
(1)若我方作為GATTC,可以在btmg_le_connect中指定為連接間隔即可。
(2)若我放作為GATTS,對方使用的連接間隔太大,我方可以通過協議棧主動更新,相關配置
-# CONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS is not set
+CONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS=y
+CONFIG_BT_PERIPHERAL_PREF_MIN_INT=11
+CONFIG_BT_PERIPHERAL_PREF_MAX_INT=11
+CONFIG_BT_PERIPHERAL_PREF_SLAVE_LATENCY=0
+CONFIG_BT_PERIPHERAL_PREF_TIMEOUT=42
5、增大協議棧TX和RX buff
增大協議棧TX buff可以讓數據能快速送到藍牙controller。
-CONFIG_BT_CONN_TX_MAX=3
+CONFIG_BT_CONN_TX_MAX=8
-CONFIG_BT_L2CAP_TX_BUF_COUNT=3
+CONFIG_BT_L2CAP_TX_BUF_COUNT=8
增大RX buff 可以提高接收效率:
設置為255是因為包含HCI的包頭4個字節。
-CONFIG_BT_RX_BUF_LEN=88
+CONFIG_BT_RX_BUF_LEN=255
-CONFIG_BT_DISCARDABLE_BUF_SIZE=88
+CONFIG_BT_DISCARDABLE_BUF_SIZE=255
6、使用write_without_response和notify發送數據
-
PDU
+關注
關注
0文章
94瀏覽量
17038 -
PHY
+關注
關注
2文章
305瀏覽量
51883 -
協議棧
+關注
關注
2文章
144瀏覽量
33710 -
HCI
+關注
關注
0文章
29瀏覽量
13030 -
BLE技術
+關注
關注
0文章
28瀏覽量
5922 -
R128
+關注
關注
0文章
41瀏覽量
126
發布評論請先 登錄
相關推薦
全志R128硬件設計指南①
全志R128 Devkit開發板原理圖模塊介紹及使用說明
網卡吞吐量測試解決方案
iperf固定吞吐量測試如何設置
聯詠行車記錄儀方案配RTL8189FTV的WIFI吞吐量測試方法
如何利用NI LabVIEW技術提高測試系統的吞吐量?
全志R128 BLE最高吞吐量測試正確配置測試
全志R128 BLE最高吞吐量測試正確配置測試
影響ATE電源系統吞吐量的關鍵因素
![影響ATE電源系統<b class='flag-5'>吞吐量</b>的關鍵因素](https://file1.elecfans.com/web2/M00/B1/C0/wKgaomVmv0-ASevDAAB3CuzaW_0280.png)
評論