首页 > 解决方案 > Linux/Qt 自动检测波特率?

问题描述

我处于一种情况,我们正在连接一个设备,该设备可能会根据型号说出各种不同的波特率。其中一些可能是非标准的,例如 10000,但这是另一天的另一个问题。

理想情况下,我可以使用 Qt 来自动检测波特率,但从我的研究来看,由于某些原因,这可能是不可能的,我可以接受。但是,是否有任何基于本地 Linux 的方法来自动检测连接设备的波特率?即使是第 3 方开源应用程序也足够了。

标签: linuxqtuartbaud-rate

解决方案


Linux 串行驱动程序不支持自动波特率,因为大多数硬件不支持它,因为对于它的工作方式没有达成一致。它是高度特定于应用程序的。

如果您使用的是 FTDI 串行适配器,那么它们中的大多数都支持 bit-bang 模式,您应该将它们用作这种模式下的数字示波器,以获得非常容易自动波特率的比特流。

在其他设备上,实现自动波特率的最简单方法是将设备设置为您期望的最高波特率的 2-3 倍,然后将输入数据视为分块数字示波器,考虑到错误位,并使用启发式方法检测波特率。它会在数量惊人的情况下成功,但您必须正确获取数据源的统计模型。我不知道有任何预先罐装的解决方案。

可能需要一些额外的内核支持来更好地为来自 UART(无论是硬件还是 USB)的输入添加时间戳,从而减少数据的不确定性,从而减少检测波特率所需的样本数量。

其中一些可能是非标准的,例如 10000,但这是另一天的另一个问题。

没什么大不了的。我在 16 年前就知道了 :)这就是您正在寻找的答案。如果您认为 API 病得很重,那么您是对的。


推荐阅读