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