GPIO基本概念
GPIO,即General-Purpose Input/Output,指的是可以由软件控制的通用输入输出引脚。每个GPIO引脚可以配置为输入或输出,用来读取外部设备的状态(如按键)或控制外设(如LED、马达等)
GPIO应用领域
GPIO作为嵌入式设备中不可或缺的接口,在以下多个领域有广泛应用:
● 智能家居:用于控制和监测家电、灯光、窗帘、传感器等智能设备,通过GPIO引脚读取传感器状态或发送控制信号。
● 工业自动化:GPIO用于连接和控制工业机器、机器人、传感器等设备,通过简单的开关控制机制实现自动化流程。
● 物联网(IoT):GPIO在物联网设备中广泛应用,用于与传感器、执行器(如继电器)等设备通信,实现数据采集和设备控制。
● 汽车电子:在车载系统中,GPIO用于与各种车载传感器和执行器连接,提供控制信号,如车灯、门锁、报警器等的控制。
● 机器人技术:GPIO用于控制机器人中的电机、传感器和其他外部设备,实现精准的硬件控制和反馈处理。
使用RK3588处理器上的GPIO接口
在RK3588平台上,GPIO的使用非常灵活,既可以通过内核提供的sysfs接口进行控制,也可以通过debugfs进行调试。下面我们将介绍如何通过这两种方式来操作GPIO。
01
GPIO选择
可以看到5号管脚的网络标号为UART9_RX_M0_BT,然后打开pin脚复用手册,根据这个网络标号进行搜索,查找到的复用内容如下所示:
可以看到GPIO引脚编号GPIO2_C4,我们将LED的正极连接到这GPIO,负极连接到GND。
02
使用sysfs接口控制GPIO
GPIO软件编程方式有多种,可以写驱动程序调用GPIO函数操作GPIO,也可以直接通过操作寄存器的方式操作GPIO,还可以通过sysfs方式实现对GPIO的控制。
sysfs接口是Linux内核提供的一种标准方式,允许用户在用户空间操作GPIO。通过简单的命令行操作,就可以控制GPIO引脚,点亮或熄灭LED。这里我们使用较为简单的用户空间控制GPIO的方法,通过配置GPIO为输出模式,向其写入高电平(1)或低电平(0)来控制LED的开关。
▸引脚号计算
引脚编号=控制寄存器的寄存器基数+控制引脚寄存器位数。
GPIO2_PC4 pin脚计算方法:
bank = 2; //GPIO2_C4=> 2, bank ∈ [0,4]group = 2; //GPIO2_C4 => 2, group ∈ {(A=0), (B=1), (C=2), (D=3)}X = 4; //GPIO2_C4=>4, X ∈ [0,7]number = group * 8 + X = 2 * 8 + 4 =20;pin = bank*32 + number= 2 * 32 + 20 = 84;
▸ 导出GPIO引脚
echo 84 > /sys/class/gpio/export
▸ 配置GPIO为输出模式
接下来,设置该GPIO引脚为输出模式:
echo "out" > /sys/class/gpio/gpio84/direction
▸ 控制LED开关
通过向GPIO的value文件写入1或0来控制LED的状态:
打开LED:
echo 1 > /sys/class/gpio/gpio84/value
关闭LED:
echo 0 > /sys/class/gpio/gpio84/value
▸ 释放GPIO引脚
使用完毕后,可以将GPIO从用户空间移除:
echo 84 > /sys/class/gpio/unexport
03
GPIO调试
在更高级的调试场景中,debugfs文件系统提供了对GPIO引脚状态和复用情况的深入查看和调试能力。可以通过以下步骤获取GPIO的详细信息:
▸ 查看GPIO的输入/输出模式、上拉/下拉设置等电气属性
cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinconf-pins | grep 84
▸ 查看每个引脚的功能模式、引脚复用选择以及其他相关的配置信息
cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins | grep 84
通过这个文件,你可以确认每个引脚的当前复用配置,例如某个引脚可能被复用为UART、SPI等设备的控制引脚。如果想要重新配置为GPIO引脚,可以通过设备树进行调整。