我一直在寻找 Beaglebone Black (BB) 支持的 UART 波特率。我在 BB 系统参考手册或 sitara 处理器本身的数据表中找不到它。我正在使用 pyserial 和 Adafruit BBIO 库通过 UART 进行通信。
这是否支持合理范围内的任何值还是更标准(9600、115200 等)?
谢谢你的帮助。
-UPDATE- 它与 PySerial 支持的波特率有关。这给出了潜在波特率的列表,但没有列出将与特定硬件一起使用或不使用的特定波特率。
我一直在寻找 Beaglebone Black (BB) 支持的 UART 波特率。我在 BB 系统参考手册或 sitara 处理器本身的数据表中找不到它。我正在使用 pyserial 和 Adafruit BBIO 库通过 UART 进行通信。
这是否支持合理范围内的任何值还是更标准(9600、115200 等)?
谢谢你的帮助。
-UPDATE- 它与 PySerial 支持的波特率有关。这给出了潜在波特率的列表,但没有列出将与特定硬件一起使用或不使用的特定波特率。
AM335x 技术参考手册(TI 文档 spruh73)在 UART 部分(第 19.1.1 节,第 4208 页,版本 spruh73l)中给出了 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.003
它比48 MHz / 16 / 1000 = 3000
.
因此,UART 模块当然可以生成所有标准波特率,以及大范围的任意波特率(您必须实际进行数学运算才能看到它有多接近)。在基于 Linux 的系统上,PySerial 只是将您通过 ioctl 调用告诉内核驱动程序的波特率发送给内核驱动程序,因此它也不会限制您。
注意:我刚刚测试了从 BeagleBone Black 以 200 bps 发送数据,它工作正常,但它不会产生 110 bps(低于 300 bps 的下一个较低标准波特率),所以列出的限制实际上是最低和最高它可以产生的标准费率。
您可以通过将 BBB 的 UART 端口与 minicom 连接来手动检查它。为此,只需短接 UART 的 Tx 和 Rx。然后只需打开 minicom 使用
$ minicom -s
并设置不同的波特率,看看它是否有效。(按任意键,如果你看到字符,那么你知道波特率正在工作)
BBB 参考手册不包含有关 UART 波特率的任何信息,但对于串行通信,我通常更喜欢使用BAUDRATE = 115200的值,它在大多数情况下都有效,没有任何问题。