# BLE 測試文件 ###### tags: `Construction` ## 硬體規格 * PC硬體規格 兩台PC皆為CPU為Intel (R) Core I i9-12900F,內含24個核心,其最高頻率為5.1GHz;GPU為NVIDIA GeForce RTX 3060 * 藍牙模組與相關規格 ![截圖 2024-03-25 晚上10.01.53](https://hackmd.io/_uploads/H1My4bkkC.png) * 本系統所使用之BLE 開發版,當系統運行時,右上方四顆LED燈分別代表不同意義。LED1 亮起時,代表開發版已接上電源;LED2 亮起時,即PC 成功以USB CDC ACM介面連接BLE 裝置;LED3 閃爍表示BLE 裝置已接收到來自IIOT設備之資料;LED4 閃爍則表示BLE 裝置接收到傳送端之資料封包,此設計能夠便於開發人員即時監控系統。 ## 模擬場景與系統架構 如Fig.1所示,PC 之間透過多對BLE 裝置進行資料送收,Nordic 晶片支援ESB(Enhanced ShockBurst)協定,此協定提供了基礎之雙向封包傳輸、封包緩存、封包之acknowledgement、自動重傳等功能 * 當PC1 欲傳送資料給PC2,PC1 將此資料加入序號且複製多份並透過USB 介面同時傳送至其多組BLE 模組,每個發送端之BLE 模組將其封裝成ESB 封包形式於2.4GHz 頻段傳送。PC2 所配置之多組BLE 模組接收配對裝置所發送之封包後透過USB 轉送至PC2。受益於多對BLE 模組平行傳輸且具各自之跳頻機制,當接收端之任一BLE 模組成功接收某一序號資料則視為此序號資料傳輸成功,其他重複資料將被自動丟棄。因此資料傳輸之可靠度會與設備配置之BLE 模組數量成正相關。 * 模擬應用場景其一為IT4.0 工廠控制用途 <p align="center"> <img src="https://hackmd.io/_uploads/SJvqRRJJC.png" alt="系統架構"> <br> <em>Fig. 1: 系統架構</em> </p> ## 運作方法 * PC 與 BLE裝置通訊方法 PC普遍藉由序列埠傳送或接收資料至多對BLE裝置;若其傳輸速率不高,且欲傳輸之資料量大,將導致資料壅塞於佇列中,使PC至BLE間之延遲增加。多數PC和BLE間之傳輸方式普遍使用UART RS232進行傳輸。考量無線TSN之運行場景,資料壅塞將導致傳輸延遲;故採用USB CDC ACM類別作為PC與BLE開發板間傳輸方式,經測試兩者間之傳送速率介於2~2.5Mbps之間 即200~312.5kBps,相較其他常見的通訊協定大量減低 PC與BLE開發板間延遲。此外透過自行撰寫之序列埠程式,PC得以同時讀取與發送訊息至多部BLE裝置,達到平行收發資料之功能。 * BLE裝置間通訊方法 本系統透過Nordic晶片支援之連線模式Low Latency Packet Mode(LLPM)進行一對一連線及資料送收。Nordic nRF52840DK開發板支援LLPM是為低延遲傳輸而設計,LLPM以LE 2M PHY之底層傳輸速度並支援CI調整為1ms 遠低於BLE規範),用以降低BLE傳輸之延遲。此相關之應用如電競滑鼠、虛擬實境(Virtual Reality,VR)穿戴裝置等對延遲要求較高之裝置。因此LLPM為本研究選擇 Nordic nRF52840DK作為BLE模組之考量。 ### ESB(Enhanced ShockBurst)協定 * ESB簡介 本系統採用由Nordic晶片商所開發之ESB協定,其提供了極大的彈性。如圖Fig.2所示,傳送端傳送封包接收端收到封包後將無線電切換且回覆 ACK 若有資料封包欲傳送,亦可於此時利用piggyback的方式跟隨ACK封包送出 。而圖Fig.2中之 Retransmission delay、 Retransmit attempt 次數皆可自由調整,傳送端也可設定 No Ack模式傳送資料封包,亦即傳送端不需等待接收端回覆 ACK即可傳送佇列內下一筆資料,避免隊頭阻塞。本系統將利用此特性,一筆資料僅傳送一次 並搭配多對藍牙裝置進行平行送收,降低延遲及錯誤率。 <p align="center"> <img src="https://hackmd.io/_uploads/Syt271x1C.png" alt="ESB procedure"> <br> <em>Fig. 2: ESB procedure</em> </p> * ESB封包格式 ESB協定標準之封包格式如Fig. 3所示,透過Address欄位,位於同一頻道之設備能夠判別封包是否來自與其配對之BLE裝置,PCF(Packet Control Field)欄位中包含Payload長度、PID(Packed ID)以及NO_ACK,NO_ACK使接收端得知是否需回覆ACK。而圖中黃色Payload區域則根據傳送端欲傳送之封包類型,如同步封包、資料封包、跳頻封包而有不同之設計,以下將依序詳述。 <p align="center"> <img src="https://hackmd.io/_uploads/rks2L1xJR.png" alt="同步封包格式" width="90%"> <br> <em>Fig. 3:ESB packet format</em> </p> * 同步封包格式 傳送端將週期性傳送同步封包至接收端,使接收端根據此封包內之資訊將自身時鐘與傳送端時鐘進行同步,因此封包內需攜帶傳送端之Timer、Counter 數值及Header以利於接收端判別封包類型,如Fig. 4所示。 <p align="center"> <img src="https://hackmd.io/_uploads/BkKBIJx10.png" alt="同步封包格式" width="70%"> <br> <em>Fig. 4:同步封包格式</em> </p> * 資料封包格式 傳送端傳送時間敏感之資料時,為計算封包單向之傳輸延遲及在多對藍牙平行送收之情況下使PC 能夠判斷封包是否重複,因此封包內除資料外需攜帶時間戳記(Timestamp)及序列數(sequence number),如Fig. 5所示。 <p align="center"> <img src="https://hackmd.io/_uploads/SyrMIyxJ0.png" alt="同步封包格式" width="70%"> <br> <em>Fig. 5:資料封包格式</em> </p> * 跳頻封包格式 由於ESB 協定並不像BLE 協定具有動態適應性跳頻(adaptive frequency hopping, AFH)以避開外部環境干擾,因此傳送端在與接收端時間同步情況下,將發送跳頻封包,通知接收端於特定clock 時同時切換至同一頻道,以此落實跳頻機制,因此跳頻封包中須攜帶欲跳頻之時間點 (Tick Target)以及頻道索引值(Chn Index),如Fig. 6所示。 <p align="center"> <img src="https://hackmd.io/_uploads/r11LOJgyR.png" alt="同步封包格式" width="60%"> <br> <em>Fig. 6:跳頻封包格式</em> </p> ## 系統測試 * 錯誤率統計 測試時我們將系統簡化,PC1模擬為IIOT設備之傳送端,以10Hz之頻率傳送大小為32 bytes之資料,並複製多份由USB CDC ACM 介面傳送至其管理之BLE裝置進行封裝,封裝後封包大小約為48 bytes,並由RF送出。接收端收到封包後,BLE裝置將利用封包中之Timestamp來計算延遲,並將資料封包含序號及計算之延遲由USB CDC ACM介面轉送至PC2(模擬為IIOT設備接收端),接著由運行於PC2上之序列埠程式統計封包遺失數量及封包平均延遲。 本系統之測試場域為環境複雜之實驗室,PC1與PC2之直線距離約為10公尺,測試中PC1一共發送十萬筆資料封包,並採取No Ack模式即不要求封包重傳,而不論是封包遺失亦或延遲超出1ms ,PC2將判定此次傳送失敗。 * 測試發生傳輸錯誤的時間觀察是否有集中性 * 測試距離10公尺 * 使用一對固定頻道做五次測試 * 測試每傳送一萬筆封包之失敗數量 * 參考連結 https://hackmd.io/Y_yv-SjDSkK4ee4USBJypw * 使用五個不同的固定頻道做測試 * 測試距離10公尺 * 以下表格為調頻方式 * 目前的輸出功率設定 8dbm (最大) | ESB rf channel | BLE channels |Frequency| |---------------|--------|--------| | 4 | 0 |2404 MHz| | 8 | 2 |2408 MHz| | 12 | 4 |2412 MHz| | 16 | 6 |2416 MHz| | 20 | 8 |2420 MHz| * 以下表格為BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 * 測試地點:MWNL * 平行擺放 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 1 | 1174 | | 2 | 222 | | 3 | 2 | | 4 | 0 | | 5 | 0 | * 有辦法紀錄發生錯誤時的相對時間嗎 * 已解決 * 建議先實驗一組,10次,看發生傳輸錯誤的相對時間有沒有集中性 * 觀察發現不具有集中性 * 另外你們能借到隔離箱嗎,在隔離的環境下錯誤率還是一樣嗎 * 另行測試 * 時間同步斷掉問題 * 已解決 * 資料封包格式?大小? * 格式如下 <img src="https://hackmd.io/_uploads/SyrMIyxJ0.png" alt="同步封包格式" width="70%"> * 長度為64位元 * Data為MD5(Seq_num) * decode後檢查是否相符 ## 4/10~4/16進度 ### 第一種場域測試 * 測試地點:工程二館走廊 * PC硬體規格:PC1 CPU為11th Gen Intel (R) Core(TM) I i7-1165G7,PC2 CPU為Intel (R) Core(TM) I i7-10510U * 測試距離20公尺 * 通訊方式:雙向通訊,假設六對BLE,一台電腦會使用六個BLE,其中三個BLE負責送,三個BLE負責收。 * 架構圖 ![image](https://hackmd.io/_uploads/SJbP0-El0.png) * 使用六個不同的固定頻道做測試 | ESB rf channel | BLE channels |Frequency| |---------------|--------|--------| | 8 | 2 |2408 MHz| | 24 | 8 |2420 MHz| | 40 | 17 |2440 MHz| | 56 | 25 |2456 MHz| | 72 | 33 |2470 MHz| | 78 | 36 |2478 MHz| * 平行擺放(每塊板子間隔10cm) * PC1 * BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 1 | 5591 | | 2 | 1106 | | 3 | 50 | * PC2 * BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 1 | 5512 | | 2 | 1148 | | 3 | 58 | ========================================= * 測試距離20公尺 * 通訊方式:單向通訊,假設五對BLE,傳送端一台電腦使用五個BLE,接收端一台電腦使用五個BLE * 架構圖 ![image](https://hackmd.io/_uploads/H1AdwlSxC.png) * 平行擺放(每塊板子間隔10cm) * BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 1 | 2106 | | 2 | 108 | | 3 | 65 | | 4 | 58 | | 5 | 20 | ========================================= * 測試距離10公尺 * 通訊方式:雙向通訊,假設六對BLE,一台電腦會使用六個BLE,其中三個BLE負責送,三個BLE負責收。 * 架構圖 ![image](https://hackmd.io/_uploads/BJfdkZsl0.png) * 平行擺放(每塊板子間隔10cm) * BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 1 | | | 2 | | | 3 | | | 4 | | | 5 | | ========================================= * 測試距離10公尺 * 通訊方式:單向通訊,假設五對BLE,傳送端一台電腦使用五個BLE,接收端一台電腦使用五個BLE * 架構圖 ![image](https://hackmd.io/_uploads/ry9ryWoxA.png) * 平行擺放(每塊板子間隔10cm) * BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 1 | 505 | | 2 | 157 | | 3 | 35 | | 4 | 8 | | 5 | 1 | * 扇形擺放(每塊板子間隔10cm) * BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 3 | 93 | | 4 | 152 | | 5 | 462 | * 疊起來擺放(每塊板子間隔10cm) * BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 3 | 245 | | 4 | 154 | | 5 | 138 | ### 第二種場域測試 * 測試地點:隔壁實驗室 * PC硬體規格:PC1 CPU為11th Gen Intel (R) Core(TM) I i7-1165G7,PC2 CPU為Intel (R) Core(TM) I i7-10510U * 測試距離10公尺 * 通訊方式:雙向通訊,假設六對BLE,一台電腦會使用六個BLE,其中三個BLE負責送,三個BLE負責收。 * 架構圖 ![image](https://hackmd.io/_uploads/Sy4GrWrgR.png) * 使用六個不同的固定頻道做測試 | ESB rf channel | BLE channels |Frequency| |---------------|--------|--------| | 8 | 2 |2408 MHz| | 24 | 8 |2420 MHz| | 40 | 17 |2440 MHz| | 56 | 25 |2456 MHz| | 72 | 33 |2470 MHz| | 78 | 36 |2478 MHz| * 平行擺放(每塊板子間隔10cm) * PC1 * BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 2 (1x1) | 611 | | 4 (2x2) | 156 | | 6 (3x3) | | * PC2 * BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 2 (1x1) | 632 | | 4 (2x2) | 168 | | 6 (3x3) | | ========================================= * 通訊方式:單向通訊,假設五對BLE,傳送端一台電腦使用五個BLE,接收端一台電腦使用五個BLE * 架構圖 ![image](https://hackmd.io/_uploads/B1jz9gSe0.png) * 平行擺放(每塊板子間隔10cm) * BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 1 | 359 | | 2 | 49 | | 3 | 28 | | 4 | 8 | | 5 | 0 | * 五對BLEs的情況下,前10000筆封包序號對應延遲時間 ![image](https://hackmd.io/_uploads/SJ8sCere0.png) * 扇形擺放(每塊板子間隔15cm) * BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 3 | 35 | | 4 | 129 | | 5 | 150 | * 五對BLEs的情況下,前10000筆封包序號對應延遲時間 ![截圖 2024-04-12 上午11.30.06](https://hackmd.io/_uploads/SJE09mIxC.png) * 疊起來擺放(每塊板子間隔5cm) * BLE裝置數量(對)分別測試每傳送十萬筆封包之失敗數量 | BLE裝置數量(對) | 無跳頻 | |---------------|--------| | 3 | 72 | | 4 | 66 | | 5 | 73 | * 五對BLEs的情況下,前10000筆封包序號對應延遲時間 ![image](https://hackmd.io/_uploads/HJZ-OQLgC.png)