Android蓝牙串口/ RFCOMM / SPP,如何更改波特率?

时间:2011-04-07 05:04:43

标签: android bluetooth serial-port rfcomm

这令我非常沮丧,因为我已经尝试了几个星期,甚至连互联网都没有线索。

我正在研究一个在不同农业硬件上读/写蓝牙串行数据的项目。

这些硬件中的大多数都是旧的,并且不能改变其SPP的波特率。

我使用android蓝牙聊天作为读/写的基础,我只更改了UUID以允许连接到我拥有的设备

我设法以19,200的糟糕速度从标签阅读器中读取,并且格式很好

然而,我现在卡在波特率为9,600的音阶上,并在我的应用中显示有趣的角色,甚至没有接近应该来自音阶的格式

此项目之前已在旧的Windows Mobile上完成,并且可以在其API中更改波特率

有没有办法在Android中执行此操作,还是我咆哮错误的树?

2 个答案:

答案 0 :(得分:9)

编辑:修正了一些错误。

互联网上没有关于此事的好消息 - 很多都是错误的 - 不信任任何人!

特别是,这两件事是真的:

  • RFCOMM和SPP(串行端口配置文件)是同一个名称的两个名称。 (但它们密切相关。)
  • 无需设置RFCOMM / SPP连接的波特率。

以下是我发现的内容:

使用RFCOMM按照SPP中的说明制作蓝牙串行连接。 RFCOMM是一种在L2CAP上运行的连接,允许以帧为单位发送串行数据和控制参数。它主要基于一种名为TS 07.10的古老标准。 SPP是蓝牙配置文件。

此成帧还允许您发送带外数据,例如控制串行信号(DTR,CTS等)和以设置波特率

来自SPP规范:

  

DevA可以通过远程端口协商通知DevB RS232端口设置   命令,直接在DLC建立之前。如果RFCOMM适配层的API公开这些设置(例如波特率,奇偶校验),则需要这样做。

可悲的是,Android根本没有公开这个功能。我想有可能自己发送远程端口协商命令,但我很确定需要重新实现RFCOMM,这需要访问我们没有的L2CAP

Remote Port Negotiation命令详细说明here第31页。注意“所有参数都分配了默认值,如果未执行协商,则选择默认值。” / p>

因此,无法在Android上根据需要设置波特率。它将使用蓝牙适配器使用的默认波特率(可能是9600)。

另请注意,Windows 支持设置蓝牙适配器的波特率。

答案 1 :(得分:2)

大概有些蓝牙到串口转换器连接到传统设备?如果是这样,您应该能够对其进行一次编程以始终使用特定的比特率。然后蓝牙客户端就不需要设置比特率......