在R128使用前我們需要了解BLE的最高吞吐量,以方便評估相關(guān)功能的開發(fā)。
首先我們了解一下哪些因素會影響藍牙的吞吐量:
1、藍牙版本與PHY: 藍牙設(shè)備的版本和物理層(PHY)對于吞吐量有很大影響。例如,R128設(shè)備支持藍牙5.0,而藍牙5.0版本后支持2M PHY,使用2M PHY會獲得更高的數(shù)據(jù)吞吐量。
2、DLE(數(shù)據(jù)長度擴展): 在藍牙4.2版本之后,BLE(藍牙低功耗)開始支持DLE(也稱為長包),使用長包可以使單個BLE數(shù)據(jù)包傳輸?shù)膒ayload達到251字節(jié)。通常,此功能是默認啟用的,這有助于提高數(shù)據(jù)吞吐量。
3、MTU與數(shù)據(jù)發(fā)送量: 協(xié)議規(guī)定LL data PDU的Payload最大為251字節(jié),即一次可以傳輸251字節(jié)的L2CAP數(shù)據(jù)。在L2CAP Data之上還有4個字節(jié)的頭部,因此L2CAP的Payload為251-4=247字節(jié),即一次可以傳輸247字節(jié)的ATT data。而在ATT Data之上還有3個字節(jié)的頭部,所以ATT的payload為247-3=244字節(jié),即一次可以傳輸244字節(jié)的應(yīng)用數(shù)據(jù)。MTU(最大傳輸單元)通常指的是L2CAP的Payload,即ATT data,其大小為247字節(jié)。在發(fā)送數(shù)據(jù)時,應(yīng)盡量減少拆包和組包的過程,以便提高吞吐量。這意味著應(yīng)用在發(fā)送數(shù)據(jù)時,應(yīng)盡量每次發(fā)送不超過244字節(jié)的數(shù)據(jù)。
4、連接間隔: BLE技術(shù)的特點是低功耗,這主要是因為BLE的兩個設(shè)備并不是傳統(tǒng)意義上的長連接,而是間隔一段時間進行周期性交互。這個周期性的間隔稱為連接間隔。連接間隔越小,單位時間內(nèi)可以發(fā)送的數(shù)據(jù)包就越多。因此,為了提高吞吐量,應(yīng)盡量減小連接間隔。
5、每個連接事件的最大數(shù)據(jù)包數(shù): 在藍牙連接過程中,每個連接事件內(nèi)可以發(fā)送的數(shù)據(jù)包數(shù)量通常為7個。如果在一個連接事件內(nèi)發(fā)送過多的數(shù)據(jù)包,可能會導(dǎo)致吞吐量下降。因此,應(yīng)盡量保證在一個連接事件內(nèi)發(fā)送不超過7個數(shù)據(jù)包。
6、寫操作: 在藍牙通信中,write和write_without_response、indicate和notify是常見的操作方式。write操作需要對方確認,效率相對較低;而write_without_response和notify操作則不需要對方確認,效率較高。因此,為了提高吞吐量,應(yīng)優(yōu)先使用write_without_response和notify操作。
針對以上因素,我們可以制定出一套可以滿足最大吞吐需求的正確配置
1、使用2M PHY
(1)若我方作為GATTC,應(yīng)該由我方發(fā)起PHY UPDATE的動作。
在較新的btmanager中已經(jīng)適配(在SDK V0.9版本后才有),老版本上未有。若客戶不使用btmanager,需要自行檢查適配。
(2)若我放作為GATTS,一般支持藍牙的5.0的手機設(shè)備默認有PHY UPDATE的動作。
2、更新LL data length
雖然默認支持長包功能,但是為了兼容4.0和4.1版本,藍牙controller默認還是使用27字節(jié)的包發(fā)送。
需要在連接的時候主動更新LL data length為251字節(jié)。在較新的btmanager中已經(jīng)適配(在SDK V0.9版本后才有)。若客戶不使用btmanager,需要自行檢查適配。
3、MTU與數(shù)據(jù)發(fā)送量
L2CAP MTU 設(shè)置為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
同時,應(yīng)用或測試demo在發(fā)送數(shù)據(jù)時,應(yīng)該每次最多發(fā)送244字節(jié)。
4、連接間隔
連接間隔范圍是7.5ms ~ 4s。
但是并不是越小就越好
- 連接間隔越小,抗干擾能力就越差。
- 若藍牙controller在一個連接事件中能發(fā)送7個數(shù)據(jù)包,連接間隔應(yīng)該設(shè)置大于12.5ms,因為這7個包已經(jīng)占用了大概9.5ms了。
- 建議連接間隔在12.5ms、13.75ms、15ms中嘗試。
(1)若我方作為GATTC,可以在btmg_le_connect中指定為連接間隔即可。
(2)若我放作為GATTS,對方使用的連接間隔太大,我方可以通過協(xié)議棧主動更新,相關(guān)配置
-# 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、增大協(xié)議棧TX和RX buff
增大協(xié)議棧TX buff可以讓數(shù)據(jù)能快速送到藍牙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 可以提高接收效率:
設(shè)置為255是因為包含HCI的包頭4個字節(jié)。
-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發(fā)送數(shù)據(jù)
-
PDU
+關(guān)注
關(guān)注
0文章
96瀏覽量
17341 -
PHY
+關(guān)注
關(guān)注
2文章
323瀏覽量
52858 -
協(xié)議棧
+關(guān)注
關(guān)注
2文章
145瀏覽量
34113 -
HCI
+關(guān)注
關(guān)注
0文章
29瀏覽量
13314 -
BLE技術(shù)
+關(guān)注
關(guān)注
0文章
32瀏覽量
6760 -
R128
+關(guān)注
關(guān)注
0文章
41瀏覽量
277
發(fā)布評論請先 登錄
全志R128硬件設(shè)計指南①
全志R128 Devkit開發(fā)板原理圖模塊介紹及使用說明
網(wǎng)卡吞吐量測試解決方案
iperf固定吞吐量測試如何設(shè)置
聯(lián)詠行車記錄儀方案配RTL8189FTV的WIFI吞吐量測試方法
如何利用NI LabVIEW技術(shù)提高測試系統(tǒng)的吞吐量?
全志R128 BLE最高吞吐量測試正確配置測試
全志R128 BLE最高吞吐量測試正確配置測試
兆易創(chuàng)新GD32W51x吞吐量及場景功耗測試指南
影響ATE電源系統(tǒng)吞吐量的關(guān)鍵因素

評論