Android蓝牙串行RFCOMM低波特率/传输缓慢


问题内容

我正在开发一个 Android蓝牙 项目,用于从定制硬件发送和接收数据。我使用SDK中的 Bluetooth Chat Sample 作为基础。

我意识到,有没有办法改变 波特率 在客户端(Android手机)和波特率取决于硬件。我尝试在硬件上设置不同的 波特率 ,但没有一个符合我们的期望。

我获得的最快速度是91Kbps(当波特率设置为2.7Mbps〜910Kbps时)。使用最低波特率(115Kbps),我得到43Kbps。我尝试使用不同的电话,这是相同的。我需要每秒将170KB数据传输到硬件。


规格
协议 :同步或生成的数据使用最大520字节大小的包发送到硬件。硬件在收到并批准每个程序包后发送验证命令,然后电话发送下一个数据包。
客户端 :Android 2.3.3,三星galaxy w i8150,蓝牙v3.0,RFCOMM
硬件 :自定义,蓝牙v2.1 BlueGiga WT11i


我完全感到困惑。这可能是手机上的Android或蓝牙设备引起的问题吗?我想知道最大波特率是多少?有没有一种方法可以加快传输速度(例如增加最大软件包大小,或发送所有软件包而无需等待硬件验证命令)。


编辑
将包大小更改为4160字节后,吞吐量已提高到254Kbps。我正在尝试找出达到1.5Mbps的最佳封装大小。我感谢任何建议


问题答案:

首先,更改蓝牙 RFCOMM* /串行端口协议的 波特率 应该没有什么不同,因为它不是 真正的 串行端口,而只是一种 仿真
。(特定的制造商可能对此有特殊的要求,但通常蓝牙或Android不会使用该参数来控制空中比特率)
*

影响 SPP上 数据速率的因素将是 数据包大小, 可以通过蓝牙获得的 实际
最大数据速率,接收器读取的速度/发送者发送的频率。对于数据包大小,您可以查看内部文档,也可以尝试使用不同的大小以达到应用程序的最佳数量。我也建议发送
多个数据包 (或全部),直到流可以连续发送数据,类似地连续读取。

对您来说,这里的主要问题似乎是可以通过蓝牙实现的实用 吞吐量 。如果您使用的是非 EDR
版本(如您在问题中所述),则理论速度在非常低的水平上为 720Kbps ,加上头顶的协议和应用程序以及 RFCOMM 协议开销,则最高可达到
450-500 Kbps

如果您可以访问两个+ EDR的 设备,即蓝牙版本2.0或更高版本+ EDR,则可以期望应用程序 吞吐量 为1.2到1.5
Mbps(空中比特率理论上为2.0或3.0 Mbps)