> 文章列表 > 基于RK3568的Linux驱动开发——GPIO知识点(一)

基于RK3568的Linux驱动开发——GPIO知识点(一)

基于RK3568的Linux驱动开发——GPIO知识点(一)

author daisy.skye的博客_CSDN博客-Qt,嵌入式,Linux领域博主
系列 基于RK3568的Linux驱动开发—— GPIO知识点(二)_daisy.skye的博客-CSDN博客

gpio bank

RK3568 有 5 组 GPIO bank:GPIO0~GPIO4,每组又以 A0-A7、B0-B7、 C0-C7、 D0-D7 作为编号区分,常用以下公式计算引脚

GPIO 引脚计算公式:pin = bank * 32 + number

GPIO 小组编号计算公式:number = group * 8 + X

下面演示 GPIO3_A7 引脚计算方法:

bank = 3; // GPIO3_A7 => 3, bank ∈ [0,4]

group = 0; // GPIO3_A7 => 0, group ∈ {(A=0), (B=1), (C=2), (D=3)}

X = 7; // GPIO3_A7 => 5, X ∈ [0,7]

GPIO3_A7 对应的设备树属性描述为:<&gpio3 7 IRQ_TYPE_EDGE_RISING>由kernel/include/dt-bindings/pinctrl/rockchip.h的宏定义可知,也可以将GPIO4_D5描述为<&gpio3 RK_PA7 IRQ_TYPE_EDGE_RISING>。

gpiochipX

当前SOC 一共包含5 个 GPIO 控制器,分别是:GPIO1,GPIO2,GPIO3,GPIO4,GPIO5。在这里,分别是gpiochip0 、gpiochip32 、gpiochip64 、gpiochip96 、gpiochip128 这5个文件夹,每个gpiochipX 文件夹用来管理一组GPIO。

export

export用于将指定编号的GPIO 引脚导出。在使用GPIO 引脚之前,需要将其导出,导出成功之后才能使用它。注意export 文件是只写文件,不能读取,将一个指定的编号写入到export 文件中即可将对应的GPIO 引脚导出,例如:

echo 0 > export #导出编号为0的GPIO 引脚。对应当前SOC,也就是GPIO1_IO0。

导出成功之后会发现在/sys/class/gpio 目录下生成了一个名为gpio0 的文件夹(gpioX, X 表示对应的编号)。这个文件夹就是导出来的GPIO 引脚对应的文件夹,用于管理、控制该GPIO 引脚。

unexport

unexport将导出的GPIO 引脚删除。当使用完GPIO 引脚之后,我们需要将导出的引脚删除,同样该文件也是只写、不可读的。例如:

echo 0 > unexport # 删除导出的编号为0的GPIO 引脚1

删除成功之后,之前生产的gpio0 文件夹就会消失。

导出引脚echo

export

向/sys/class/gpio/export写入此编号,比如10号引脚,在shell中可以通过以下命令实现,

echo 10 > /sys/class/gpio/export

命令成功后生成/sys/class/gpio/gpio10目录,

如果没有出现相应的目录,说明此引脚不可导出

设置gpio的direction

direction文件,定义输入输入方向,可以通过下面命令定义为输出

echo out > /sys/class/gpio/gpio10/direction

direction接受的参数:in, out,

参考链接

Linux 学习笔记:GPIO 应用编程_gpiochip0_gdut_llkkyy的博客-CSDN博客