[节选] 树莓派官方使用手册UART篇
2023-06-28 21:50:41来源:哔哩哔哩

本篇节选自 Configuration 和 这两篇树莓派官方文档上面有关UART使用说明的段落,并且按照自己的学习思路调整了一下前后知识点的展示顺序,翻译内容仅供参考。


(相关资料图)

以下内容节选自:/documentation/computers/

使用命令行

如果你无法正常访问图形化用户界面用来设置树莓派上的无线网,那么这种办法就比较合适,尤其是当你没有屏幕或有线以太网络时使用串口终端线缆连接的情况。无需额外的软件,因为你需要的所有工具都已包含在树莓派的系统中了。

使用 raspi-config

raspi-config 最初是由  Alex Bradbury 编写的树莓派配置工具。想要开启配置工具,请在命令行中输入以下命令:

其中 sudo 是必要的,因为作为 pi 用户你将会修改那些不属于你的文件。

注意:如果你正在使用的是树莓派桌面,那么你可以使用首选项菜单中的图形化配置应用来配置你的树莓派。

随后你应该会看到一个蓝底带选项的灰框界面:

使用上下键在可用的选项之间移动高亮选择框。按下向右键将会跳出选项菜单并把焦点落在 <Select> 和 <Finish> 按钮上。按下向左键则回到选项中。此外,你也可以使用 tab 键在上述选项之间来回切换。

总之,raspi-config 工具旨在为大部分常见的配置提供(便捷的)修改功能,这可能会自动编辑 /boot/ 以及众多标准 Linux 配置文件。部分选项需要重启后生效。如果你修改了当中的任何一个,当你选中按下 <Finish> 按钮后 raspi-config 则会询问你是否立即重启树莓派。

注意:在长列表选项中(像是时区城市列表),你也可以键入字母以跳转到列表中对应的选项上,例如,输入 L 则会跳转到离 London 有两选项之遥的 Lisbon,借助字母表将节省你从头至尾上下滚动的时间。

选项列表

Interfacing Options

在这个子菜单中有下列选项可被启用或禁用:Camera,SSH,VNC,SPI,I2C,Serial,1-wire 以及 Remote GPIO

Serial

启用/禁用在串口连接上登录 shell 和打印内核信息。

内核命令行

Linux 内核在启动时接受一条由参数构成的命令行。在树莓派中,这条命令行被定义在 boot 分区下一个名为 的文件里面,这是一个可被任意的文本编辑器(例如 Nano)编辑的、简单的文本文件。

注意:必须使用 sudo 编辑 boot 分区中的任何内容,并且 里面的所有参数必须在同一行。

启动时被传入内核的命令行内容可使用 cat /proc/cmdline 进行查看,由于固件可能会在内核启动之前修改其中的某些内容,因此无法与 完全一致。

命令行选项

有许多内核命令行参数,其中的一些是由内核定义,其他的则是由内核可能用到的代码定义。

标准项

console:定义了串口中断,通常有(以下)两条内容:

root:定义了根文件系统的位置,例如 root=/dev/mmcblk0p2 表示多媒体存储卡的 0 号区块 2 号分区

rootfstype:定义了 rootfs 所使用的文件系统类型,例如 rootfstype=ext4

quiet:设置默认的内核日志级别为 KERN_WARNING,会在启动时抑制除非常严重的日志消息以外所有内容的输出。

配置通用异步收发器(UART)

在树莓派上有 PL011 和 miniUART 这两种类型的 UART 可被使用。PL011 是全功能的、广泛兼容 16550 的 UART,而 miniUART 只包含更少的功能集。

树莓派上的所有 UART 耐受电压仅为 ,如果(直接)接入到 5V 的电路系统中可能会被烧坏,可以用一个适配器连接到 5V 电路系统。除此以外,也可以使用第三方的低功耗 USB 转 串口适配器。

树莓派 Zero,1,2 ,3

树莓派 Zero,1,2,3 型号各自含有如下的 2 个 UART:

树莓派 4 以及 400 系列

树莓派 4B 和 400 拥有额外的 4 个 PL011 串口,默认是被禁用的:

CM1,CM3,CM3+ 以及 CM4

第一代通用计算模块(CM1),与 CM3 和 CM3+ 各自拥有 2 个 UART,而 CM4 则拥有上述的 6 个 UART。

在所有型号的计算模块中,UART 默认是被禁用且可以使用设备树 overlay 被精确地启用。你也可以指定使用哪个 GPIO 针脚,例如:

主串口(Primary UART)

在树莓派上,其中一个 UART 被选择呈现在 GPIO 14(传输)和 GPIO 15(接收)针脚上,这个就是主串口。默认情况下,这也会作为在上面显示 Linux 终端的 UART,注意 GPIO 14 对应着 GPIO 排头的 8 号物理针脚,而 GPIO 15 对应 10 号物理针脚。

辅助串口(Secondary UART)

辅助串口通常不会被呈现在 GPIO 控制器上。在那些含有这类控制器的设备型号上,默认情况是被连接到集成了无线网/蓝牙控制器的蓝牙模块一侧。

主串口与辅助串口

以下总结了前两个 UART 的分配情况:

解释示例:Raspberry Pi 4 系列型号产品的主串口对应 miniUART;辅助串口对应 UART0(PL011)被用蓝牙模块。其他项目依此类推。

注意:mini UART 默认是被禁用的,无论是被设计成主串口还是辅助串口。

Raspberry Pi OS 中的 Linux 设备文件:

注意:/dev/serial0 和 /dev/serial1 分别是指向 /dev/ttyS0 或 /dev/ttyAMA0 设备的符号连接。

Mini-UART 与 CPU 核心频率

为了使用  mini UART,你需要配置树莓派使用一个固定的 VPU 核心时钟频率。这是因为 mini UART 的时钟是与 VPU 的核心时钟相关联的,因此当核心时钟频率发生改变时,UART 的波特率也会随之改变。可以向 中添加 enable_uart 和 core_freq 设置以改变 mini UART 的行为。以下总结了可能的组合形式:

enable_uart 标志的默认状态取决于主串口是哪种类型的 UART:

禁用 Linux 串口终端

默认情况下,主串口会被分配作为 Linux 终端,如果你希望将主串口用作其他的用途,你必须先重新配置一下系统,这一步可以用 raspi-config 来完成:

1. 开启 raspi-config:sudo raspi-config

2. 选中选项3:Interface Options

3. 选中选项P6:Serial Port

4. 在提示 Would you like a login shell to be accessible over serial? 的时候选择 "No"

5. 在提示 Would you like the serial port hardware to be enabled? 的时候选择 "Yes"

6. 退出 raspi-config 然后重启树莓派让修改生效。

启用 Linux Early Console

尽管 Linux 内核在启动过程中相对较早地就开启了 UART,但仍然会晚于部分基础设备的临界位被设置的时间,此时如果不能获取到内核日志,那么在这些早期阶段产生的错误就很难被诊断。为了能让其中一个 UART 启用 earlycon 支持功能,请添加下列选项中的一个到 文件,具体内容取决于主串口是何种类型:

对于 Raspberry Pi 4,400 以及 Compute Module 4:

对于 Raspberry Pi 2,Pi 3 以及 Compute Module 3:

对于 Raspberry Pi 1,Pi Zero 以及 Compute Module 1:

波特率默认是 115200 bps

注意:选错 Early Console 可能会导致树莓派启动失败。

UART 与设备树

许多 UART 设备树的 overlay 定义可以在 /raspberrypi/linux 上面找到,其中两个最有用的 overlay 莫过于 disable-bt 和 miniuart-bt

disable-bt 会禁用蓝牙设备并且让 first PL011 (UART0) 作为主串口。同时你也必须禁用掉初始化蓝牙解调器的系统服务,以确保彻底不会连上 UART,使用 sudo systemctl disable hciuart 即可。

miniuart-bt 会将蓝牙功能切换为使用 mini UART,并且 让 first PL011 (UART0) 作为主串口。请注意这可能会降低最大可用的波特率(参考下方的 mini UART 限制说明)。同时你也必须用 force_turbo=1 或 core_freq=250 将 VPU 的核心时钟设为固定频率。

uart2,uart3,uart4 和 uart5 这四个 overlays 可以被用来启用树莓派4型号设备上额外的 4 个 UART。在目录中另有特殊的 UART overlay,请参考 /boot/overlays/README 以获取设备树 overlay 的详细内容,或者执行 dtoverlay -h overlay-name 用以获取描述和使用帮助。

你可以向 文件中添加一行配置用来启用一个设备树 overlay,请注意 的文件名部分已被移除。例如:

PL011 与 mini-UART

PL011 UART 和 mini-UART 之间存在着一些差异:

mini-UART 拥有更小的 FIFO,并且缺少对流控制的支持,这导致在更高的波特率条件下更有可能会丢失字符。相比 PL011 在功能上也会有所缺失,主要是因为其自身的波特率会受到 VPU 的时钟速度的影响。

与 PL011 相比 mini UART 最显著的缺点是:

1. 没有中断检测

2. 没有数据帧错误检测

3. 没有校验位

4. 没有接收超时中断

但无论是 mini UART 还是 PL011 在 BCM2835 上的实现都不支持 DCD,DSR,DTR 或者 RI 信号。

有关 mini UART 的更多资料可以在 /bcm2835/ 上面找到。

以下内容节选自 /documentation/computers/config_

init_uart_baud

init_uart_baud 表示 UART 初始波特率,默认为 115200

init_uart_clock

init_uart_clock 表示 UART 初始时钟频率,默认值为 48000000(48MHz)。请注意这个时钟仅会作用于 UART0(ttyAMA0),并且最大波特率被限制为时钟的 1/16。而在树莓派 3 以及 Zero 上面的默认 UART 是 UART1(ttyS0),且时钟是核心 VPU 的时钟,至少为 250 MHz。

enable_uart

enable_uart=1(配合 当中的 console=serial0 参数使用)请求内核创建一个串口终端,使用 GPIO 14 和 15 进行连接。编辑 移除命令行中的 quiet 参数以开启内核启动消息。另见 uart_2ndstage。

uart_2ndstage

设置 uart_2ndstage=1 让第二阶段的引导程序(树莓派4之前设备上的 ,或是树莓派4 EEPROM 里面的启动代码)和主固件(start*.elf)输出诊断信息到 UART0。注意可能会和蓝牙操作发生冲突,除非你禁用了蓝牙(dtoverlay=disable-bt)或切换到其他 UART(dtoverlay=miniuart-bt)上面。并且同一时间如果 UART 上面既有输入也有输出,那么数据很可能会丢失输出也会受影响。所以这项功能只应该被用来诊断早期启动加载时的问题。

参考资料:

/documentation/computers/

/documentation/computers/config_

标签:

最后一页
天天短讯!石市三部门联合发布燃气安全重要提示

精彩推荐

资讯News

  • 聚焦Policy