TI CC254x BLE外设为何被Android 6.0.1手机自动连接/断开?
解决TI CC254x外设被Android 6.0.1手机自动反复连断的问题
我之前调试基于CC254x的BLE外设时,刚好碰到过几乎一模一样的Android 6.x自动重连问题,结合TI官方文档和踩过的坑,给你几个具体的排查和解决方向:
检查外设的GAP角色配置
打开你的外设代码,重点看GAPRole_SetParameter的配置:- 确认在
GAP_LINK_TERMINATED_EVENT触发后,是否正确将GAPROLE_ADVERT_ENABLED设置为GAP_ADV_ENABLED(非连接可发现模式),而不是保持连接模式的广播。如果断开后外设仍在发送定向广播,Android 6.0.1系统可能会自动尝试重连。 - 检查
GAPROLE_PARAM_UPDATE_ENABLE的设置,要是开启了自动参数更新,频繁的参数请求可能触发Android系统的异常重连逻辑,建议暂时关闭这个选项测试。
- 确认在
清理手机端的BLE缓存
Android 6.x的蓝牙系统会缓存已配对/连接过的设备信息,当设备的UUID、名称未变化时,系统可能在后台自动发起重连。你可以:- 进入手机蓝牙设置,删除该外设的配对记录,再重新测试连接断开循环。
- 换用系统自带的蓝牙连接功能,代替第三方BLE扫描器APP,排除APP层面的缓存或逻辑问题。
修复外设的断开事件处理逻辑
仔细检查GAP_LINK_TERMINATED_EVENT的处理代码:- 确保断开后重置了所有连接相关的状态变量,比如连接句柄、服务特征的读写缓存,避免残留状态导致外设发送异常广播。
- 尝试在断开事件后增加500ms左右的延迟再开启广播,给手机足够的时间清理连接状态,减少误触发的概率。
升级协议栈补丁
BLE-CC254x-1.4.2存在几个已知的兼容性BUG,尤其是和Android 6.x的交互问题。建议查看TI官方的release notes,升级到1.4.2a版本(如果还没更新的话),这个版本修复了多个与断开事件、广播状态相关的问题,很可能直接解决你的问题。抓包定位根因
用TI的Packet Sniffer工具抓取BLE空中数据包,分析自动重连时的交互流程:- 如果是手机主动发起连接请求,那问题大概率在手机端的缓存或系统逻辑;
- 如果是外设发送了异常的广播包(比如重复的定向广播),就需要回到外设代码排查广播配置。
内容的提问来源于stack exchange,提问作者Dooggy
相关产品推荐
相关产品推荐

