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

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

我能得到的最快速度是 91Kbps(当波特率设置为 2.7Mbps ~ 910Kbps)。使用最小波特率 (115Kbps) 我得到 43Kbps。我尝试使用不同的手机,结果都是一样的。我需要每秒向硬件传输 170KB 数据。

规范

协议(protocol):同步或生成的数据使用最大 520 字节大小的包发送到硬件。硬件在收到并批准每个数据包后发送验证命令,然后手机发送下一个数据包。

客户端:Android 2.3.3、三星galaxy w i8150、蓝牙v3.0、RFCOMM
硬件:自定义,Bluetooth v2.1 BlueGiga WT11i

我完全糊涂了..这可能是手机上的Android或蓝牙设备引起的问题吗?我想知道最大波特率是多少?有没有办法加快传输速度(比如增加最大包大小,或发送所有包而不等待硬件验证命令)。

最佳答案

首先更改蓝牙 RFCOMM /串行端口协议(protocol)的波特率应该没有区别,因为它不是真正的串行端口,而只是一个仿真。 (特定的制造商可以用它来做一些特别的事情,但一般来说蓝牙或 Android 不使用该参数来控制空中比特率)

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

对您来说,这里的主要问题似乎是您可以通过蓝牙实现的实用 吞吐量 。如果您使用的是非 EDR 版本,正如您在问题中提到的,极低级别的理论速度为 720Kbps ,并且添加协议(protocol)和应用程序开销以及 RFCOMM 协议(protocol)开销,您可以获得最大大约 450 -500 Kbps。

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

关于java - Android蓝牙串口RFCOMM低波特率/慢传输,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14524866/

10-08 21:10