4

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

我意识到无法更改客户端(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 的最佳封装大小。我很感激任何建议

4

1 回答 1

5

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

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

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

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

于 2013-01-26T17:16:44.260 回答