繁体   English   中英

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

[英]Android Bluetooth Serial/RFCOMM/SPP, How to Change the BAUD RATE?

这非常令人沮丧,因为我已经尝试了数周,甚至在互联网上都没有任何线索。

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

这些硬件中的大多数都是旧的,并且无法更改其 SPP 的波特率。

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

我已经成功地以 19,200 的糟糕速率从标签阅读器中读取,并且格式很好

但是,我现在被波特率 9,600 的刻度卡住了,并且在我的应用程序中显示有趣的字符,甚至不接近应该来自刻度的格式

这个项目以前是在旧的 Windows Mobile 上完成的,波特率可以在他们的 API 中改变

有没有办法在 Android 中做到这一点,还是我在叫错树?

编辑:修正了一些错误。

互联网上没有关于此的好的信息——而且很多信息都是错误的——不要相信任何人!

特别是,这两件事是正确的:

  • RFCOMM 和 SPP(串行端口配置文件)是同一事物的两个名称。 (然而,它们之间的关系非常密切。)
  • 无需设置 RFCOMM / SPP 连接的波特率。

这是我发现的:

蓝牙串行连接按照 SPP 中的描述使用RFCOMM进行。 RFCOMM 是一个在 L2CAP 上运行的连接,允许以帧的形式发送串行数据和控制参数。 它在很大程度上基于称为TS 07.10的古老标准。 SPP 是蓝牙配置文件。

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

从 SPP 规范:

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

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

远程端口协商命令第 31 页有详细说明。 注意“所有参数都分配了默认值,如果不执行协商,则选择默认值。”

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

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

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

齐吉 你怎么能这样? 我无法理解

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM