03 GPIO介绍
GPIO(General-Purpose Input/Output)即通用输入/输出端口,是芯片上与外部设备或电路进行数字信号(0和1)通信的最基本、最常用的接口。每个GPIO引脚都可以通过软件配置为输入或输出模式,从而实现:
- 输入模式:读取外部信号(如按键状态、传感器高低电平)
- 输出模式:控制外部设备(如点亮LED、控制继电器、发送简单信号)
其中,RK3568提供了多达5个GPIO Bank(组),通常标记为 GPIO0 ~ GPIO4。每个Bank有32个引脚(但并非所有引脚都被引出),理论上最多支持 160个GPIO,但实际可用数量取决于芯片的具体封装和引脚复用情况。
一般 IO 的输出电平有 1.8v,3.0v,3.3v等,不同的输出电压取决于IO所在的电源域电压,这个与硬件供电有关系。对应本例程使用的RK3568,不同的IO对应的电压域如下:
- GPIO0:通常位于 3.3V 电压域
- GPIO1 ~ GPIO4:通常位于 1.8V 电压域(部分型号可能支持3.3V,需查阅具体手册)
还需要注意的是GPIO的命名,Rockchip Pin的ID按照 控制器(bank)+端口(port)+索引序号(pin) 组成。
- 控制器和GPIO控制器数量一致
- 端口固定 A、B、C和D,每个端口仅有8个索引号,(a=0,b=1,c=2,d=3)
- 索引序号固定 0、1、2、3、4、5、6、7
RK3568具有5个GPIO控制器,每个控制器可以控制32个IO,作为GPIO功能时,端口行为由GPIO控制器寄存器配置。
举例:GPIO1_A4表达的意思为第1组控制器,端口号为A,索引号为4。该引脚号的计算公式为32 x 1 + 0 x 8 + 4 = 36。GPIO5_B3计算结果为32 x 5 + 8 x 1 + 3 = 171
1 GPIO板卡接口

2 GPIO使用---命令行方式
2.1 原理介绍
以常见的echo命令举例,Linux内核提供了一套在用户态调试GPIO的接口,在 /sys/class/gpio/
目录下。
这个目录是 Linux 内核 GPIO 子系统 通过 Sysfs 文件系统向用户空间提供的操控接口,其中Sysfs是一个虚拟的文件系统,它把内核中的设备、驱动、模块等信息以文件和目录的形式展示给用户,挂载在 /sys
目录下,/sys/class/
是其中一类。
2.2 操作GPIO的常用指令
我们使用HDC工具在终端进入板子的对应目录下就可以对GPIO进行操作:

其中:
- export 文件用于通知系统导出需要控制的GPIO引脚编号
- unexport 用于通知系统取消导出(这是因为用户态不能直接操作内核进行GPIO控制,使用这个命令后linux内核会创建用户访问接口,即创建一个控制文件,取消导出时会释放资源,删除控制文件)
- gpiochipN 保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号base,寄存器名称,引脚总数
举例导出引脚GPIO0_C5的操作。首先计算此引脚编号,GPIO0_C5= 8 X 2 + 5 = 21。
导出gpio引脚:
相关信息
下列指令中,‘#”之前的部分为文件路径,’#‘之后的部分为指令,实际使用时,我们只需要输入对应的指令即可!!!
建议大家通过照着教程手敲代码的方式进行操作。
console:/sys/class/gpio# echo 21 > export
设置输入输出,"in"为输入,"out"为输出:
console:/sys/class/gpio/gpio21# echo out > direction
查看方向:使用cat指令
console:/sys/class/gpio/gpio21# cat direction
设置输出高电平:
console:/sys/class/gpio/gpio21# echo 1 > value
查看输入输出(需要先切换为输入模式):
console:/sys/class/gpio/gpio21# cat value
取消导出:
console:/sys/class/gpio# echo 21 > unexport
上述操作需要确保IO复用为GPIO功能,才能做正常的GPIO操作。
2.3 具体功能演示
在板子中使用上述指令进行操作,进入 /sys/class/gpio/
目录,执行下列操作:

将IO0_C5设置为高电平输出:

使用万用表对引脚进行测量,成功输出高电平:

再将IO0_C5设置为低电平输出:

使用万用表对引脚进行测量,成功输出低电平:

返回上一级目录,取消导出的IO即可:
