CN / EN
CN / EN

提问

获得支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

关于蓝牙连接失败的问题 GR551x

已解决

Angelo

2022-01-11 18:53

你好!我在实际项目中发现,当蓝牙信号不好的时候,我调用ble_gap_connect去连接的话,发现一个现象,每次都能跑到app_connected_handler这个函数里面,表示连接已经建立,但是基本是马上就进到app_disconnected_handler这个函数里面,原因是Disconnected (0xCE)Connection failed to be established.

但是我的连接参数设置如下:

#define APP_CONN_INTERVAL_MIN 12 /**< Minimal connection interval(in unit of 1.25ms). */

#define APP_CONN_INTERVAL_MAX 12 /**< Maximal connection interval(in unit of 1.25ms). */

#define APP_CONN_SLAVE_LATENCY 2 /**< Slave latency. */

#define APP_CONN_SUP_TIMEOUT 400 /**< Connection supervisory timeout(in unit of 10 ms). */

gap_connect_param.type = GAP_INIT_TYPE_DIRECT_CONN_EST;

gap_connect_param.interval_min = APP_CONN_INTERVAL_MIN;

gap_connect_param.interval_max = APP_CONN_INTERVAL_MAX;

gap_connect_param.slave_latency = APP_CONN_SLAVE_LATENCY;

gap_connect_param.sup_timeout = APP_CONN_SUP_TIMEOUT;

gap_connect_param.conn_timeout = 500;

按我的理解应该连接有个超时5秒,因为 conn_timeout =500,但是为什么刚刚连接成功,马上就disconnect呢?就算信号不好,不应该重连几次吗?多谢!

0收藏

0赞成

最佳答案

天狼无星

汇顶员工
2022-01-13 09:49

master设备在发起建连请求时,就会上报连接完成的callback,如果6个interval之后master也没有接收到slave端的空口包,那么master就会上报0xce的断连callback,这个是符合spec规定的哈。实际上这种情况是属于链路信号不好时所发生的假连接。


你说的那个timeout超时时间是指master和slave进行了空口包交互之后(即连接真正建立起来了之后),如果超过了这个时间master或者slave没有接收到对端发的包,那么就会产生0x98(超时)的断连。


发生0xce断连这种情况,一般的处理策略是在应用层进行处理。即master端在断连callback中检查reason如果是0xce的话,那么就重新再次发起建连。

4条评论

1赞成

0收藏

您的评论

{-}{-}

汇顶员工
2022-01-12 20:18

抱歉,明天答复您,感谢!

0条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注