情况:
我正在为一些有BlueGiga WT12蓝牙调制解调器的硬件开发一个安卓应用程序。硬件设备以大约240 at的频率发送56字节的分组。我正在用三星的S5和S8进行测试。已经为IOS和PC创建了一个功能齐全的应用程序,因此我们知道硬件设备可以工作。
我使用一个单独的线程来读取数据,然后将其分派到主线程。
问题:
我遇到的问题是,当我向设备发送命令,告诉它开始流式传输时,它开始流式传输,但很快我就开始以非常慢的10-60 10速率接收数据包。
经过一些检查后,我意识到设备正在经历一个缓冲区溢出。
在与我们的硬件人员交谈后,他说唯一可能导致这种情况的原因是手机端的读取速度不够快,导致硬件设备不想发送更多的数据包,因为它认为手机不能再接收了,然后硬件设备上的缓冲区溢出。
WT12启用了流控制,所以这可能是安卓没有给WT12一个允许发送信号的问题。但据我所知,我们并不能访问所有的流控制内容。
我尝试过的:
我的第一个攻击线是简单地删除任何我认为会减慢读取速度的代码,但这似乎没有任何效果。
我还尝试了基本上所有我能得到的蓝牙串行终端应用程序,结果都是一样的。
所以我质疑这是不是与硬件设备有关的一些奇怪的问题,但在使用基于pc的(蓝牙)串行终端后,我在pc上完全没有问题。
硬件设备也可以通过USB操作,而不是蓝牙,所以我尝试从它读取数据,就像我使用蓝牙连接一样,但通过USB连接。使用USB串行连接,我一点问题都没有。
我的想法是:
所以这让我相信问题一定是电话那头的蓝牙调制解调器出了问题。我在想这可能是一个流控制问题,因为我们在WT12上启用了流控制。也许android没有发送清晰的接收信号?
问题是,据我所知,流量控制是在蓝牙堆栈中实现的,如果我没记错的话,我们作为开发人员对它没有控制权?
除了流控制,我真的不太清楚是什么原因导致硬件设备不想给我发送数据。
发布于 2019-09-07 14:24:09
我刚刚在流量控制方面遇到了同样的问题。然后我看到,在RN4678 BT模块的情况下,最好是禁用MCU中的流,并将模块上的cts引脚拉低。这对我们很管用。
https://stackoverflow.com/questions/57797272
复制相似问题