1. 程式人生 > >藍芽5最大速率分析報告

藍芽5最大速率分析報告

--------------------------------------------------------------------------------------------------------

文章版權歸為微信公眾號 無線技術聯盟,轉載請註明出處.

作者:XCODER

--------------------------------------------------------------------------------------------------------

之前我有篇文章介紹藍芽4.2的速率問題以及藍芽5的幾大特性,這一篇文章針對藍芽5速率進行詳細分析,文章稍微有點長,建議收藏慢讀。

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

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

2.藍芽5的新2M PHY用於資料傳輸?

3.影響/確定資料吞吐量的因素有哪些?

4.如何計算應用程式中的資料吞吐量?

5.如何最大化資料吞吐量?

藍芽5定義的 LE 2M PHY以及藍芽4.x協議 LE 1M PHY都稱為未編碼PHY,因為它們每位資料使用1個符號表示(與使用S=2或S=8的新LE編碼PHY相比)。

我們需要明白各大晶片廠商資料手冊宣傳的速度(1 Mbps和新的2 Mbps)僅僅只是理論值(空中速率),並且在應用程式中吞吐量會被削減。原因有多種,我們將在下面一一介紹。

藍芽5“2x速度”需要硬體支援,因此老的裝置/晶片/模組將不支援藍芽5 2M PHY(市面已經有手機支援藍芽5 2M PHY)。要注意,為了實現更高吞吐量,需要兩個BLE裝置相互都支援LE 2M PHY。

另一個需要明確的是,當使用更高速度的PHY時,實際上功耗可以做的更低(傳輸相同數量的資料,時間短功耗低)。這是因為減少了晶片工作時間而又沒有增加發射功率。反過來這樣做改善了與2.4 GHz頻譜內的其他無線技術的共存(也是由於減少了無線電工作時間,減少2,4G頻寬的佔用)。

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

1 Mbps(LE 1M PHY),2 Mbps(LE 2M PHY),125 kbps和500 kbps(均使用LE編碼PHY,S = 8和S = 2)的資料速率是無線電在空中的速率傳輸資料,但由於以下原因,應用程式吞吐量是達不到該理論值:

1.藍芽規範限制每個連線間隔的資料包數量

2.資料包之間的幀間間隔(IFS)延遲(150 us)

3.即使沒有可用於傳輸的資料,也需要從裝置傳送空資料包

4.資料包開銷 - 並非資料包中的所有位元組都用於有效負載

為了更好地理解這些因素並瞭解影響應用程式吞吐量的因素,我們必須深入瞭解資料包格式。 下圖顯示了LE 1M PHY和2M PHY資料包的外觀:

我們感興趣的部分(真正定義應用程式資料的部分)是ATT Payload。 從圖中可以看出,藍芽低功耗中的每一層都使用了許多額外開銷位元組。

在4.0和4.1中,最大ATT有效載荷為20個位元組。

在4.2和5.0中,稱為資料長度擴充套件(DLE)的新功能允許ATT有效載荷最多可容納244個位元組的資料。

藍芽5速:使用新的2M PHY實現2倍速

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

1.不能用於主要廣播通道(37,38,39)。

2.可用於與資料包在同一通道上傳送的輔助“輔助資料包”(37個通道:0-36)。

要了解有關主要和次要廣告的更多資訊,請參閱我之前的文章【細說BLUETOOTH 5 【2X 資料吞吐量】】.

藍芽5規格書有說明,LE 1M PHY是強制性的,而LE 2M PHY是可選的,因此,並非所有聲稱支援藍芽5的晶片都必須能夠處理更高的吞吐量。

LE 2M PHY上可以發生從端廣播模式和主端掃描模式,然後使用LE 2M PHY在第二廣告通道上進行連線。

使用者互動資料從一個裝置傳輸到另一個裝置是發生在兩個裝置的連線階段。連線的裝置可以通過更新PHY來協商使用不同PHY。它可以在建立連線後由從裝置或主裝置發起,但主裝置最終將決定哪個PHY(基於從裝置的請求和主裝置支援的PHY)。

下面一些因素會影響BLE應用程式的資料吞吐量:

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

2.連線間隔

3.每個連線間隔的最大資料包數

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

5.資料長度擴充套件(DLE)

6.操作型別:寫入響應與寫入無響應,指示與通知

7.幀間間隔(IFS):後續資料包之間的時間間隔(150 us)

8.傳輸空包

9.資料包開銷 - 並非資料包中的所有位元組都用於應用程式有效負載

根據這9點,我們一點一點詳細地討論。

  • PHY

藍芽5中基本上有三種PHY:原始的1 Mbps PHY,新的2 Mbps和編碼的PHY(S = 2或S = 8)。所使用的PHY將直接影響您可以實現的最大資料吞吐量,因為它確定了通過無線方式傳送資料包的實際原始資料速率。

  • 每個連線事件的連線間隔和最大資料包

連線間隔有效地確定在一個連線事件期間可以傳送多少資料包。值越高,在一個連線事件中可以傳送的資料包越多(某些裝置達到某個限制)。

  • BLE連線間隔和事件

每個連線事件的資料包數量取決於裝置和BLE堆疊,因此它受到限制,並且在特定裝置上的裝置和堆疊版本之間有所不同。此值還取決於裝置的操作,因此無線電可能必須處理其他事件,並且每個連線事件傳送的資料包數量可能達不到堆疊允許的最大值。例如,iOS和Android之間的數量不同,也會根據裝置上執行的作業系統版本而有所不同。

  • 資料長度擴充套件(DLE)

此功能允許資料包大小保持更大的有效負載(最多251個位元組,而禁用時為27個位元組)。此功能是在藍芽規範4.2版中引入的。

  • ATT最大傳輸單元(ATT MTU)

ATT MTU確定傳送器和接收器可以處理的最大資料量以及它們可以儲存在緩衝器中的資料量。

MTU值影響開銷資料量(特別是3個位元組的ATT頭)。允許的最小ATT MTU是27個位元組。這允許最多20個位元組的ATT有效載荷(3個位元組用於ATT報頭,4個位元組用於L2CAP報頭)。

對於MTU值有多高,每個規範沒有限制,但使用中的特定堆疊可能有其自身的侷限性。例如,如果啟用DLE,則最多可以傳輸251 - 4 = 247個位元組(扣除L2CAP標頭大小後)。在考慮ATT報頭(3個位元組)之後,我們留下了244個位元組用於實際的ATT有效載荷資料。如果MTU至少為247位元組,則MTU將適合一個單獨的資料包。如果MTU大於247位元組,則MTU將跨越多個分組,導致吞吐量下降(由於分組開銷和分組之間的定時)。

有效MTU由客戶端和伺服器支援的ATT MTU的最小值確定。例如,如果客戶端支援100位元組的ATT MTU並且伺服器響應它支援150位元組的ATT MTU,則客戶端將決定用於從其上進行連線的ATT MTU是100位元組。

  • 操作型別:寫入響應與寫入無響應,指示與通知

如果需要高吞吐量,那麼我們可以使用Write without response或Notifications將資料從客戶端傳輸到伺服器以及從伺服器傳輸到客戶端。這些操作不需要其他裝置確認收到資料並在下一個資料塊傳送之前做出響應。

  • 幀間間隔(IFS):連續資料包之間的時間延遲(150 us)

從藍芽規範:

  • 傳輸空包

如果接收資料的裝置沒有要發回的資料,則仍需要按照藍芽規範傳送空資料包。

  • 資料包開銷

正如我們在資料包格式圖中看到的那樣,資料包包含一些不計入應用程式資料(ATT資料)的開銷資料。基本上,這些位元組將消耗部分傳輸資料速率,而不考慮作為應用程式資料的一部分發送的任何位元組。

計算應用程式資料吞吐量

敲黑板,畫重點,正如我們之前提到的,有如下些因數會影響資料吞吐量:

1.使用藍芽版本和PHY

2.DLE:資料長度擴充套件 - 啟用與否

3.ATT MTU值

4.連線間隔

5.每個連線事件的最大資料包數

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

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

藍芽版本和PHY確定原始資料傳輸速率。例如,如果我們使用藍芽版本4.2和LE 1M PHY,則傳輸速率為1 Mbps。另一方面,如果我們使用藍芽5 S = 8的 LE編碼PHY,則資料速率降至125 kbps。

DLE,ATT MTU,連線間隔,每個連線間隔的最大資料包數,操作和IFS都是用於實際資料傳輸時間。

資料包格式在傳輸的資料量是實際應用程式資料方面起著重要作用。 LE 1M PHY和LE 2M PHY都具有類似的資料包格式。 LE編碼PHY具有明顯不同的資料包格式,因此我們將分別檢視這兩種情況。

LE 1M PHY和LE 2M PHY計算

返回參考LE未編碼PHY的資料包格式:

針對不同PHY,資料開銷略有不同。 對於1M PHY,前導碼是1位元組,而對於2M PHY,前導碼是2位元組。 MIC欄位是可選欄位,僅用於加密連線。 為簡單起見,我們只考慮未加密的連線 - 對於加密的情況,它只是增加了4個位元組的開銷。

對於LE編碼PHY,資料包格式如下所示(來自藍芽5.0規範第6卷,第B部分,第2.2節):

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

為簡單起見,我們做假設如下:

1.未啟用加密(資料包中不包含MIC欄位)。

2.我們感興趣的是單方向的吞吐量(例如Master to Slave),所以我們假設另一個方向只傳輸空資料包。

3.寫入時,對方無需響應(No Ack)。

步驟:

確定正在使用的PHY並記下原始資料傳輸速率

例如。 對於1M PHY - > 1 Mbps,對於編碼PHY和S = 8 - > 125 kbps

確定從接收器傳送一個數據包和空包的時間。

可以傳送一個數據包的時間包括以下內容:

Data_Packet_Time =傳送空包的時間+ IFS +傳送實際資料包+ IFS的時間。

空包傳輸時間可以如下計算:傳輸空包的時間=空包大小/原始資料速率

空包將包含以下欄位:前導 + 訪問地址(access address)+ LL頭+ CRC。

對於1M PHY,前導將為1位元組,因此空包的總大小= 1 + 4 + 2 + 3位元組= 10位元組= 80位。

(對於2M PHY,空資料包的大小將為88位,因為Premable是2個位元組而不是1個位元組)。基於此,傳輸空1M PHY資料包的時間將是:

傳輸空資料包的時間=空資料包大小/原始資料速率= 80位/ 1兆位/秒= 80微秒資料包將包含資料包格式圖中列出的所有欄位,但MIC欄位除外(加密禁用)。傳輸資料包的時間=資料包size / raw data rate如果我們啟用了DLE並且ATT MTU等於一個數據包中允許的最大位元組數:247個位元組,那麼我們可以將資料包大小計算為:

資料包大小= 1 + 4 + 2 + 4 + 247 + 3位元組= 265位元組= 265 * 8位= 2088 bit

傳送資料包的時間= 2088位/ 1 Mbps = 2,088ms

Data_Packet_Time =傳送空包的時間+ IFS +傳送實際資料包的時間+ IFS = 80 + 2 * 150 + 2088 = 2,468ms

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

Data_Packet_Time =傳送空包的時間+ IFS +傳送實際資料包的時間+ IFS = 88/2 + 2 * 150 +(2 + 4 + 2 + 4 + 247 + 3)* 8/2 = 1,392ms

當啟用DLE並且ATT MTU設定為小於247時,會產生更多開銷(因為現在大於ATT MTU的資料被分成更多資料包)。例如,假設我們將ATT MTU設定為158,那麼為了傳輸244個位元組的應用程式資料,我們需要兩個資料包而不是一個,導致吞吐量因位元組開銷增加而增加而增加資料包之間的IFS。

在另一種情況下,我們可以禁用DLE(有效負載大小最多27個位元組)和ATT MTU大於27個位元組。在這裡,這也將導致需要為相同數量的資料傳送更多資料包,從而導致吞吐量下降。

注意:用於計算上面使用的資料和空資料包大小的方法可以用於計算LE編碼PHY。

確定在一個連線間隔期間可以傳輸多少資料包

前一篇文章講過,這種計算並不總是純粹的數學計算 - 需要考慮使用的堆疊和裝置的限制。在藍芽晶片供應商的SDK中,通常在其文件中會列出最大值。 iOS和Android的最大值隨作業系統版本而變化,所以要弄清楚並不容易。

一旦計算出最大值,就可以計算出適合所選連線間隔的最大理論資料包數。例如,如果我們的連線間隔為7.5毫秒(規範允許的最低值),則對於上面的示例(使用1M PHY,啟用DLE):

每個連線間隔的最大資料包數= [連線間隔/ Data_Packet_Time],其中[]舍入到最大整數(整數)。

每個連線間隔的最大資料包數= [7.5 * 1,000微秒/ 2,468微秒] = 3個數據包

通常,這個數字是不現實的,因為在連續的連線事件上傳送的資料包之間存在時間延遲。因此,對於我們的示例,我們將使用2個數據包而不是3個數據包。

一旦我們計算出每個連線間隔可以傳輸的最大資料包數,我們就可以計算出資料吞吐量:

資料吞吐量 = 每個連線間隔的資料/連線間隔 = 每個連線間隔的資料包數量*每個資料包/連線間隔的資料大小

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

大家會認為,連線間隔越小,速率肯定更高,然,並不是。

下面就根據真實測試資料和計算理論值一一對比。

如有需要理論測試值計算推導的朋友,可以後臺跟我聯絡。

總結:

路由器,藍芽,手機wifi等2.4G的裝置干擾,測試裝置主從之間的距離,裝置之間存在障礙等因數都會影響測試結果。上面列出的測試值和理論值,可能實際環境中的測量資料吞吐量不一致。干擾和傳輸/接收錯誤會影響資料吞吐量(重試,資料丟失和連線事件關閉會導致吞吐量降低)。 但本文詳細分析了所有和速率相關的因素,在實際使用中,大家可以自由DIY。

無線技術聯盟微信公眾號,提供有價值的市場資訊和最新的技術分析,歡迎關注交流,轉載請註明出處。