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。