# 蓝牙 性能测试

1. 本文档介绍如何使用 iperf3 工具，通过 蓝牙PAN 协议对芯片经典蓝牙性能进行测试。
2. 通过蓝牙PAN协议，开发板与开启网络共享的手机(NAP)建立IP连接，然后使用 iperf3 工具进行数据传输，从而评估蓝牙的实际性能。

**蓝牙 性能测试的关注点：**

在测试蓝牙性能时，主要关注以下几个方面：

1. **带宽和吞吐量：** 蓝牙BR/EDR的理论最大净吞吐量约为2.1 Mbps，测试时应设置合理的带宽上限。
2. **延迟：** 蓝牙跳频特性可能导致短时波动，需多次测试取平均值。
3. **丢包率：** 蓝牙使用跳频技术，但受干扰（如Wi-Fi同频）或距离影响仍可能丢包。iperf的UDP模式可精确统计丢包率。
4. **信号强度和覆盖范围：** 由于蓝牙天线设计，设备相对方位可能影响信号质量，测试过程中保持设备相对位置固定。

本章节提供使用`iperf3`工具进行 蓝牙 性能测试的详细步骤与指南。关于 [iperf3](../linux_command_manual/cmd_iperf3.md) 的使用说明，请参考其官方文档。


## 测试准备工作

性能测试示意图：

![image-20241212-152024](_static/_images/14-bluetooth_performance/screenshot-20260312-130851.png)

在进行 蓝牙 性能测试前，请确保完成以下准备：

1. **手机下载 Termux 终端：** Termux 安卓下载地址：`https://github.com/termux/termux-app/releases`

    ![image-20241212-152024](_static/_images/14-bluetooth_performance/screenshot-20260312-124606.png)


2. **在手机上开启 蓝牙网络共享：** 开启蓝牙
    - Android手机：路径通常在 设置 -> 个人热点 -> 蓝牙网络共享。
    - iOS的蓝牙共享通常仅限于苹果设备之间。如果你的测试环境是iPhone和Linux开发板，建议换用Android手机。

    ![image-20241212-152024](_static/_images/14-bluetooth_performance/screenshot-20260312-124623.png)

3. **启用板端 蓝牙 功能：** 确保开发板已开启 蓝牙并连接到手机，配对详细方法参照[蓝牙配对连接](../../linux_development/driver_develop_guide/34-Bluetooth_Driver_Debug_Guide.html#bluetooth)。配对前注意区分模组进行初始化。

    ```bash
    [bluetooth]# pair C4:2B:44:15:AD:FA
    Attempting to pair with C4:2B:44:15:AD:FA
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA Connected: yes
    [horno30]# Request confirmation
    [agent] Confirm passkey 092258 (yes/no): [DEL] Device 5C:77:59:BF:8F:74 5C-77-59-BF-8F-74
    [agent] Confirm passkey 092258 (yes/no): yes
    [horno30]# hci0 new_link_key C4:2B:44:15:AD:FA type 0x08 pin_len 0 store_hint 1
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA Bonded: yes
    [horno30]# [DEL] Device 6F:36:92:14:42:2F 6F-36-92-14-42-2F
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA Modalias: bluetooth:v010Fp107Ed1436
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 0000046a-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 00001105-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 00001112-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 00001115-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 00001116-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 00001132-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 00001200-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 00001800-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 00001801-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 0000fdd1-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 0000fe35-0000-1000-8000-00805f9b34fb
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 11c8b310-80e4-4276-afc0-f81590b2177f
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 8ce255c0-200a-11e0-ac64-0800200c9a66
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA UUIDs: 9664aa26-d76c-43ad-9775-d310f253a408
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA ServicesResolved: yes
    [horno30]# [CHG] Device C4:2B:44:15:AD:FA Paired: yes
    [horno30]# Pairing successful
    ```
    - 这个 UUID 00001115-0000-1000-8000-00805f9b34fb 正是 PAN 网络接入点（NAP）服务的标准标识符
    - 代表手机已经开启了蓝牙网络共享功能，并且向你的开发板广播了自己可以提供网络服务
4. **使用 bt-network 连接到手机的 NAP：** Network service is connected 代表连接成功，板端会有个bnep0网卡产生
    ```
    root@buildroot:~# bt-network -c C4:2B:44:15:AD:FA nap &
    Network service is connected
    root@buildroot:~# ifconfig bnep0
    bnep0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            ether b4:2f:03:31:56:51  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 8 (8.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 2  bytes 44 (44.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    ```
5. **使用 udhcpc 共享手机 NAP：** 自动获取ip后可以共享手机 NAP 网络，确保开发板可以通过NAP 网络通信。
    ```
    root@buildroot:~# udhcpc -i bnep0
    udhcpc: started, v1.35.0
    udhcpc: broadcasting discover

    udhcpc: broadcasting discover
    udhcpc: broadcasting select for 192.168.44.234, server 192.168.44.1
    udhcpc: lease of 192.168.44.234 obtained from 192.168.44.1, lease time 3600
    deleting routers
    adding dns 192.168.44.1
    ```

6. **明确服务器和客户端设备：** 开发板既可以作为客户端，也可以作为服务器；对端设备可使用安卓手机。

以下是本测试的网络配置：

- 手机 NAP 作为服务器，IP 地址：192.168.44.1。
- 开发板作为客户端，IP 地址：192.168.44.234。

通过以下命令验证开发板与服务器之间的连接：

```
ping -I bnep0 192.168.44.1
```

执行结果：

```bash
PING 192.168.44.1 (192.168.44.1): 56 data bytes
64 bytes from 192.168.44.1: seq=0 ttl=128 time=32.009 ms
64 bytes from 192.168.44.1: seq=1 ttl=128 time=67.866 ms
64 bytes from 192.168.44.1: seq=2 ttl=128 time=14.513 ms
64 bytes from 192.168.44.1: seq=3 ttl=128 time=18.663 ms
```

## 测试方法
### 步骤一：启动服务器

在安卓手机 上启动 iperf3 服务器：

1.打开 temux 终端下载并安装 iperf3，需要执行pkg install iperf3进行安装，如下图所示：

![image-20241212-152024](_static/_images/14-bluetooth_performance/screenshot-20260310-221327.png)


2.在 temux 终端，通过命令提示符（cmd）运行以下命令启动服务器：

```
iperf3 -s
```

服务器启动后的日志示例：

```
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
```

客户端连接成功后，服务器日志将显示：

![image-20241212-152024](_static/_images/14-bluetooth_performance/screenshot-20260310-221206.png)


### 步骤二：启动客户端

在开发板上启动 iperf3 客户端，连接到手机服务器并开始测试：

```
iperf3 -c 192.168.44.1 -u -t 10 -b 2M
```

命令参数说明：

```
-c：指定服务器的 IP 地址（此处为 192.168.44.1）。
-u：使用 UDP 协议进行测试。
-t：设定总运行时间（此处为 10 秒）。
-b：设置目标带宽（此处为 2 Mbits/sec）。
```

客户端运行日志如下图所示：

![image-20241212-152024](_static/_images/14-bluetooth_performance/screenshot-20260310-220742.png)

<div class="note">
<strong> 注意：</strong> <br>
  1.EVB为了保持接口和功能多样性，Bluetooth的 UART 接口并没有接流控，产品设计时建议接流控，不接流控可能导致蓝牙PAN等大流量数据传输时出现丢包。<br>
</div>

## 测试结果

关于 iperf3 输出日志中字段的含义及分析方法，请查阅 [iperf3-测试结果分析](../linux_command_manual/cmd_iperf3.html#span-id-iperf-result) 章节。

## 性能标准

蓝牙吞吐量预期范围：
- 经典蓝牙 BR/EDR：理论最大 2.1 Mbps，实际通常 1.0-1.45 Mbps
- 干扰环境：因为wifi和蓝牙频段重叠，如果周围Wi-Fi信号多，吞吐量可能会有波动
