---
# System prepended metadata

title: BLE 測試文件
tags: [Construction]

---

# 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)
