chen55025470 发表于 2026-7-9 10:31:11

【Telink TL322X 测评】第六章:BLE GATT 数据收发测试

# 【Telink TL322X 测评】第六章:BLE GATT 数据收发测试

* **第五章验证 BLE peripheral 固件可以构建和写入后,本章继续测试 BLE 数据通道。**
* **本章重点是 GATT 服务、特征值读写、Notify/Indicate、吞吐和长时间连接稳定性。**

## 6.0 当前自动化验证记录

**本章固件已经完成构建、烧录和读回校验:**

| **项目**         | **结果**                                                               |
| ------------------ | ------------------------------------------------------------------------ |
| **SDK target**   | `acl_connection_demo`                                              |
| **固件**         | `firmware\eval05_acl_connection_data.bin`                        |
| **大小**         | **144020 bytes**                                                       |
| **SHA256**       | `64BA9AC218ABB8291B0BD248087543F0B99D0E35A9FE12C3E1AC3F366E4EE91B` |
| **烧录验证**   | **2026-07-08 15:05**`verified`,读回 SHA256 与本地固件一致         |
| **日志**         | `logs\flash_eval05_acl_connection_data.log`                        |
| **最新验证日志** | `logs\flash_verify_eval05_latest.log`                              |
| **精简验证脚本** | `tools\flash_verify_eval05.ps1`                                    |

**本章已达到的效果:**`acl_connection_demo` 固件已经可以从本章独立源码副本构建、写入 Flash,并通过读回 SHA256 校验。为便于实测 Notify,`Telink SPP: Phone->Module` 写入回调已经补充 Echo Notify,手机写入数据后会从 `Telink SPP: Module->Phone` 收到带序号和 payload 的通知。

## 6.1 本章任务目标

**本章主要完成以下任务:**

```
1. 梳理官方 BLE 示例中的 GATT 服务和特征值;
2. 使用手机或 PC BLE 工具向开发板写入数据;
3. 开发板通过 Notify 或 Indicate 向主机发送数据;
4. 测试不同包长和发送间隔下的稳定性;
5. 记录吞吐、丢包、延迟和异常断连情况。
```

## 6.2 开发板与测试方式

**本章测试链路如下:**

```
构建 acl_connection_demo
      ↓
烧录并读回校验
      ↓
手机或 PC BLE 工具连接开发板
      ↓
枚举 GATT Service / Characteristic
      ↓
执行 Write / Read / Notify / Indicate
      ↓
记录 payload、序号、时间戳、RSSI 和错误
```

## 6.3 独立工程与 SDK 基线

**本章记录目录为:**

```
D:\Project\Evaluation\Telink\eval_projects\05_ble_data_exchange
```

**本章源码副本位于:**

```
src\sdk
```

**本章使用的主要源码入口为:**

```
src\sdk\vendor\acl_connection_demo
```

**工程关键文件:**

```
src\build_config.json
src\source_manifest.md
firmware\eval05_acl_connection_data.bin
logs\flash_eval05_acl_connection_data.log
logs\flash_verify_eval05_latest.log
tools\flash_verify_eval05.ps1
```

## 6.4 关键源码与配置

**与本章相关的主要文件如下:**

| **文件**                                              | **作用**                            |
| ------------------------------------------------------- | ------------------------------------- |
| `src\sdk\vendor\acl_connection_demo\main.c`       | **示例入口**                        |
| `src\sdk\vendor\acl_connection_demo\app.c`      | **BLE 连接、事件和应用主逻辑**      |
| `src\sdk\vendor\acl_connection_demo\app_att.c`    | **GATT 服务和特征值表**             |
| `src\sdk\vendor\acl_connection_demo\app_ui.c`   | **UI、按键、LED 或交互辅助逻辑**    |
| `src\sdk\vendor\acl_connection_demo\app_config.h` | **连接参数、ATT/GATT 相关配置入口** |

**后续需要重点记录 **`app_att.c` 中的 Service UUID、Characteristic UUID、读写属性和 Notify/Indicate 属性。

## 6.5 编译、烧录与读回校验

**重新构建本章工程:**

```
powershell -NoProfile -ExecutionPolicy Bypass -File ..\run_tl322x_eval_matrix.ps1 -OnlyProjects 05_ble_data_exchange -NoFlash
```

**补做烧录和读回校验:**

```
powershell -NoProfile -ExecutionPolicy Bypass -File ..\run_tl322x_eval_matrix.ps1 -OnlyProjects 05_ble_data_exchange
```

**本章用于截图和复测的精简验证脚本:**

```
cd D:\Project\Evaluation\Telink\eval_projects\05_ble_data_exchange
powershell -NoProfile -ExecutionPolicy Bypass -File .\tools\flash_verify_eval05.ps1 -ResetAfterFlash
```

**手动烧录命令格式:**

```
TC.exe all
TC.exe fi -d 1 --chip=TL322X
TC.exe ulf 0 0 -d 1 --chip=TL322X
TC.exe wf 0 -i firmware\eval05_acl_connection_data.bin -d 1 --chip=TL322X
TC.exe rf 0 144020 -o firmware\eval05_acl_connection_data_readback.bin -d 1 --chip=TL322X
TC.exe rst -f -d 1 --chip=TL322X
```

**当前读回校验结果:**

```
Device:
vid_248a&pid_3228&evk_id_0001&bus_003&addr_018
​
Flash information:
flash mid = 0x00166085, flash status = 0x0030, lock area: 0x000000-0x07ffff
flash uid: 41 50 34 5a 39 39 38 03 00 20 76 4c 4c 01 45 78
​
Write flash:
Flash download finish. 144020 bytes 2640 ms
​
Firmware SHA256:
64BA9AC218ABB8291B0BD248087543F0B99D0E35A9FE12C3E1AC3F366E4EE91B
​
Readback SHA256:
64BA9AC218ABB8291B0BD248087543F0B99D0E35A9FE12C3E1AC3F366E4EE91B
​
Result:
PASS, local firmware and flash readback are identical.
​
Run:
reset mcu ok.
```

## 6.6 实测现象

```
1. acl_connection_demo 可以独立构建;
2. 固件已经归档到本章 firmware 目录;
3. 固件可以写入开发板 Flash;
4. 读回 SHA256 与本地固件一致;
5. 固件已通过 rst -f 从 Flash 复位运行;
6. 本章源码在 src\sdk\vendor\acl_connection_demo 中可直接查看和修改。
7. 手机可以枚举到 GATT 服务;
8. Write 写入后板端收到数据;
9. 官方示例默认没有主动 Notify 数据源,已在 `spp_onReceiveData()` 中补充 SPP Echo Notify;
```

## 6.7 图片和视频素材

* **手机 BLE 工具扫描并连接 **`multi_conn` 后,展开 GATT Service/Characteristic 的图片,能看到 Telink SPP 服务和两个 SPP 特征值

!(//m.qjumbo.com/forum/data/attachment/forum/202607/09/102501w11x29f921wk8xdx.jpg)

* **手机向 **`Telink SPP: Phone->Module` 特征值写入数据后的结果,成功状态

!(//m.qjumbo.com/forum/data/attachment/forum/202607/09/102528fs5np1uyndol9lkn.jpg)

* **打开 **`Telink SPP: Module->Phone` 特征值的 Notify,然后向 `Telink SPP: Phone->Module` 写入 `01 02 03 04 05 06 07 08`,显示 `ECHO`、序号、payload 和时间戳

!(//m.qjumbo.com/forum/data/attachment/forum/202607/09/102555zsrmh6m25xg7gns4.jpg)

!(//m.qjumbo.com/forum/data/attachment/forum/202607/09/102700r5e6yuc91uu4uc4a.jpg)

!(//m.qjumbo.com/forum/data/attachment/forum/202607/09/102719ltkqx63sssbg9tu9.jpg)

* **数据吞吐、包长、发送间隔和统计表的照片**

!(//m.qjumbo.com/forum/data/attachment/forum/202607/09/102743w3g0l6d55050l555.jpg)

* `app_att.c` 中服务表或特征值定义位置截图,包含 `TelinkSppServiceUUID`、`TelinkSppDataServer2ClientUUID`、`TelinkSppDataClient2ServerUUID` 和`my_Attributes` 中的 SPP 段落

!(//m.qjumbo.com/forum/data/attachment/forum/202607/09/102819kig0xwbx0tx80y0v.png)

* `TC.exe` 写入、读回和 SHA256 一致的命令行截图,显示 Write flash、Read back flash、Local SHA256、Readback SHA256 和 Result: PASS

!(//m.qjumbo.com/forum/data/attachment/forum/202607/09/102842x3z7i5jpmp21c5ii.png)
* **Notify 连续运行一段时间的稳定性,显示持续接收和多次触发 Notify 的过程的视频**

​

## 6.8 问题记录

### 6.8.1 曾出现 flash loader 同步失败

**本章补烧时曾出现过 **`sws_sync error` 或 `Flash ASK cmd failed`。这类现象下 `TC.exe all` 仍能枚举 EVK,但 `fi/ulf/wf/rf` 这类 flash loader 命令无法继续。实测处理方式与第五章一致:断开 USB,按住开发板上的 Flash 点点taptap安卓 RESET / `FLASH_RESET` 重新插入 USB,等待 2 秒后松开,再重新执行 `TC.exe all`、`TC.exe fi` 和本章验证脚本。2026-07-08 15:05 已完成新固件写入和读回 SHA256 校验。

### 6.8.2 数据收发需要额外工具配合

**GATT Write/Notify 需要手机BLE 工具配合。测试时同时保存手机端截图、板端日志和数据统计 CSV。**

### 6.8.3 官方示例默认没有主动 Notify 数据源

**实测所有 Notify 特征值并按下开发板按键后,手机端都没有收到持续通知。原因是本章使用的 **`acl_connection_demo` 中 `Telink SPP: Phone->Module` 写入回调 `spp_onReceiveData()` 默认为空,SPP 的 `Module->Phone` Notify 特征值存在,但没有主动推送数据。

**解决方式是在 **`src\sdk\vendor\acl_connection_demo\app_att.c` 中补充 Echo Notify:手机向 `Phone->Module` 写入数据后,开发板通过 `SPP_SERVER_TO_CLIENT_DP_H` 推送 `ECHO + 序号 + 长度 + payload`。这样手机 App 可以稳定截图 Write 和 Notify 数据收发效果。

## 6.9 本章测试结论

```
1. acl_connection_demo 已经成功构建;
2. 固件已归档到本章 firmware 目录;
3. 当前已经补充 SPP Echo Notify,用于解决官方示例 Notify 无主动数据的问题;
4. 新固件已经写入开发板,读回 SHA256 与本地固件一致;
```

页: [1]
查看完整版本: 【Telink TL322X 测评】第六章:BLE GATT 数据收发测试

Baidu
map