我们用PSOC6 BLE当外围设备,手机当中心设备, 两者传输数据时,psoc6概率性(1%的概率)出现蓝牙挂死。具体现象是 断开手机蓝牙后,无法收到ble广播,硬件上查到ble的晶振一直处于起振状态,硬复位后恢复正常。
看起来是,psoc6的ble协议栈没有检测到对端设备已经断开连接,所以一直保持连接状态。这是psoc6协议栈的问题?还是晶振或者硬件时钟问题?
已解决! 转到解答。
那有没有收到CY_BLE_EVT_TIMEOUT事件?一般来说即使GATT Client蓝牙突然断掉,会首先产生CY_BLE_EVT_TIMEOUT事件继而产生CY_BLE_EVT_GAP_DEVICE_DISCONNECTED
你可以试下,在能复现问题的手机上,主动断开连接和直接关掉蓝牙,设备端反应有什么不一样。
可以观察下出现问题的情况下,断开连接后,设备端有没有产生以下事件?
CY_BLE_EVT_GATT_DISCONNECT_IND
CY_BLE_EVT_GAP_DEVICE_DISCONNECTED
还有,断联之后重启广播的代码放在哪里的?
不同手机是否复现问题的概率也不一样?
1, 断开连接后,设备端没有收到disconnect事件
2,重启广播的代码放在 收到CY_BLE_EVT_GAP_DEVICE_DISCONNECTED事件后。
3,出现概率很低,在小米4 和 iphone8P 各出现了一次。很难复现问题。
那有没有收到CY_BLE_EVT_TIMEOUT事件?一般来说即使GATT Client蓝牙突然断掉,会首先产生CY_BLE_EVT_TIMEOUT事件继而产生CY_BLE_EVT_GAP_DEVICE_DISCONNECTED
你可以试下,在能复现问题的手机上,主动断开连接和直接关掉蓝牙,设备端反应有什么不一样。