Skip to content

UART配置

树莓派上有两种类型的 UART -PL011和迷你 UART 。 PL011是一个功能强大且广泛兼容 16550 的 UART ,而迷你 UART 的功能集有所减少。

树莓派上的所有 UART 均为 3 .3V-如果将它们连接到 5V 系统,则会损坏。适配器可用于连接 5V 系统。另外,各种第三方也可以提供低成本的 USB 到 3 .3V串行适配器。

Pi零,1、 2 和 3 -两个 UART

树莓派零,1、 2 和 3 分别包含两个 UART ,如下所示:

姓名 类型
UART0 PL011
UART1 迷你 UART

Pi 4-六个 UART

树莓派 4具有四个附加的 PL011 ,默认情况下处于禁用状态。 Pi 4上的 UART 的完整列表为:

姓名 类型
UART0 PL011
UART1 迷你 UART
UART2 PL011
UART3 PL011
UART4 PL011
UART5 PL011

主 UART

在树莓派上,选择一个 UART 出现在 GPIO 14(发送)和 15 (接收)上-这是主要的 UART 。默认情况下,这也将是 Linux 控制台所在的 UART 。请注意,GPIO 14是 GPIO 接头连接器上的引脚 8 ,而 GPIO 15是引脚 10 。

辅助 UART

GPIO接口上通常不存在辅助 UART 。默认情况下,在包含此控制器的型号上,辅助 UART 连接到组合的无线 LAN /蓝牙控制器的蓝牙侧。

配置

默认情况下,仅启用 UART0 。下表总结了前两个 UART 的分配:

|型号|第一个 PL011 (UART0)|迷你 UART | | ------- | ----------- || ------- | |树莓派零小学|次要| | 树莓派零 W |次级(蓝牙)|小学| | 树莓派 1 |小学|次要| | 树莓派 2 |小学|次要| | 树莓派 3 |次级(蓝牙)|小学| | 树莓派 4 |次级(蓝牙)|小学|

注意:默认情况下,无论小型 UART 是指定为主 UART 还是辅助 UART ,它都是禁用的。

树莓派 OS上的 Linux 设备:

Linux设备 描述
/dev/ttyS0 微型 UART
/dev/ttyAMA0 第一个 PL011 (UART0)
/dev/serial0 主 UART
/dev/serial1 辅助 UART

注意:/dev/serial0/dev/serial1是指向/dev/ttyS0/dev/ttyAMA0的符号链接。

迷你 UART 和 CPU 核心频率

为了使用迷你 UART ,您需要将树莓派配置为使用固定的 VPU 内核时钟频率。这是因为迷你 UART 时钟链接到 VPU 内核时钟,因此当内核时钟频率改变时,UART波特率也将改变。可以将" enable_uart"和" core_freq"设置添加到" config.txt"中,以更改迷你 UART 的行为。下表总结了可能的组合:

迷你 UART 设置为 核心时钟 结果
主 UART 变量 迷你 UART 禁用
主 UART 通过设置enable_uart = 1固定启用了迷你 UART ,核心时钟固定为 250MHz ,或者如果设置了'force_turbo = 1',则 VPU Turbo频率
辅助 UART 变量 迷你 UART 禁用
辅助 UART 通过设置core_freq = 250固定启用迷你 UART

" enable_uart"标志的默认状态取决于哪个 UART 是主 UART :

主 UART enable_uart标志的默认状态
迷你 UART 0
第一个 PL011 (UART0) 1

禁用 Linux 串行控制台

默认情况下,主 UART 被分配给 Linux 控制台。如果希望将主 UART 用于其他目的,则必须重新配置树莓派 OS。这可以通过使用raspi-config来完成:

1.启动 raspi -config:sudo raspi-config。 1.选择选项 3 -接口选项。 1.选择选项 P6 -串行端口。 1.在提示"您是否希望通过串行访问登录外壳?",回答"否"。 1.在"您是否要启用串行端口硬件?"提示符下,回答"是"。 1.退出 raspi -config并重新启动 Pi ,以使更改生效。

为 Linux 启用早期控制台(earlycon)

尽管 Linux 内核是在启动过程中相对较早地启动 UART 的,但是在一些关键的基础设施已经建立之后仍然很久。如果不从那时起访问内核日志消息,则很难诊断那些早期阶段的故障。这就是创建" earlycon"机制来解决的问题。支持 earlycon 使用的控制台为内核提供了一个额外的接口,允许进行简单,同步的输出-在字符输出到 UART 之前,printk不会返回。

使用内核命令行参数启用 Earlycon -根据主要的 UART 将以下内容之一添加到 cmdline .txt中: ```#对于 Pi 4和计算模块 4 (BCM2711)earlycon = uart8250,mmio32,0xfe215040 earlycon = pl011,mmio32,0xfe201000

对于 Pi 2,Pi 3和计算模块 3 (BCM2836&BCM2837)

earlycon = uart8250,mmio32,0x3f215040 earlycon = pl011,mmio32,0x3f201000

对于 Pi 1,Pi零和计算模块(BCM2835)

earlycon = uart8250,mmio32,0x20215040 earlycon = pl011,mmio32,0x20201000

波特率设置为 115200 。

N.B.选择错误的早期控制台可能会阻止 Pi 启动。

## UART和设备树

可以在[kernel GitHub tree](https://github.com/raspberrypi/linux)中找到各种 UART 设备树覆盖定义。两个最有用的叠加层是[`disable-bt`](https://github.com/raspberrypi/linux/blob/rpi-5.4.y/arch/arm/boot/dts/overlays/disable-bt-overlay。 dts)和[`miniuart-bt`](https://github.com/raspberrypi/linux/blob/rpi-5.4.y/arch/arm/boot/dts/overlays/miniuart-bt-overlay.dts)。

" disable-bt"禁用蓝牙设备并使第一个 PL011 (UART0)成为主要 UART 。您还必须使用`sudo systemctl disable hciuart`禁用初始化调制解调器的系统服务,以使其不连接到 UART 。

" miniuart-bt"将蓝牙功能切换为使用迷你 UART ,并将第一个 PL011 (UART0)设为主要 UART 。请注意,这可能会降低最大可用波特率(请参见下面的微型 UART 限制)。您还必须使用" force_turbo = 1"或" core_freq = 250"将 VPU 核心时钟设置为固定频率。

覆盖层" uart2"," uart3"," uart4"和" uart5"用于启用 Pi  4上的四个附加 UART 。文件夹中还有其他 UART 特定的覆盖层。有关设备树覆盖的详细信息,请参考`/boot/overlays/README`;有关描述和使用信息,请运行'dtoverlay -h overlay-name`。

有关如何使用设备树覆盖的完整说明,请参见[本页](device-tree.md)。简而言之,在`config.txt`文件中添加一行以应用设备树覆盖。请注意,文件名的`-overlay.dts`部分已删除。例如:

dtoverlay =禁用-bt ```

PL011和 mini UART之间的相关差异

迷你 UART 具有较小的 FIFO 。加上缺乏流控制,这使得它在高波特率下更容易丢失字符。通常,它的功能也比 PL011 差,这主要是因为其波特率与 VPU 时钟速度有关。

与 PL011 相比,迷你 UART 的特殊缺陷是: - 没有断线检测 - 没有帧错误检测 - 无奇偶校验位 - 没有接收超时中断 - 无 DCD ,DSR,DTR或 RI 信号

有关微型 UART 的更多文档,请参见 SoC 外设文档here