Raspberry Pi OS上如何使用串口

前言

本文主要介绍使用Raspberry OS时如何打开串口功能。因为针对自定义内核的场景,串口调试相对来说较为实用。我所使用的树莓派为3代B版,其它版本的树莓派可以用相似方法打开串口调试功能。在部分可能会有差异的步骤上,我会给出相应的官网链接。
在使用串口前,有兴趣的读者可以了解一些基本的概念。如不关注基本概念的,可以直接跳过。

基本概念

1. UART

UART的全称是 Universal Asynchronous Receiver/Transmitter ,即通用异步收发器。其是一种可以用于异步通信全双工(全双工即在接收数据和发送数据可以同时进行)总线。在嵌入式上,我们经常使用UART来连接PC与设备。
树莓派3B使用的是ARM架构的博通BCM2835芯片,从该芯片的Specification中可以查到(Page 175),树莓派3B上有两个UART——mini UART和PL011。

2. PL011

很遗憾没有查到PL011的具体命名来历,从ARM官网和芯片的Specification可知,PL011是ARM上特有的UART实现:

3. mini UART

mini UART是树莓派提供的低吞吐量的UART实现,主要用于终端输出。相较于PL011,其功能更弱,比如没有帧错误检查等。而且在树莓派上,mini UART是默认关闭的,如需使用需要手动使能。具体可以参考芯片Specification中的章节Section 2.2

4. USB转TTL串口

TLL是指双极型三极管逻辑电路,USB转TTL模块主要用于转为数字信号和电平信号。常见的USB转TTL串口线如下:

四条线的作用分别如下:

  • 黑色:GND,接地
  • 红色:电源线,接5V电源
  • 白色:RX线,R即Receive
  • 绿色:TX线,T即Transmit

关于TTL的更多内容可参考:ttl是什么意思(TTL、RS-232、RS-485这么多接口)

5. Primary UART

在树莓派上使用GPIO-14GPIO-15分别用于串口的输出和输入,这个UART被称为Primary UART。详细可见Primary UART

6. Secondary UART

树莓派上,secondary UART不体现到GPIO上,默认是连接到wireless LAN/Bluetooth控制器的蓝牙端。详细可见Secondary UART

树莓派连接串口

树莓派3B大概长下面这样:

其中左侧排针为GPIO端口,各个GPIO端口的作用可以看硬件datasheet
其中串口使用的GPIO如下:

即我们使用PIN4作为电源,PIN6 作为接地端,PIN8作为UART的TX(输出),PIN10作为UART的RX(输入)。参考之前USB转TTL模块四条线的作用,实际接线如下:

此处需要注意的是,前面讲USB转TTL模块时提到白色是RX线,绿色是TX线,所以白色线需要接PIN8接收UART的输出,而绿色线需要接PIN10输入给UART。

PC使用终端工具连接串口

连接完树莓派和串口线之后,我们需要将PC与串口线连接在一起,直接将串口线的USB端接到PC即可。然而我们如果想要使用串口进行调试,则还需要使用工具获取串口线上的数据或发送数据。
要在PC上实现数据的收发,我们可以使用终端工具。由于我使用的是macos,所以我使用的是免费应用Termius。业界也有一些开源软件可以使用,如puttyMobaXterm,大家可以按需选择。
下面以Termius为例介绍如何连接串口:

  1. 在用户界面点击SERIAL按钮:

  1. 在新弹出的窗口上配置串口的端口及波特率。端口按实现使用的USB端口选择,波特率选择115200:

如果无法确定使用的端口,可以观察USB插入前后端口数量是否有变化,如有变化选择变化的端口即可;若端口数量无变化,那可能需要一个个尝试。

  1. 配置完成后点击connect即可。

Raspberry Pi OS打开UART功能

树莓派3B上的两个UART中,PL011是作为Secondary UART,而mini UART是作为Primary UART

前面有提到,mini UART是默认关闭的,因此若要打开串口调试功能,需要把mini UART使能。不过在使能前,我们要先确认下mini UART是不是真的关闭了。

1. 确认mini UART使能状态

Linux中的设备在操作系统上都体现为文件(Everything is a file),设备一般都在/dev下有相应的设备节点。根据树莓派官网的说明Primary UARTSecondary UARTPL011mini UART在Linux上的对应的文件如下:

从上图可知,树莓派3B板黑夜情况下应该没有/dev/serial0文件和/dev/ttyS0文件。我们使用SSH连接上树莓派后,确认默认情况下,确实没有这两个文件,即mini UART是默认不使能的:

2. 使能mini UART

mini UART的使能比较简单,修改SD卡中的配置文件即可。SD卡的文件内容在/boot文件下。我们连上树莓派后,可以修改/boot/config.txt文件,增加一行配置:

enable_uart=1

需要注意的是,修改文件需要使用root权限,或使用sudo提权。
修改后重启树莓派即可发现/dev目录下新增了文件/dev/serial0/dev/ttyS0:

3. 使能启动打印

在上一步完成mini UART的使能之后,我们会发现串口已经有数据了,而且键盘回车后会有输出,如下:

但是这输出打印并不会包含启动log。我们通过修改配置内核启动命令解决这问题。方式也比较简单,即修改/boot/cmdline.txt文件,删除文件中quiet配置:

官方文档上对quiet配置的说明是将内核打印级别设置为KERN_WARNING

修改文件并重新启动后,我们可以看到界面上已经有启动log了,如下:

其它说明

本文的串口使用只针对Raspberry Pi OS系统,若使用其它系统,可能配置方式存在差异,甚至需要自行支持UART功能。

留言

您的邮箱地址不会被公开。 必填项已用 * 标注