CC2540与手机配对及连接参数更新时会连接超时问题
背景:CC2540芯片,1.3.2协议栈(作从机),需要与IOS及安卓手机(作主机)对接,且需要实现配对。
IOS蓝牙版本4.2 ,测试APP:LightBlue
安卓蓝牙版本4.0 ,测试APP:TruthBlue
IOS方面:
严格按照IOS连接参数使其更新参数如下:
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 160
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 240
#define DEFAULT_DESIRED_SLAVE_LATENCY 4
#define DEFAULT_DESIRED_CONN_TIMEOUT 600
从抓包可看出可实现参数更新也可实现配对过程,用 APP测试通信正常,算是成功的。
安卓方面:
查阅相关文档,上述IOS的连接参数也是适用于安卓的,每个参数都没超出其范围,也满足:
Supervision Timeout > (1 +slaveLatency)* (connectionInterval)
所以此处直接使用上述IOS的参数设置。问题来了,使用此参数进行配对时是无法配对成功:手机输入配对密码后一直显示“读取通道信息”,而CC2540则是收到返回值:GAPROLE_WAITING--等候连接超时。抓包工具也并没有抓取到成功更新参数的包。
几种测试排查结果:
1、如果去除配对功能,保留上述的的更新参数连接,却又是可以正常连接,也可以从抓包中看到参数是更新了。可以使用APP实现通信。但本系统需要用到配对功能。
2、如果保留配对功能,改动连接参数如下:
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 6
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 6
#define DEFAULT_DESIRED_SLAVE_LATENCY 0
#define DEFAULT_DESIRED_CONN_TIMEOUT 300
则是可以实现配对功能,但连接间隔太过短,不适合产品应用。
所要解决问题:
安卓方面的应用配对功能时连接参数是有更严格的要求吗?需要设置什么值才适合或者是要设置一个怎样的范围内呢?理论上不超出其各参数的值及上述的关系公式不就行了吗?求指导谢谢
首先建议更新协议栈版本,1.3.2比较老了,官网早就提供了新版本
安卓的具体配对参数,最好查一下官方的明确规定
考虑与以前的产品一致性问题,更新协议的方法放最后了。
目前跟踪代码发现,配对时有成功过(返回SUCCESS状态),但成功的瞬间又很快出现等候连接超时状态(GAPROLE_WAITING),如果再保持广播状态时,再过10多秒,又会重新配对成功(返回SUCCESS状态)。相当于自动尝试多次后就连接成功了。正常理应不会出现这现像的。