跳转至

GPIO

GPIO(General Purpose I/O,通用输入输出端口)是 MCU/CPU 的可控制引脚,核心支持高低电平输入检测与输出。

Note

表格中 GPIO X10 代表主板拓展引脚至多可配置 10 路 GPIO。

Rockchip 平台拓展引脚 GPIO 信息如下:

主板 SOC 平台 拓展引脚
K1 RK3568 Rockchip GPIO X28
K1B RK3568 Rockchip GPIO X14
K3 RK3562 Rockchip GPIO X11
K7 RK3576 Rockchip GPIO X22
K7C RK3576 Rockchip GPIO X23
K8 RK3588 Rockchip GPIO X22

Allwinner 平台拓展引脚 GPIO 信息如下:

主板 SOC 平台 Kernel 拓展引脚
K2B H618 Allwinner 5.4 GPIO X10
K2C H618 Allwinner 5.4 GPIO X15
K4B T113 Allwinner 5.4 GPIO X22
K5C A133 Allwinner 4.9 GPIO X10

引脚号计算

Rockchip

Rockchip 平台引脚的 ID 由控制器(bank)+ 端口(port)+ 索引序号(pin)组成,如 GPIO1_C4。

Rockchip 平台引脚号 = (控制器 x 32) + (端口 x 8) + 索引序号。

例如 GPIO1_C4 表达的意思为第 1 组控制器,端口号为 C,索引号为 4,则引脚号 = (1 x 32) + (2 x 8) + 4 = 52。

Allwinner

Allwinner 平台引脚的 ID 由控制器端口(port)+ 索引序号(pin)组成,如 PH8。

Allwinner 平台引脚号 = (控制器端口 x 32) + 索引序号。

例如 PH8 表达的意思为第 7 组控制器,索引序号为 8,则引脚号 = (7 x 32) + 8 = 232 。

可通过命令在主板上查看引脚号:

cat /d/pinctrl/pio/pins
cat /d/pinctrl/r_pio/pins

gpios 配置

各平台设备树中 GPIO 配置语法不同,请根据实际平台查看。

Rockchip

Rockchip 平台 dts 节点 gpios 配置如下:

gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_HIGH>;
gpios = <&A     B      C>;

Note

&A 引用 GPIO 控制器节点,Rockchip 常见控制器:&gpio0~&gpio7(通用 GPIO)。
B 引脚标识宏,格式为 RK_<Bank><编号>:- Bank:PA~PD(端口组)。
C 引脚极性 / 配置属性,标准宏定义:- GPIO_ACTIVE_HIGH(高电平有效)、GPIO_ACTIVE_LOW(低电平有效)。

Allwinner Kernel 4.9

Allwinner 平台 Kernel 4.9 版本 dts 节点 gpios 配置如下:

gpios = <&pio   PH 0x8 0x0 0x1 0x0 0x1>;
gpios = <&r_pio PL 0x4 0x0 0x1 0x0 0x1>;
gpios = <&A     B  C   D   E   F   G>;

Note

命令解析:
&A &pio/&r_pio 指定 pio,属于 cpus 要用 &r_pio (PL之后的)。
B PH/PL 指定 gpio 的 bank。
C 0x8/0x4 指定 bank 中的哪个引脚。
D 复用类型。
E 上下拉,值为 0x1 时采用默认值。
F 驱动能力,值为 0x0 时采用默认值。
G 输出电平,只用 output 才有效。

Allwinner Kernel 5.4

Allwinner 平台 Kernel 5.4 版本 dts 节点 gpios 配置如下

gpios = <&pio   PH 8 GPIO_ACTIVE_HIGH>;
gpios = <&r_pio PL 4 GPIO_ACTIVE_HIGH>;
gpios = <&A     B  C D>;

Note

命令解析:
&A 引用 GPIO 控制器节点,Allwinner 常见控制器:&pio &r_pio
B GPIO端口, Bank:PB ~ PI 、PL
C 端口内引脚序号
D 引脚极性 / 配置属性,标准宏定义:- GPIO_ACTIVE_HIGH(高电平有效)、GPIO_ACTIVE_LOW(低电平有效)

leds 配置

DTS 配置

leds 节点配置示例如下

leds {
    compatible = "gpio-leds";
    gpio3a4: gpio3a4 {
        label = "gpio3a4";
        gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_HIGH>; // 根据不同平台修改 gpios 配置
        default-state = "off";
    };
};

sysfs 接口控制

Tip

$gpio 指列举的控制节点

列举已注册的 GPIO 控制节点:

ls /sys/class/leds/

控制 GPIO 输出电平状态:

操作目的 执行命令 说明
点亮 LED echo 1 > /sys/class/leds/$gpio/brightness 仅适用于 GPIO_ACTIVE_HIGH 配置
熄灭 LED echo 0 > /sys/class/leds/$gpio/brightness 仅适用于 GPIO_ACTIVE_HIGH 配置
点亮 LED(低电平有效) echo 0 > /sys/class/leds/$gpio/brightness 适用于 GPIO_ACTIVE_LOW 配置(电平反转)
熄灭 LED(低电平有效) echo 1 > /sys/class/leds/$gpio/brightness 适用于 GPIO_ACTIVE_LOW 配置(电平反转)

硬件使用示例

此处采用 K7 进行操作示例。

  • GPIO3_A4 引脚

查看 K7 拓展引脚图可知引脚32 为 GPIO3_A4。

image-20251110143102413

image-20251110185100746

查看控制节点, 控制 GPIO3_A4 输出高电平电平,万用表测量引脚电压为 1.8V。

root@kickpi-k7:/home/kickpi# su kickpi
kickpi@kickpi-k7:~$ su root
Password: 
root@kickpi-k7:/home/kickpi# ls /sys/class/leds/
4g_pwr  fan  gpio0a5  gpio3a4  gpio3b0  gpio3d0  gpio4b0  mmc0::  sd_pwr  work
root@kickpi-k7:/home/kickpi# echo 1 >  /sys/class/leds/gpio3a4/brightness