这篇文章写给要真正把 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 千赫内
我要赚赏金
