bluetopia+cc2564中,同时使用ble和spp导致ble断链,请教是否有办法解决?
使用的是MSP430-EXPF5438A开发板,蓝牙模块是松下的PAN1326。任务是利用ble与第三方心率腕表连接,采集到心率后,通过spp将其转发到pc上(pc只支持经典蓝牙)。
开发时,主要以SPPLEdemo为主,加进了HRPDemo中的几个函数,如DiscoverHRS,ConfigureRemoteHRS,以及相应回调函数等。使用了一个每秒执行一次的状态机,根据当前状态执行不同操作。如下所示:
static void HrsTask(void *UserParameter)
{
T_BLE_State tBleState;
tBleState = GetBleState();
switch (tBleState)
{
case LE_NEED_CONN:
{
g_heartrate = -1;
SprintF(SndBuff, "ConnectLE fc026a1daaf3\n");
Display((SndBuff));
ProcessCommandLine(SndBuff);
break;
}
case LE_NEED_DISCOVER:
{
g_heartrate = -1;
SprintF(SndBuff, "DiscoverHRS\n");
Display((SndBuff));
ProcessCommandLine(SndBuff);
break;
}
case LE_NEED_CONFIG_HRS:
{
g_heartrate = -1;
SprintF(SndBuff, "ConfigureRemoteHRS 1\n");
Display((SndBuff));
ProcessCommandLine(SndBuff);
break;
}
default:
{
break;
}
}
}
static void SppTask(void * UserParameter)
{
int ledid = LED_GREEN;
T_SPP_State tSppState;
tSppState = GetSppState();
switch (tSppState)
{
case SPP_NEED_OPEN:
{
// only once on start up
SprintF(SndBuff, "AutomaticReadMode 1\n"); //DisplayRawModeData防止对端PC输入数据时导致对端进程挂掉
Display((SndBuff));
ProcessCommandLine(SndBuff);
SprintF(SndBuff, "SetLocalName Gateway\n");
Display((SndBuff));
ProcessCommandLine(SndBuff);
SprintF(SndBuff, "SetLocalAppearance 1\n");
Display((SndBuff));
ProcessCommandLine(SndBuff);
SprintF(SndBuff, "Open 1\n");
Display((SndBuff));
ProcessCommandLine(SndBuff);
break;
}
case SPP_NEED_PIN:
{
// just for PC test
SprintF(SndBuff, "PINCodeResponse 0\n");
Display((SndBuff));
ProcessCommandLine(SndBuff);
break;
}
case SPP_OK:
{
SprintF(SndBuff, "CBSend !%d,%02x%02x%02x%02x!\n\r", g_heartrate, hfID[3], hfID[2], hfID[1], hfID[0]);
ProcessCommandLine(SndBuff);
break;
}
case SPP_CLOSED:
{
SprintF(SndBuff, "Open 1\n");
Display((SndBuff));
ProcessCommandLine(SndBuff);
break;
}
case SPP_OPENED:
default:
{
// do nothing
break;
}
}
HAL_StartLED(ledid, 1);
}
现在的问题是:
1、仅运行bletask,每隔70秒左右,与心率腕表的链接就会断开,该任务会自动重新连上,如此反复,长时间运行都是这样;
2、加入spptask后,心率腕表依然每隔70秒左右会断开,重新连接时,大部分情况能顺利连上,但少部分情况无法连接,bletask要尝试二三十次才能连上腕表。如果断开到pc端的spp连接(pc关闭相应串口),又恢复到上述第一种情况了。
请问如何消除spp对ble的影响呢?多谢多谢,这个问题困扰很久了,不知该如何解决。
测试Bluetopia的BLE+SPP并不会出现70秒断开的问题,请问能否提供问题出现时的log。另外第三方腕表如果和别的BLE设备连接是否会断开?谢谢
这个问题是在bluetopia V1.3版本中出现的,升级到V1.4后就解决了。
经过对比,我觉得是v1.3没有处理腕表发出的参数更新请求,导致腕表以为对端不在位而断开连接。
v1.4处理了该请求,且同意参数更新,就没再出现该现象。