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-14
和GPIO-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
。业界也有一些开源软件可以使用,如putty
、MobaXterm
,大家可以按需选择。
下面以Termius
为例介绍如何连接串口:
- 在用户界面点击
SERIAL
按钮:
- 在新弹出的窗口上配置串口的端口及波特率。端口按实现使用的USB端口选择,波特率选择115200:
如果无法确定使用的端口,可以观察USB插入前后端口数量是否有变化,如有变化选择变化的端口即可;若端口数量无变化,那可能需要一个个尝试。
- 配置完成后点击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 UART
、Secondary UART
、PL011
及mini 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功能。