这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » BLE数传实战:从串口到手机App的完整链路

共1条 1/1 1 跳转至

BLE数传实战:从串口到手机App的完整链路

工程师
2026-09-11 15:25:40     打赏

这篇文章写给要真正把 WT2605C 跑通 BLE 数传的工程师。不讲概念包装,直接把从 MCU 串口到手机 App 的物理链路、AT 指令时序、包长与缓冲约束、以及硬件上最容易翻车的几处讲清楚。

芯片定位与链路

WT2605C 是一颗双模蓝牙芯片,蓝牙规格是 5.3 加 BR 加 EDR 加 BLE。音频走 A2DP 通道,数传走 BLE 通道,两条通道在同一颗硅片里并行,播提示音的时候数传不断。

数传的物理路径只有一段:

MCU 串口 (3.3V TTL, 115200, 8N1)

│ TX/RX

WT2605C 内部 BLE 协议栈

│ ATT write (FFE4) → notify

手机 App (标准 GATT 客户端)

串口参数固定为 115200 波特、8 数据位、无校验、1 停止位,IO 电平 3.3 伏 TTL。改了芯片波特率,MCU 侧要在 100 毫秒内同步改掉,否则回码错乱。

电气与封装参数:工作电压 2.8 至 5.0 伏,QFN32 封装 4 毫米乘 4 毫米,内核 32 位最高 240 兆赫。晶振 24 兆赫、负载电容 12 皮法、频率公差正负 10PPM,量产前必须把频偏压到正负 25 千赫以内,否则射频性能下降甚至连不上。

2M PHY 到底快在哪

WT2605C 的 BLE 支持 2M PHY,空口符号速率比 1M 快一倍。但有效吞吐不是简单地乘二,因为一次 ATT 写要叠加几层开销:

每连接事件能搬的有效数据 ≈ ATT 载荷

ATT 载荷 = MTU - 3 // L2CAP 头 4 字节 + ATT 头 3 字节,约 7 字节开销

吞吐 ≈ (每事件 ATT 载荷 × 每事件包数) / 连接间隔

决定吞吐的三个旋钮:

PHY:1M 符号率 1Msym/s,2M 符号率 2Msym/s,空口带宽直接翻倍

连接间隔(Connection Interval):间隔越短,单位时间连接事件越多,但功耗越高

MTU:默认 23,拉到 247 后单包 ATT 载荷从 20 字节提到 244 字节

经验上,1M PHY 在常见手机上单向有效吞吐常在 0.7 兆比特每秒附近,2M PHY 在连接间隔压到 15 毫秒、MTU 247 时,能到 1.3 到 1.4 兆比特每秒的量级。这两个数是典型场景的参考值,不是规格书保证值,实际以你手上的连接参数和手机平台为准。如果你的连接间隔还停在默认几百毫秒,2M 只是把每一拍的空闲填得更满,实测看不出快多少。

两种发数方式,别混

WT2605C 往手机发数有两条路,理解差异才能选对。

方式一:透传模式(最省事)

把 14 脚 P06 拉低,芯片维持在透传模式;拉高退出。IO 不方便时,发 AT+DTUMODE=1 进、=0 退。进模式回 `+DTUMODE:[sta]`,退模式回 `+DTUEXIT:[sta]`,sta 为 1 表示主机已连上可以透传,为 0 表示还在等连接。

透传模式下,串口收到什么,芯片就以 ATT write-no-response 直接发到 FFE4,手机端 notify 收到的是 ASCII 加换行符。MCU 不用拼任何协议,直接 printf 就行。

方式二:AT+ATTSEND 显式发(命令模式)

不进透传模式,用指令显式发 ATT 数据。这里有两个坑工程师必看:

第一,数据要转成 16 进制 ASCII。例如要发二进制 `0x12 0x34 0x56`,指令是:

AT+ATTSEND=313233343536373839

第二,单条指令的参数(hex-ASCII 字符串)总字符必须控制在 256 以内,否则整条视为无效指令不做处理。256 个字符等于二进制载荷最多 128 字节。返回 0 表示已加载进缓存,1 表示缓存满加载失败。

注意规格书原话:AT+ATTSEND 需 NOTIFY 使能后方可写入。也就是说方式二同样依赖下面要讲的 CCC 使能。

有应答的写用 AT+ATT_WRITE,data 同样转 16 进制 ASCII,长度上限 178,适合要确认落地的关键帧。返回值里会带 ATTCOUT 指示实际写出的 handle 和数据。

上电到发数的完整时序

下面这条顺序照着走一遍就能通。每条都给了期望回码。

// 1. 上电,从机默认在广播,手机能直接扫到

发 → AT+ADV?

收 ← +ADV:1

 

// 2. 确认 BLE 开关,默认从模式开、主模式关

发 → AT+BLEON

收 ← +BLEON:0,1 // [scanf]主模式 0关 1开, [adv]从模式 0关 1开

 

// 3. 手机 App 连上设备(默认名说明书两处写法不一致,见文末)

// 连上后芯片进连接态

 

// 4. 主机使能通知:对 TX 特征 FFE4 的 CCC(handle 0x002d) 拉 notify

发 → AT+ENABLE_CCC=002d,1

收 ← +ENABLE_CCC:1

收 ← +ATTCOUT:A0,002B,00

 

// 5. 进透传(P06 拉低 或 软件指令)

发 → AT+DTUMODE=1

收 ← +DTUMODE:1 // sta=1 已连可透传

 

// 6. 查连接状态,看到 2 再发

发 → AT+DTUSTA?

收 ← +DTUSTA:2 // 0未连 1已连 2已使能

 

// 7. MCU 串口直接写字符串,手机收到 ASCII + 换行

几个点展开说:

`AT+UUID?` 回 `FFE0,FFE4,FFE5`,分别是服务 UUID、TX 发送 UUID(从机发)、RX 接收 UUID(主机发)。手机端连上后,对 FFE4 写、从 FFE4 收 notify。

`ENABLE_CCC` 由主机发起,`002d` 是 4 字符 hex handle,即 0x002d,对应 FFE4 特征的 CCC。typ 为 1 是 notify、2 是 indicate、0 是关闭。这步没做,从机数据憋在芯片里出不去,是最高频的坑。

广播间隔用 `AT+ADVPARAM` 调,默认 800(单位 0.625ms,即 500ms)。这是手机发现设备的快慢,和上面决定吞吐的连接间隔不是同一个参数。要连得快就调小,比如 `AT+ADVPARAM=1600` 是 1000ms。

不丢数的三条纪律

包长

透传模式最简单,串口进什么手机收什么。用 AT+ATTSEND 显式发,单条参数卡在 256 字符(128 字节二进制)以内,超了整条丢,回的是 ERR 不是丢包,别误判成信号问题。

缓冲

芯片内部缓存分两档:小档 512 字节、大档 10240 字节,出厂固件定死不可配。发长包前先查余量:

发 → AT+ATTSENDLEN?

收 ← +ATTSENDLEN:10208,32 // [free_space],[used_space]

free_space 是可用空间,used_space 是已用空间。缓存快满就停一拍,等空中走掉再补。如果回 `ERR:13`,说明模式不对,大概率正在传文件或者没在可发状态,别硬发。

必须使能 CCC

再强调一次:无论透传模式还是 AT+ATTSEND,数据要真正出得去,对端(手机)必须先把 FFE4 的 CCC 拉起来。手机侧使能 notify,或者主机侧发 `AT+ENABLE_CCC=002d,1`。`DTUSTA?` 看到 2(已使能)再发数,看到 0 或 1 都还早。

主从一体与接力

WT2605C 的 BLE 角色可配:主机、从机、主从一体都行。

做终端设备,配从机,手机来连

做采集网关,配主机,自己主动去连下属从设备

主机连指定名字的设备:

AT+CONN_NAME=11,WT2605C_BLE // 连名字匹配的设备,长度=名字 ASCII 字符数

连指定地址用 `AT+CONN=[mac]`。扫描用 `AT+SCAN_EN_NAME=[rssi],[name_len],[name]` 按信号强度和名字过滤,免得刷一堆无关设备,比如 `AT+SCAN_EN_NAME=-90,12,WT2605C(BLE)` 只留信号强于 -90dBm 且名字匹配的设备。

主从一体适合接力场景:一颗 WT2605C 一边当从机把数据传上手机,一边当主机去收底下几颗从模块的数据,汇总后再上报。一颗芯片把采集和回传都干了。

硬件要点(射频与晶振)

链路调通后,量产前这几处决定你是能稳定连还是偶发掉线:

射频走线做 50 欧姆阻抗线,尽量短而宽、不过孔、不走直角,用圆弧或 135 度角。底层保留完整地平面,并与芯片底部 GND 相连。

靠近 RF 脚预留 π 形匹配电路做天线匹配,元件值按天线和 PCB 实测确定。天线必须放在板边,正反两面净空,远离金属、电池和高频噪声源。

晶振 24 兆赫、负载电容 12 皮法、公差正负 10PPM。晶振走线短、少过孔、用地线隔离,周围包地。即使物料不变,布局和板材差异也会带来频偏,每台样机量产前测一下,把频偏调到正负 25 千赫以内。

连接密码 `AT+PASSWORD` 上电默认 000000(不需要密码),长度固定 6 字节、16 进制大写、带掉电记忆。设了非零密码,主机建连后 5 秒内要通过对应 handle 发密码,否则超时断开。

调试自检清单

数据发不出去,按这个顺序查:

串口参数:115200、8、N、1、3.3 伏 TTL。改了波特率记得 100 毫秒内把 MCU 也改掉

BLE 开了没:`AT+BLEON` 查,默认从模式开、主模式关,被关过就重开

连接状态:`AT+DTUSTA?` 看到 2(已使能)再发,0 和 1 都还早

通知使能没:主机侧 CCC(handle 0x002d)没拉,从机数据憋在芯片里,这是最高频的坑

透传进了没:P06 拉低或 `AT+DTUMODE=1`,退模式手机收不到

单帧别超 256 字符(AT+ATTSEND),超了整条丢,回 ERR 不是丢包

缓冲别撑爆:`AT+ATTSENDLEN?` 看余量,`ERR:13` 多半是模式不对

名字两处不一致:说明书默认名一处写 LE_WT2605C、一处写 WT2605C(BLE),以你手上的固件实测为准

频偏:量产前测样机,晶振频偏压到正负 25 千赫以内

选型速查

蓝牙规格:5.3 加 BR 加 EDR 加 BLE,双模,音频和数传同芯片

BLE PHY:2M 速率,空口比 1M 快一倍

BLE 角色:主机、从机、主从一体,终端和网关都能做

控制接口:AT 串口,默认 115200,3.3 伏 TTL,8N1

透传使能:14 脚 P06 硬件加软件,进退出干脆

透传 UUID:FFE0 服务、FFE4 发送、FFE5 接收

CCC handle:0x002d(FFE4 的 CCC),使能 notify 才能收数

单帧上限:AT+ATTSEND 参数 256 字符(二进制 128 字节),超了整条丢

有应答写:AT+ATT_WRITE 参数上限 178

缓存:512 或 10240 字节,出厂定死不可配

广播间隔:AT+ADVPARAM 默认 800(0.625ms 单位,约 500ms)

工作电压:2.8 至 5.0 伏,锂电直供也稳

封装:QFN32,4 乘 4 毫米,小主板放得下

晶振:24 兆赫,12 皮法,正负 10PPM,频偏控在正负 25 千赫内





关键词: 数传     实战     串口     手机     完整     链路    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]