BLE入門 19 ATT MTU 提升BLE數(shù)據(jù)傳輸率

首先,我們從原理上看一下藍(lán)牙應(yīng)用程序數(shù)據(jù)的傳遞路徑,并討論可以優(yōu)化和利用的地方,實現(xiàn)吞吐量優(yōu)化。

通用屬性配置文件(GATT)是開發(fā)人員經(jīng)常與最習(xí)慣于接口的層次, GATT定義了兩個藍(lán)牙低功耗設(shè)備之間傳輸數(shù)據(jù)的協(xié)議。具有特殊屬性是應(yīng)用程序數(shù)據(jù)實體的唯一標(biāo)識。

屬性組形成固定的特性,這些特性為唯一的一組數(shù)據(jù)添加了額外的屬性,例如權(quán)限和交互規(guī)則。一組特性形成一個稱為服務(wù)的大型實體,服務(wù)為給定的特征或功能添加更大的藍(lán)圖。

例如,電池服務(wù)包括電池電量特性,其中包括給定設(shè)備的電池電量。(不是太了解BLE的層的關(guān)系可以翻閱<TI低功耗藍(lán)牙(BLE)介紹>一文)。

屬性協(xié)議(ATT)定義了傳送屬性數(shù)據(jù)的協(xié)議。這包括GATT相關(guān)功能,如寫入請求,寫入響應(yīng),通知,讀取響應(yīng)。簡而言之,GATT為給定的應(yīng)用程序定義和創(chuàng)建適當(dāng)?shù)膶傩裕珹TT創(chuàng)建,傳輸并分析在GATT層中定義的數(shù)據(jù)包。

邏輯鏈路控制和適配協(xié)議(L2CAP)負(fù)責(zé)為諸如ATT,安全管理協(xié)議(SMP)等更高層協(xié)議服務(wù)與管理(QoS),接受鏈路層數(shù)據(jù)加以中繼重組數(shù)據(jù)包,并傳遞給到ATT層和SMT層。

鏈路層(LL)處理L2CAP包的傳輸,同時確保數(shù)據(jù)的保證傳送和完整性。

空中傳輸?shù)腂LE數(shù)據(jù)包格式如下:

注意:
數(shù)據(jù)字段取決于藍(lán)牙規(guī)范:
在藍(lán)牙v4.0和4.1中,數(shù)據(jù)字段的最大大小是27個字節(jié)。
藍(lán)牙v4.2,增加了一個新功能來交換數(shù)據(jù)字段的長度。

BLE數(shù)據(jù)包的數(shù)據(jù)字段將填充L2CAP消息,如下所示:

L2CAP頭部的大小是固定的(4字節(jié)),當(dāng)數(shù)據(jù)字段的最大尺寸是27字節(jié)時,允許每個BLE分組最多傳送23個字節(jié)的ATT數(shù)據(jù)。

劃重點

  1. 理想情況下,我們力求每個鏈路層數(shù)據(jù)包傳輸23個應(yīng)用程序數(shù)據(jù)(鏈路層頭數(shù)據(jù)字段長度占據(jù)4個字節(jié))。
  2. 可以從ATT層入手,加大ATT DATA使得應(yīng)用程序傳輸大于23字節(jié)的數(shù)據(jù)包(鏈路層頭數(shù)據(jù)字段長度占據(jù)4個字節(jié))。

ATT MTU

ATT最大傳輸單元(MTU)是ATT分組的最大長度。 ATT MTU由L2CAP定義,可以在23和無窮之間。藍(lán)牙堆棧的實現(xiàn)是確定客戶端和外設(shè)的ATT MTU的關(guān)鍵因素。

ATT數(shù)據(jù)包具有以下結(jié)構(gòu):

其中OP代碼表示ATT操作,例如寫入命令,通知,讀取響應(yīng)等.ATT數(shù)據(jù)字段包含應(yīng)用程序數(shù)據(jù)。
當(dāng)發(fā)送Write,Read和Notification或Indication包時,還需要包含相關(guān)的屬性句柄(2個八比特組)以識別數(shù)據(jù)。



23字節(jié)是ATT MTU的默認(rèn)值,在此設(shè)置模式下,高位字節(jié)導(dǎo)致13%的開銷數(shù)據(jù)( 3/(3+23) )。

如果從以前的數(shù)據(jù)傳輸速率的文章中回想起來,我們選擇了每個BLE數(shù)據(jù)包的20個字節(jié)的應(yīng)用程序數(shù)據(jù),以匹配Bluetooth v4.0和4.1中允許的默認(rèn)值。

ATT MTU測定

當(dāng)進(jìn)入連接時,客戶端和外可以通過交換MTU請求/響應(yīng)ATT層命令交換它們的MTU。每一方不能傳送比另一方指定的ATT_MTU更大的ATT值。

例如,iPhone 6和6S ATT_MTU是185.這會導(dǎo)致182字節(jié)有效載荷的3/185或1.6%的頭部開銷。 L2CAP將傳送185/23或9個鏈路層分組。
當(dāng)ATT_MTU是23時,185個字節(jié)的有效載荷將被分成185/20或10個ATT分組,這導(dǎo)致8個鏈路層分組。

輸出比較:

我們的計算基于4個BLE數(shù)據(jù)包在一個連接事件和30毫秒的連接間隔。 這些設(shè)置與iOS設(shè)備類似。

當(dāng)給定的連接使用更大的ATT_MTU大小發(fā)送數(shù)據(jù)流時,我們繪制了吞吐量差異。

結(jié)論:

當(dāng)使用更大的ATT_MTU時,吞吐量增加了大約0-15%,因為我們消除了傳輸ATT層開銷字節(jié)并用數(shù)據(jù)替換它們。 使用23字節(jié)倍數(shù)的ATT_MTU大小或(鏈路層數(shù)據(jù)字段 - L2CAP頭大小(4字節(jié)))是理想的。

隨著通過使用更大的ATT包增加吞吐量,這可能需要創(chuàng)建更少的BLE包,這也會降低功耗。

除此雙方協(xié)調(diào)ATT_MTU大小之外還可以通過以下方式提升藍(lán)牙的數(shù)據(jù)傳輸率:

  1. 選擇合適的連接參數(shù),例如減小BLE Connection interval會提升數(shù)據(jù)交互頻率。

  2. 選擇一些不需要RSP的操作方式,例如write without rsp或notification。

參考

https://mp.weixin.qq.com/s/S0o_SdNJoWgTFlwZr-6NQQ

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容