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

奇怪,CC2541在Android 蓝牙5.0可以再次连接,但无法获取服务,iOS无问题,求帮助!

在iOS系统下,发送9到特征值3中,服务打开,接收通知,iOS断开后,可重新连接,直接读取到通知中的数据,在Android 蓝牙4.0及以下,同iOS系统情况一致;但在Android 蓝牙5.0以上,发送9到特征值3中,服务打开,接收通知,断开后,日志显示连接成功,但无法获得服务,因此,我们做了一次尝试,即在断开前,在特征值3中输入除9以外的任意指,服务自动关闭,断开后,可以重新连接,重新写入9到特征值3中,可以在通知中获取数据,这也是我们最想要的状态。

不知道是不是因为这个服务需要手机发送指令来关闭,是否能在蓝牙断开后,服务直接关闭。

// 发送数据到主机
if(gapProfileState == GAPROLE_CONNECTED)
{
SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR3, &valueToCopy);
if(valueToCopy == 9 )
{
XAcc_t =XAcc;YAcc_t =YAcc;YAcc_t =YAcc;XGro_t =XGro;YGro_t =YGro;YGro_t =YGro;
#if defined( SENSOR_MPU6050 )
accInit();
#endif
HAL_DISABLE_INTERRUPTS(); //关中断
accReadAccGro(&XAcc, &YAcc, &ZAcc, &XGro, &YGro, &ZGro);
HAL_ENABLE_INTERRUPTS(); //开中断
if((XAcc==XAcc_t)||(YAcc==YAcc_t)||(ZAcc==ZAcc_t)||(XGro==XGro_t)||(YGro==YGro_t)||(ZGro==ZGro_t))
{
//if(XGro!=0||YGro!=0||YGro!=0){XGro=0;YGro=0;ZGro=0;}//
XGro=0;YGro=0;ZGro=0;

}
sprintf((char *)pktBuffer, "%d,%d,%d,%d,%d,%d", XAcc, YAcc, ZAcc, XGro, YGro, ZGro); numBytes = osal_strlen((char *)pktBuffer);
SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR4, numBytes, &pktBuffer);
//numBytes = osal_strlen((char *)pktBuffer);
//SK_SetParameter( SK_UART_ATTR, numBytes, pktBuffer ); //Batt_MeasLevel(); //待机电流由0.32mA增加到 0.45mA //// ledFlag ++; if(ledFlag >= 100) { HalLedBlink(HAL_LED_1, 1, 50, 2000); ledFlag = 0; } XAcc_t =XAcc;YAcc_t =YAcc;YAcc_t =YAcc;XGro_t =XGro;YGro_t =YGro;YGro_t =YGro;
accStop();
WD_KICK(); // 喂狗, 避免软件重启
valueToCopy =0;

} else
{
SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR3, sizeof( uint8 ), &charValue3 );
valueToCopy =0;
}
}

日志:

33:04.358> 连接断开
33:10.458> 连接中…
33:20.507> 连接超时: 无法连接
33:20.515> 连接断开
33:22.419> 连接中…
33:25.688> 连接成功,等待发现服务
33:26.193> 连接成功,正在发现服务…
33:31.199> 连接断开
33:33.657> 连接中…
33:43.726> 连接超时: 无法连接
33:43.736> 连接断开
33:50.211> 连接中…
33:52.931> 连接成功,等待发现服务
33:53.433> 连接成功,正在发现服务…
33:58.372> 连接断开

Viki Shi:

CC254X系列并不支持BLE5.0,请使用CC2640R2F或CC2642

user5951761:

回复 Viki Shi:

应当不是这个问题

user5951761:

回复 Viki Shi:

不支持5.0,不代表不能被蓝牙5.0以上的设备连接啊

Viki Shi:

回复 user5951761:

确实,蓝牙5.0可以向下兼容.你排查一下蓝牙5.0的设备有没有使用旧版本不支持的新特性

user5951761:

回复 Viki Shi:

谢谢您的回复。

目前找到原因是,只要蓝牙版本在4.0以下的,各类品牌安卓终端都没有问题,只要在5.0版本的就会有问题。而且我们现在也明确查出问题所在点,就是我们从终端在特征值3发指令9,是为了打开服务,在特征值4接收通知,但只要重新烧录后的第一次有任意(无论安卓还是iOS)终端在特征值3发出指令9 ,下一次再连接就不需要再输入指令9,特征值4能直接接收通知。而不需要从特征值发出指令9就可以直接在特征值4接收通知,导致5.0版本安卓终端只能连接成功,但获取不到服务,这应该是造成这个问题出现的本质原因。

所以在想,是不是这个服务需要在每次断开后重置或者初始化,然后实现每次连接都需要重新在特征值3输入指令9,但我现在不知道该怎么实现。

赞(0)
未经允许不得转载:TI中文支持网 » 奇怪,CC2541在Android 蓝牙5.0可以再次连接,但无法获取服务,iOS无问题,求帮助!
分享到: 更多 (0)