保姆级教程:在Orange Pi 5 Plus的Ubuntu系统上,手把手教你启用UART、I2C、SPI、PWM、CAN接口
2026/6/1 7:11:24 网站建设 项目流程

香橙派Orange Pi 5 Plus全接口配置实战指南

拿到一块全新的Orange Pi 5 Plus开发板,最令人兴奋的莫过于探索其丰富的硬件接口能力。作为一款基于Rockchip RK3588芯片的高性能单板计算机,它提供了UART、I2C、SPI、PWM和CAN等多种外设接口,为物联网和嵌入式开发打开了无限可能。但对于刚入门的新手来说,如何正确启用这些接口往往是个令人头疼的问题。

本文将带你从零开始,一步步完成所有常用接口的配置与验证。不同于官方文档的简洁风格,我们会详细解释每个操作背后的原理,并针对实际使用中可能遇到的坑给出解决方案。无论你是想连接传感器、驱动电机还是实现设备间通信,这篇指南都能帮你快速搭建起硬件开发环境。

1. 准备工作与环境确认

在开始配置之前,我们需要确保系统环境符合要求。Orange Pi 5 Plus支持多种操作系统,但本文的操作基于ubuntu-rockchip系统。如果你使用的是其他发行版,部分步骤可能需要调整。

首先,让我们确认系统版本。打开终端,执行以下命令:

cat /etc/os-release

你应该能看到类似这样的输出:

NAME="Ubuntu" VERSION="22.04.2 LTS (Jammy Jellyfish)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 22.04.2 LTS" VERSION_ID="22.04"

接下来,检查内核版本是否匹配:

uname -a

对于RK3588芯片,推荐使用5.10或更高版本的内核。如果系统不符合要求,建议先通过官方渠道获取正确的镜像并重新烧录。

注意:所有配置操作都需要root权限。可以使用sudo -i切换到root用户,或在每个命令前加sudo

2. 接口配置基础原理

Orange Pi 5 Plus的接口配置主要通过**设备树覆盖(Device Tree Overlay)**机制实现。这是一种在不修改内核源码的情况下,动态调整硬件配置的方法。简单来说,我们可以通过修改/boot/firmware/ubuntuEnv.txt文件中的overlays参数,来启用或禁用特定的硬件功能。

设备树覆盖的工作原理是:

  1. 系统启动时加载基础设备树
  2. 解析overlays参数指定的附加配置
  3. 将覆盖层应用到基础设备树上
  4. 最终形成完整的硬件描述

这种机制的好处是灵活且安全——如果某个覆盖层配置错误,只需修改文本文件并重启即可恢复,不会导致系统无法启动。

3. UART接口配置与验证

UART(通用异步收发传输器)是最常用的串行通信接口之一,广泛应用于调试终端、GPS模块等场景。Orange Pi 5 Plus提供了多个UART接口,我们以UART3为例进行配置。

3.1 编辑配置文件

首先,打开配置文件:

sudo nano /boot/firmware/ubuntuEnv.txt

找到overlays=这一行,在后面添加rk3588-uart3-m1。如果已经有其他覆盖层,用空格分隔:

overlays=rk3588-uart3-m1

保存时可能会遇到权限问题。如果nano提示无法保存,可以尝试:

sudo chmod 644 /boot/firmware/ubuntuEnv.txt

然后重新编辑保存。修改完成后,重启系统:

sudo reboot

3.2 验证UART启用

重启后,检查UART设备是否成功加载:

ls /dev/ttyS*

你应该能看到/dev/ttyS3设备文件。为了进一步测试通信功能,我们可以使用minicom:

sudo apt install minicom sudo minicom -D /dev/ttyS3 -b 115200

如果看到空白终端或乱码(因为没有连接实际设备),说明UART工作正常。按Ctrl+A然后X退出minicom。

3.3 常见问题解决

问题1:保存ubuntuEnv.txt时提示"read-only file system"

解决方案:重新挂载boot分区为可写:

sudo mount -o remount,rw /boot/firmware

问题2:重启后没有出现/dev/ttyS3

解决方案:

  1. 确认覆盖层名称拼写正确
  2. 检查dmesg日志是否有错误:
dmesg | grep uart

4. I2C接口配置与使用

I2C是一种常用的两线制串行总线,广泛用于连接各种传感器。让我们启用I2C2接口:

4.1 启用I2C接口

编辑ubuntuEnv.txt文件:

sudo nano /boot/firmware/ubuntuEnv.txt

添加I2C2的覆盖层:

overlays=rk3588-i2c2-m0

保存后重启:

sudo reboot

4.2 检测I2C设备

重启后,安装i2c工具:

sudo apt install i2c-tools

列出所有I2C总线:

i2cdetect -l

你应该能看到i2c-2总线。扫描该总线上的设备:

sudo i2cdetect -y 2

如果没有任何设备连接,输出应该是这样的:

0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --

4.3 Python操作I2C示例

安装Python的smbus库:

sudo apt install python3-smbus

创建一个简单的测试脚本i2c_test.py

import smbus # I2C总线号 bus = smbus.SMBus(2) # 假设设备地址是0x48 address = 0x48 try: # 读取一个字节 data = bus.read_byte(address) print(f"读取到的数据: {data}") except Exception as e: print(f"通信失败: {e}")

5. SPI接口配置与实践

SPI(串行外设接口)是一种高速全双工通信协议,常用于显示屏、存储设备等。

5.1 启用SPI0接口

编辑配置文件:

sudo nano /boot/firmware/ubuntuEnv.txt

添加SPI覆盖层:

overlays=rk3588-spi0-m2-cs0-spidev

保存后重启。

5.2 验证SPI设备

检查SPI设备文件:

ls /dev/spidev*

应该能看到/dev/spidev0.0。安装SPI工具:

sudo apt install spi-tools

简单测试:

sudo spidev_test -D /dev/spidev0.0

5.3 Python SPI示例

安装spidev库:

sudo pip3 install spidev

创建测试脚本spi_test.py

import spidev # 创建SPI对象 spi = spidev.SpiDev() # 打开SPI总线0,设备0 spi.open(0, 0) # 设置SPI模式和速度 spi.mode = 0 spi.max_speed_hz = 500000 # 发送数据 [0x01, 0x02, 0x03] response = spi.xfer([0x01, 0x02, 0x03]) print(f"收到的响应: {response}") spi.close()

6. PWM配置与电机控制

PWM(脉冲宽度调制)常用于电机速度控制、LED调光等场景。

6.1 启用PWM1接口

编辑配置文件:

sudo nano /boot/firmware/ubuntuEnv.txt

添加PWM覆盖层:

overlays=rk3588-pwm1-m0

保存后重启。

6.2 验证PWM接口

检查PWM设备:

ls /sys/class/pwm/

你应该能看到pwmchip1目录。导出PWM通道:

echo 0 | sudo tee /sys/class/pwm/pwmchip1/export

设置参数:

echo 1000000 | sudo tee /sys/class/pwm/pwmchip1/pwm0/period echo 500000 | sudo tee /sys/class/pwm/pwmchip1/pwm0/duty_cycle echo 1 | sudo tee /sys/class/pwm/pwmchip1/pwm0/enable

这将产生一个50%占空比的1kHz PWM信号。

7. CAN总线配置与测试

CAN(控制器局域网)是汽车和工业领域常用的通信协议。

7.1 启用CAN0接口

编辑配置文件:

sudo nano /boot/firmware/ubuntuEnv.txt

添加CAN覆盖层:

overlays=rk3588-can0-m0

保存后重启。

7.2 配置CAN接口

安装CAN工���:

sudo apt install can-utils

设置CAN接口参数:

sudo ip link set can0 type can bitrate 500000 sudo ip link set up can0

检查接口状态:

ip -details link show can0

7.3 CAN通信测试

在一个终端监听CAN消息:

candump can0

在另一个终端发送测试消息:

cansend can0 123#1122334455667788

你应该能在第一个终端看到接收到的消息。

8. 多接口同时启用配置

在实际项目中,我们往往需要同时使用多个接口。只需在overlays参数中用空格分隔多个覆盖层即可:

overlays=rk3588-uart3-m1 rk3588-i2c2-m0 rk3588-spi0-m2-cs0-spidev rk3588-pwm1-m0 rk3588-can0-m0

重启后,可以使用前面介绍的方法逐一验证各个接口是否正常工作。

9. 实际项目集成建议

当所有基础接口都配置完成后,你可能需要考虑以下进阶设置:

  1. 固定设备名称:通过udev规则为接口创建固定的符号链接
  2. 开机自启动:将接口初始化命令添加到/etc/rc.local
  3. 权限管理:创建专门的用户组并分配设备访问权限
  4. 资源冲突检查:确保不同接口没有使用相同的GPIO引脚

例如,创建udev规则固定I2C设备名称:

sudo nano /etc/udev/rules.d/99-i2c.rules

添加内容:

SUBSYSTEM=="i2c-dev", KERNEL=="i2c-[0-9]*", SYMLINK+="i2c-%n", GROUP="i2cusers", MODE="0660"

然后创建用户组并添加当前用户:

sudo groupadd i2cusers sudo usermod -aG i2cusers $USER

重新加载udev规则:

sudo udevadm control --reload-rules sudo udevadm trigger

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询