Linux / Qt自动检测波特率?

时间:2018-05-30 13:42:18

标签: linux qt uart baud-rate

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

理想情况下,我可以使用Qt自动检测波特率,但是根据我的研究,由于某些原因可能无法实现,我对此表示赞同。但是,有没有任何基于Linux的本地方法来自动检测连接设备的波特率?即使是第三方开源应用程序也足够了。

1 个答案:

答案 0 :(得分:1)

Linux串行驱动程序不支持自动波特率,因为大多数硬件都不支持它,因为它没有就它如何工作达成一致。它具有高度的应用特性。

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

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

可以使用一些额外的内核支持来更好地为来自UART(无论是硬件还是USB)的输入加时间戳,从而降低数据的不确定性,从而降低检测波特率所需的采样数。

  

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

没什么大不了的。我16年前想出来了:) This is the answer you're looking for。如果您认为API生病了,非常非常恶心,那么您就是对的。