【问题标题】:Maximum Beaglebone Black UART baud?最大 Beaglebone Black UART 波特率?
【发布时间】:2015-10-28 20:03:31
【问题描述】:

我一直在寻找 Beaglebone Black (BB) 支持的 UART 波特率。我在 BB 系统参考手册或 sitara 处理器本身的数据表中找不到它。我正在使用 pyserial 和 Adafruit BBIO 库通过 UART 进行通信。

这是否支持合理范围内的任何值还是更标准(9600、115200 等)?

感谢您的帮助。

-更新- 它与 PySerial 支持的波特率有关。这给出了潜在波特率的列表,但没有列出可以与特定硬件一起使用或不使用的特定波特率。

【问题讨论】:

    标签: python pyserial beagleboneblack uart baud-rate


    【解决方案1】:

    AM335x 技术参考手册(TI 文档 spruh73)在 UART 部分(spruh73l 版本中的第 19.1.1 节,第 4208 页)中给出了 UART 子系统的波特率限制:

    • 波特率从 300 bps 到 3.6864 Mbps

    每个 UART 模块都有一个 48MHz 时钟来生成它们的时序。它们可以配置为以下两种模式之一:UART 16x 和 UART 13x,其中时钟分别被 16 和 13 分频。然后有一个配置的 16 位除数从该时钟生成实际波特率。因此,对于 300 bps,它将是 UART 16x 和 10000 的除数,或48MHz / 16 / 1000 = 300 bps

    当您告诉omap-serial 内核驱动程序(即用于 BeagleBone 上的 UART 的驱动程序)时,它会计算最接近您想要的速率的模式和除数。您将获得的实际速率受到其生成方式的限制 - 例如,如果您要求任意波特率为 2998 bps,我想您实际上会得到 2997.003 bps,因为 48MHz / 16 / 1001 = 2997.00348 MHz / 16 / 1000 = 3000 更接近 2998 .

    因此,UART 模块当然可以生成所有标准波特率,以及大范围的任意波特率(您必须实际进行数学计算才能看到它有多接近)。在基于 Linux 的系统上,PySerial 只是将您通过 ioctl 调用告诉它的波特率发送给内核驱动程序,因此它也不会限制您。

    注意:我刚刚测试了从 BeagleBone Black 以 200 bps 发送数据,它工作正常,但它不会产生 110 bps(低于 300 bps 的下一个较低的标准波特率),所以列出的限制实际上是它可以产生的最低和最高标准率。

    【讨论】:

      【解决方案2】:

      BBB 参考手册不包含有关 UART 波特率的任何信息,但对于串行通信,我通常更喜欢使用 BAUDRATE = 115200 的值,这在大多数情况下都可以正常工作,没有任何问题。

      【讨论】:

        【解决方案3】:

        您可以通过将 BBB 的 UART 端口与 minicom 连接来手动检查。为此,只需短接 UART 的 Tx 和 Rx。然后使用

        打开 minicom
        $ minicom -s
        

        并设置不同的波特率,看看它是否有效。 (按任意键,如果你看到这个字符,那么你就知道波特率在起作用)

        【讨论】: