Android蓝牙串口RFCOMM低波特率/慢速传输

时间:2013-01-25 15:23:02

标签: java android bluetooth connectivity 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。我感谢任何建议

1 个答案:

答案 0 :(得分:5)

首先更改蓝牙 RFCOMM /串行端口协议上的波特率应该没什么区别,因为它不是真正的串行端口,但只是一个仿真。 (具体的制造商可以这么特别,但一般的蓝牙或Android不使用该参数来控制空中比特率)

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

这里的主要问题似乎是您可以通过蓝牙实现的实用 throuput 。如果您正在使用问题中提到的非 EDR 版本,那么非常低级别的理论速度 720Kbps ,并且在头部添加协议和应用程序也是如此作为 RFCOMM 协议开销,您可以获得 450-500 Kbps 的最大值。

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