藍牙5速率提升方式

這篇文章將包含以下幾個主題:

1.BLE的實際吞吐量是多少涣达?

2.藍牙5的新2M PHY用于數(shù)據(jù)傳輸?

3.影響/確定數(shù)據(jù)吞吐量的因素有哪些政供?

4.如何計算應(yīng)用程序中的數(shù)據(jù)吞吐量琢岩?

5.如何最大化數(shù)據(jù)吞吐量?

藍牙5定義的 LE 2M PHY以及藍牙4.x協(xié)議 LE 1M PHY都稱為未編碼PHY沈善,因為它們每位數(shù)據(jù)使用1個符號表示(與使用S=2或S=8的新LE編碼PHY相比)口叙。

我們需要明白各大芯片廠商數(shù)據(jù)手冊宣傳的速度(1 Mbps和新的2 Mbps)僅僅只是理論值(空中速率)炼绘,并且在應(yīng)用程序中吞吐量會被削減。原因有多種妄田,我們將在下面一一介紹俺亮。

藍牙5“2x速度”需要硬件支持,因此老的設(shè)備/芯片/模塊將不支持藍牙5 2M PHY(市面已經(jīng)有手機支持藍牙5 2M PHY)疟呐。要注意脚曾,為了實現(xiàn)更高吞吐量,需要兩個BLE設(shè)備相互都支持LE 2M PHY启具。

另一個需要明確的是本讥,當使用更高速度的PHY時,實際上功耗可以做的更低(傳輸相同數(shù)量的數(shù)據(jù)鲁冯,時間短功耗低)拷沸。這是因為減少了芯片工作時間而又沒有增加發(fā)射功率。反過來這樣做改善了與2.4 GHz頻譜內(nèi)的其他無線技術(shù)的共存(也是由于減少了無線電工作時間薯演,減少2,4G帶寬的占用)撞芍。

為什么不可能達到BLE的理論速度?

1 Mbps(LE 1M PHY)涣仿,2 Mbps(LE 2M PHY)勤庐,125 kbps和500 kbps(均使用LE編碼PHY,S = 8和S = 2)的數(shù)據(jù)速率是無線電在空中的速率傳輸數(shù)據(jù)好港,但由于以下原因愉镰,應(yīng)用程序吞吐量是達不到該理論值:

1.藍牙規(guī)范限制每個連接間隔的數(shù)據(jù)包數(shù)量

2.數(shù)據(jù)包之間的幀間間隔(IFS)延遲(150 us)

3.即使沒有可用于傳輸?shù)臄?shù)據(jù),也需要從設(shè)備發(fā)送空數(shù)據(jù)包

4.數(shù)據(jù)包開銷 - 并非數(shù)據(jù)包中的所有字節(jié)都用于有效負載

為了更好地理解這些因素并了解影響應(yīng)用程序吞吐量的因素钧汹,我們必須深入了解數(shù)據(jù)包格式丈探。 下圖顯示了LE 1M PHY和2M PHY數(shù)據(jù)包的外觀:

image

我們感興趣的部分(真正定義應(yīng)用程序數(shù)據(jù)的部分)是ATT Payload。 從圖中可以看出拔莱,藍牙低功耗中的每一層都使用了許多額外開銷字節(jié)碗降。

在4.0和4.1中,最大ATT有效載荷為20個字節(jié)塘秦。

在4.2和5.0中讼渊,稱為數(shù)據(jù)長度擴展(DLE)的新功能允許ATT有效載荷最多可容納244個字節(jié)的數(shù)據(jù)。

藍牙5速:使用新的2M PHY實現(xiàn)2倍速

首先了解下藍牙5中使用新LE 2M PHY的局限性:

1.不能用于主要廣播信道(37尊剔,38爪幻,39)。

2.可用于與數(shù)據(jù)包在同一通道上發(fā)送的輔助“輔助數(shù)據(jù)包”(37個通道:0-36)须误。

要了解有關(guān)主要和次要廣告的更多信息挨稿,請參閱我之前的文章【細說BLUETOOTH 5 【2X 數(shù)據(jù)吞吐量】】.

藍牙5規(guī)格書有說明,LE 1M PHY是強制性的京痢,而LE 2M PHY是可選的奶甘,因此,并非所有聲稱支持藍牙5的芯片都必須能夠處理更高的吞吐量祭椰。

LE 2M PHY上可以發(fā)生從端廣播模式和主端掃描模式臭家,然后使用LE 2M PHY在第二廣告信道上進行連接。

用戶交互數(shù)據(jù)從一個設(shè)備傳輸?shù)搅硪粋€設(shè)備是發(fā)生在兩個設(shè)備的連接階段吭产。連接的設(shè)備可以通過更新PHY來協(xié)商使用不同PHY侣监。它可以在建立連接后由從設(shè)備或主設(shè)備發(fā)起,但主設(shè)備最終將決定哪個PHY(基于從設(shè)備的請求和主設(shè)備支持的PHY)臣淤。

image

下面一些因素會影響B(tài)LE應(yīng)用程序的數(shù)據(jù)吞吐量:

1.使用的PHY(LE 1M vs. LE 2M與LE編碼(S = 2或S = 8))

2.連接間隔

3.每個連接間隔的最大數(shù)據(jù)包數(shù)

4.ATT最大傳輸單元(ATT MTU)

5.數(shù)據(jù)長度擴展(DLE)

6.操作類型:寫入響應(yīng)與寫入無響應(yīng)橄霉,指示與通知

7.幀間間隔(IFS):后續(xù)數(shù)據(jù)包之間的時間間隔(150 us)

8.傳輸空包

9.數(shù)據(jù)包開銷 - 并非數(shù)據(jù)包中的所有字節(jié)都用于應(yīng)用程序有效負載

根據(jù)這9點,我們一點一點詳細地討論邑蒋。

PHY

藍牙5中基本上有三種PHY:原始的1 Mbps PHY姓蜂,新的2 Mbps和編碼的PHY(S = 2或S = 8)。所使用的PHY將直接影響您可以實現(xiàn)的最大數(shù)據(jù)吞吐量医吊,因為它確定了通過無線方式發(fā)送數(shù)據(jù)包的實際原始數(shù)據(jù)速率钱慢。

每個連接事件的連接間隔和最大數(shù)據(jù)包

連接間隔有效地確定在一個連接事件期間可以發(fā)送多少數(shù)據(jù)包。值越高卿堂,在一個連接事件中可以發(fā)送的數(shù)據(jù)包越多(某些設(shè)備達到某個限制)束莫。

BLE連接間隔和事件

每個連接事件的數(shù)據(jù)包數(shù)量取決于設(shè)備和BLE堆棧懒棉,因此它受到限制,并且在特定設(shè)備上的設(shè)備和堆棧版本之間有所不同览绿。此值還取決于設(shè)備的操作策严,因此無線電可能必須處理其他事件,并且每個連接事件發(fā)送的數(shù)據(jù)包數(shù)量可能達不到堆棧允許的最大值饿敲。例如妻导,iOS和Android之間的數(shù)量不同,也會根據(jù)設(shè)備上運行的操作系統(tǒng)版本而有所不同怀各。

數(shù)據(jù)長度擴展(DLE)

此功能允許數(shù)據(jù)包大小保持更大的有效負載(最多251個字節(jié)倔韭,而禁用時為27個字節(jié))。此功能是在藍牙規(guī)范4.2版中引入的瓢对。

ATT最大傳輸單元(ATT MTU)

ATT MTU確定發(fā)送器和接收器可以處理的最大數(shù)據(jù)量以及它們可以保存在緩沖器中的數(shù)據(jù)量寿酌。

MTU值影響開銷數(shù)據(jù)量(特別是3個字節(jié)的ATT頭)。允許的最小ATT MTU是27個字節(jié)硕蛹。這允許最多20個字節(jié)的ATT有效載荷(3個字節(jié)用于ATT報頭份名,4個字節(jié)用于L2CAP報頭)。

對于MTU值有多高妓美,每個規(guī)范沒有限制僵腺,但使用中的特定堆棧可能有其自身的局限性壶栋。例如辰如,如果啟用DLE,則最多可以傳輸251 - 4 = 247個字節(jié)(扣除L2CAP標頭大小后)贵试。在考慮ATT報頭(3個字節(jié))之后琉兜,我們留下了244個字節(jié)用于實際的ATT有效載荷數(shù)據(jù)。如果MTU至少為247字節(jié)毙玻,則MTU將適合一個單獨的數(shù)據(jù)包豌蟋。如果MTU大于247字節(jié),則MTU將跨越多個分組桑滩,導致吞吐量下降(由于分組開銷和分組之間的定時)梧疲。

有效MTU由客戶端和服務(wù)器支持的ATT MTU的最小值確定。例如运准,如果客戶端支持100字節(jié)的ATT MTU并且服務(wù)器響應(yīng)它支持150字節(jié)的ATT MTU幌氮,則客戶端將決定用于從其上進行連接的ATT MTU是100字節(jié)。

操作類型:寫入響應(yīng)與寫入無響應(yīng)胁澳,指示與通知

如果需要高吞吐量该互,那么我們可以使用Write without response或Notifications將數(shù)據(jù)從客戶端傳輸?shù)椒?wù)器以及從服務(wù)器傳輸?shù)娇蛻舳恕_@些操作不需要其他設(shè)備確認收到數(shù)據(jù)并在下一個數(shù)據(jù)塊發(fā)送之前做出響應(yīng)韭畸。

幀間間隔(IFS):連續(xù)數(shù)據(jù)包之間的時間延遲(150 us)

從藍牙規(guī)范:

image

傳輸空包

如果接收數(shù)據(jù)的設(shè)備沒有要發(fā)回的數(shù)據(jù)宇智,則仍需要按照藍牙規(guī)范發(fā)送空數(shù)據(jù)包蔓搞。

數(shù)據(jù)包開銷

正如我們在數(shù)據(jù)包格式圖中看到的那樣,數(shù)據(jù)包包含一些不計入應(yīng)用程序數(shù)據(jù)(ATT數(shù)據(jù))的開銷數(shù)據(jù)随橘“苊鳎基本上,這些字節(jié)將消耗部分傳輸數(shù)據(jù)速率太防,而不考慮作為應(yīng)用程序數(shù)據(jù)的一部分發(fā)送的任何字節(jié)。

計算應(yīng)用程序數(shù)據(jù)吞吐量

敲黑板酸员,畫重點蜒车,正如我們之前提到的,有如下些因數(shù)會影響數(shù)據(jù)吞吐量:

1.使用藍牙版本和PHY

2.DLE:數(shù)據(jù)長度擴展 - 啟用與否

3.ATT MTU值

4.連接間隔

5.每個連接事件的最大數(shù)據(jù)包數(shù)

6.操作(寫入響應(yīng)與寫入沒有響應(yīng)幔嗦,以及通知與指示)

7.幀間間隔(IFS):150微秒

藍牙版本和PHY確定原始數(shù)據(jù)傳輸速率酿愧。例如,如果我們使用藍牙版本4.2和LE 1M PHY邀泉,則傳輸速率為1 Mbps嬉挡。另一方面,如果我們使用藍牙5 S = 8的 LE編碼PHY汇恤,則數(shù)據(jù)速率降至125 kbps庞钢。

DLE,ATT MTU因谎,連接間隔基括,每個連接間隔的最大數(shù)據(jù)包數(shù),操作和IFS都是用于實際數(shù)據(jù)傳輸時間财岔。

數(shù)據(jù)包格式在傳輸?shù)臄?shù)據(jù)量是實際應(yīng)用程序數(shù)據(jù)方面起著重要作用风皿。 LE 1M PHY和LE 2M PHY都具有類似的數(shù)據(jù)包格式。 LE編碼PHY具有明顯不同的數(shù)據(jù)包格式匠璧,因此我們將分別查看這兩種情況桐款。

LE 1M PHY和LE 2M PHY計算

返回參考LE未編碼PHY的數(shù)據(jù)包格式:

針對不同PHY,數(shù)據(jù)開銷略有不同夷恍。 對于1M PHY魔眨,前導碼是1字節(jié),而對于2M PHY酿雪,前導碼是2字節(jié)冰沙。 MIC字段是可選字段,僅用于加密連接执虹。 為簡單起見拓挥,我們只考慮未加密的連接 - 對于加密的情況,它只是增加了4個字節(jié)的開銷袋励。

image

對于LE編碼PHY侥啤,數(shù)據(jù)包格式如下所示(來自藍牙5.0規(guī)范第6卷当叭,第B部分,第2.2節(jié)):

image

計算吞吐量的步驟(以Mbps為單位):

為簡單起見盖灸,我們做假設(shè)如下:

1.未啟用加密(數(shù)據(jù)包中不包含MIC字段)蚁鳖。

2.我們感興趣的是單方向的吞吐量(例如Master to Slave),所以我們假設(shè)另一個方向只傳輸空數(shù)據(jù)包赁炎。

3.寫入時醉箕,對方無需響應(yīng)(No Ack)。

步驟:

確定正在使用的PHY并記下原始數(shù)據(jù)傳輸速率

例如徙垫。 對于1M PHY - > 1 Mbps讥裤,對于編碼PHY和S = 8 - > 125 kbps

確定從接收器發(fā)送一個數(shù)據(jù)包和空包的時間。

image

可以發(fā)送一個數(shù)據(jù)包的時間包括以下內(nèi)容:

Data_Packet_Time =發(fā)送空包的時間+ IFS +發(fā)送實際數(shù)據(jù)包+ IFS的時間姻报。

空包傳輸時間可以如下計算:傳輸空包的時間=空包大小/原始數(shù)據(jù)速率

空包將包含以下字段:前導 + 訪問地址(access address)+ LL頭+ CRC己英。

對于1M PHY,前導將為1字節(jié)吴旋,因此空包的總大小= 1 + 4 + 2 + 3字節(jié)= 10字節(jié)=80位损肛。

(對于2M PHY,空數(shù)據(jù)包的大小將為88位荣瑟,因為Premable是2個字節(jié)而不是1個字節(jié))治拿。基于此笆焰,傳輸空1M PHY數(shù)據(jù)包的時間將是:

傳輸空數(shù)據(jù)包的時間=空數(shù)據(jù)包大小/原始數(shù)據(jù)速率= 80位/ 1兆位/秒= 80微秒數(shù)據(jù)包將包含數(shù)據(jù)包格式圖中列出的所有字段忍啤,但MIC字段除外(加密禁用)。傳輸數(shù)據(jù)包的時間=數(shù)據(jù)包size / raw data rate如果我們啟用了DLE并且ATT MTU等于一個數(shù)據(jù)包中允許的最大字節(jié)數(shù):247個字節(jié)仙辟,那么我們可以將數(shù)據(jù)包大小計算為:

數(shù)據(jù)包大小= 1 + 4 + 2 + 4 + 247 + 3字節(jié)= 265字節(jié)= 265 8位= 2088 bit

發(fā)送數(shù)據(jù)包的時間= 2088位/ 1 Mbps = 2,088us

Data_Packet_Time =發(fā)送空包的時間+ IFS +發(fā)送實際數(shù)據(jù)包的時間+ IFS = 80 + 2 150 + 2088 = 2,468us

為了比較同波,在2M PHY的情況下,它將是:

Data_Packet_Time =發(fā)送空包的時間+ IFS +發(fā)送實際數(shù)據(jù)包的時間+ IFS = 88/2 + 2 150 +(2 + 4 + 2 + 4 + 247 + 3) 8/2 = 1,392us

當啟用DLE并且ATT MTU設(shè)置為小于247時叠国,會產(chǎn)生更多開銷(因為現(xiàn)在大于ATT MTU的數(shù)據(jù)被分成更多數(shù)據(jù)包)未檩。例如,假設(shè)我們將ATT MTU設(shè)置為158粟焊,那么為了傳輸244個字節(jié)的應(yīng)用程序數(shù)據(jù)冤狡,我們需要兩個數(shù)據(jù)包而不是一個,導致吞吐量因字節(jié)開銷增加而增加而增加數(shù)據(jù)包之間的IFS项棠。

在另一種情況下悲雳,我們可以禁用DLE(有效負載大小最多27個字節(jié))和ATT MTU大于27個字節(jié)。在這里香追,這也將導致需要為相同數(shù)量的數(shù)據(jù)發(fā)送更多數(shù)據(jù)包合瓢,從而導致吞吐量下降。

注意:用于計算上面使用的數(shù)據(jù)和空數(shù)據(jù)包大小的方法可以用于計算LE編碼PHY透典。

確定在一個連接間隔期間可以傳輸多少數(shù)據(jù)包

前一篇文章講過晴楔,這種計算并不總是純粹的數(shù)學計算 - 需要考慮使用的堆棧和設(shè)備的限制顿苇。在藍牙芯片供應(yīng)商的SDK中,通常在其文檔中會列出最大值税弃。iOS和Android的最大值隨操作系統(tǒng)版本而變化纪岁,所以要弄清楚并不容易。

一旦計算出最大值则果,就可以計算出適合所選連接間隔的最大理論數(shù)據(jù)包數(shù)幔翰。例如,如果我們的連接間隔為7.5毫秒(規(guī)范允許的最低值)西壮,則對于上面的示例(使用1M PHY遗增,啟用DLE):

每個連接間隔的最大數(shù)據(jù)包數(shù)= [連接間隔/ Data_Packet_Time],其中[]舍入到最大整數(shù)(整數(shù))茸时。

每個連接間隔的最大數(shù)據(jù)包數(shù)= [7.5 1,000微秒/ 2,468微秒] = 3個數(shù)據(jù)包

通常,這個數(shù)字是不現(xiàn)實的赋访,因為在連續(xù)的連接事件上發(fā)送的數(shù)據(jù)包之間存在時間延遲可都。因此,對于我們的示例蚓耽,我們將使用2個數(shù)據(jù)包而不是3個數(shù)據(jù)包渠牲。

一旦我們計算出每個連接間隔可以傳輸?shù)淖畲髷?shù)據(jù)包數(shù),我們就可以計算出數(shù)據(jù)吞吐量:

數(shù)據(jù)吞吐量 = 每個連接間隔的數(shù)據(jù)/連接間隔 = 每個連接間隔的數(shù)據(jù)包數(shù)量每個數(shù)據(jù)包/連接間隔的數(shù)據(jù)大小

= 2 244 8位/7.5毫秒= 520,533位/秒?= 508kbps

大家會認為步悠,連接間隔越小签杈,速率肯定更高,然鼎兽,并不是答姥。

下面就根據(jù)真實測試數(shù)據(jù)和計算理論值一一對比。

image

如有需要理論測試值計算推導的朋友谚咬,可以后臺跟我聯(lián)系鹦付。

總結(jié):

路由器,藍牙择卦,手機wifi等2.4G的設(shè)備干擾敲长,測試設(shè)備主從之間的距離,設(shè)備之間存在障礙等因數(shù)都會影響測試結(jié)果秉继。上面列出的測試值和理論值祈噪,可能實際環(huán)境中的測量數(shù)據(jù)吞吐量不一致。干擾和傳輸/接收錯誤會影響數(shù)據(jù)吞吐量(重試尚辑,數(shù)據(jù)丟失和連接事件關(guān)閉會導致吞吐量降低)辑鲤。 但本文詳細分析了所有和速率相關(guān)的因素,在實際使用中杠茬,大家可以自由DIY

轉(zhuǎn)載:https://www.sohu.com/a/256502136_404276

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遂填,一起剝皮案震驚了整個濱河市铲觉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吓坚,老刑警劉巖撵幽,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異礁击,居然都是意外死亡盐杂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門哆窿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來链烈,“玉大人,你說我怎么就攤上這事挚躯∏亢猓” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵码荔,是天一觀的道長漩勤。 經(jīng)常有香客問我,道長缩搅,這世上最難降的妖魔是什么越败? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮硼瓣,結(jié)果婚禮上究飞,老公的妹妹穿的比我還像新娘。我一直安慰自己堂鲤,他們只是感情好亿傅,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瘟栖,像睡著了一般袱蜡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上慢宗,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天坪蚁,我揣著相機與錄音,去河邊找鬼镜沽。 笑死敏晤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的缅茉。 我是一名探鬼主播嘴脾,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了译打?” 一聲冷哼從身側(cè)響起耗拓,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奏司,沒想到半個月后乔询,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡韵洋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年竿刁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搪缨。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡食拜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出副编,到底是詐尸還是另有隱情负甸,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布痹届,位于F島的核電站呻待,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏短纵。R本人自食惡果不足惜带污,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一僵控、第九天 我趴在偏房一處隱蔽的房頂上張望香到。 院中可真熱鬧,春花似錦报破、人聲如沸悠就。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梗脾。三九已至,卻和暖如春盹靴,著一層夾襖步出監(jiān)牢的瞬間炸茧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工稿静, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留梭冠,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓改备,卻偏偏與公主長得像控漠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

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