TI中文支持网
TI专业的中文技术问题搜集分享网站

总是断开连接是什么情况?

使用btool连接从机,连接上以后使用discovery char by uuid 之后,连接就断开了,原因是超时。为什么?

下面是收到的数据

[1] : <Rx> – 01:24:01.859
-Type  : 0x04 (Event)
-EventCode : 0xFF (HCI_LE_ExtEvent)
-Data Length : 0x06 (6) bytes(s)
 Event  : 0x0509 (ATT_ReadByTypeRsp)
 Status  : 0x14 (Can't Perform Function When Not In A Connection)
 ConnHandle : 0x0000 (0)
 PduLen  : 0x00 (0)
Dump(Rx):
04 FF 06 09 05 14 00 00 00————————————————————————————————————————
[2] : <Info> – 01:24:01.875
Device Disconnected
Handle = 0x0000
Addr Type = 0x00 (Public)
BDAddr = 88:33:14:DD:8A:63
————————————————————————————————————————
[3] : <Rx> – 01:24:01.875
-Type  : 0x04 (Event)
-EventCode : 0xFF (HCI_LE_ExtEvent)
-Data Length : 0x06 (6) bytes(s)
 Event  : 0x0606 (GAP_TerminateLink)
 Status  : 0x00 (Success)
 ConnHandle : 0x0000 (0)
 Reason  : 0x08 (Supervisor Timeout)
Dump(Rx):
04 FF 06 06 06 00 00 00 08————————————————————————————————————————

admin admin1:

还发现了 有时候底层会调用GAP_UpdateLinkParamReq ,但是有时候却不会,如果调用了更新的话这边连接时间长一点~但是也会断开,这是什么原因呢?

Yan:

回复 admin admin1:

admsadm,

你的supervision timeout时间应该设置长一点。

这个在BTool上也可以设置。记得设置好以后按一下set按钮。

GAP_UpdateLinkParamReq ()这个取决于你的外设端,有没有把DEFAULT_ENABLE_UPDATE_REQUEST设置成TRUE。

admin admin1:

回复 Yan:

hi YAN

谢谢你的回答,但是我还有一些问题。

supervision timeout我设置成最大过的,问题还是存在,DEFAULT_ENABLE_UPDATE_REQUEST 这边默认是TRUE的。

不过我现在问题已经解决,是等到从机设备启动事件以后再进行连接,这样的话没有出现supervision timeout 这样的事情。

然后主机这也会出现Param Update ,

static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )

{

case GAP_LINK_PARAM_UPDATE_EVENT:      {        LCD_WRITE_STRING( "Param Update", HAL_LCD_LINE_1 );        SerialPrintString("Param Update\r\n");       }      break;

}

我的问题是,DEFAULT_ENABLE_UPDATE_REQUEST 一直是默认的,那为什么我从机这边会没有Param Update呢?

Yan:

回复 admin admin1:

admsadm,

你的情况是正常的。

从机的DEFAULT_ENABLE_UPDATE_REQUEST 设置成TRUE,从机就会发送param update的一个请求,所以主机能收到GAP_LINK_PARAM_UPDATE_EVENT。然而蓝牙协议栈规定,真正的param update更新这个动作是只能由主机来做的,从机不能做,所以从机这边没这个事件。。。 

admin admin1:

回复 Yan:

hi Yan

我在主机中查找了一下这个更新动作,是不是这个函数,如下

static void simpleBLECentral_HandleKeys( uint8 shift, uint8 keys )

{

if ( keys & HAL_KEY_RIGHT ) { SerialPrintString(" [KEY RIGHT pressed!]\r\n"); // Connection update if ( simpleBLEState == BLE_STATE_CONNECTED ){GAPCentralRole_UpdateLink( simpleBLEConnHandle,DEFAULT_UPDATE_MIN_CONN_INTERVAL,DEFAULT_UPDATE_MAX_CONN_INTERVAL,DEFAULT_UPDATE_SLAVE_LATENCY,DEFAULT_UPDATE_CONN_TIMEOUT );  } }

}

但是这个是按键更新啊,我没有用按键来更新怎么会有param update。或者这个更新动作最终是在协议栈里面完成的么?

admin admin1:

回复 Yan:

谢谢 你的回答,大致已经明白了

Weijie Deng1:

回复 Yan:

Hi Yan,

1、在初始化函数SimpleBLEPeripheral_Init里面,有配置scanRspData的参数,GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanRspData ), scanRspData );,然后在Slave和Master连接的过程,当Master请求扫描的时候,Slave用scanRspData[] 响应,scanRspData[] 里面有interval和latency等参数。流程大概是这样吗?

2、如果是,那DEFAULT_ENABLE_UPDATE_REQUEST  设置是否为TRUE如何影响Slave是否提出参数更新的请求

3、当peripheral请求central去更新连接参数的时候,central有权利决定是否更新,是否更新在central代码里面哪里能体现出来呢?

Vincent Qu:

回复 admin admin1:

HI admsadm:

    想请教一下,我遇到了一样的discovery services就断开的一个情况,想请问题你原先是怎么解决这个问题的?你说的从机设备启动事件后是什么意思?

赞(0)
未经允许不得转载:TI中文支持网 » 总是断开连接是什么情况?
分享到: 更多 (0)