【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]