GPIO控制和命名规则

Linux提供了GPIO子系统驱动框架,使用该驱动框架即可灵活地控制板子上的GPIO。

GPIO命名

泰山派开发板板载了一个40PIN 2.54间距的贴片排针,排针的引脚定义兼容经典40PIN接口。

GPIO控制和命名规则_第1张图片

在后续对GPIO进行操作前,我们需要先了解k3566的GPIO命名规则, 此处以 GPIO0_B7 举例:

GPIO

0

B7

控制器(bank)

端口(port)

索引序号(pin)

  • 控制器(bank):rk3566有5个GPIO控制器分别是GPIO0-GPIO4,一个控制器下面包含ABCD个端口,每个端口下有包含0-7个索引序号,所以一个控制器可控制32个IO引脚。
  • 端口(port): A、B、C、D。对应着数字:0-3所以A=0、B=1、C=2、D=3
  • 索引序号(pin):固定为0-7共计8个数

代入 GPIO0_B7 ,该引脚的 ID 可以按照以下规则组成:

控制器 (bank) 为 0,表示第 0 组控制器。

端口(port)为 B,表示端口号为1。

索引序号(pin)为7。

根据计算公式:32 x 0 + 1 x 8 + 7 = 15,可以得到引脚ID为15。

sysfs操控GPIO

在Linux中,最常见的读写GPIO方式就是用GPIO sysfs interface, 是通过操作 /sys/class/gpio 目录下的 exportunexportgpio{N}/direction, gpio{N} /value (用实际引脚号替代{N})等文件实现的,经常出现shell脚本里面。 在kernel 4.8开始,加入了libgpiod的支持;而原有基于sysfs的访问方式,将被逐渐放弃。

GPIO输出测试

使用杜邦线连接GPIO0_B7 引脚 和 核心板的P53引脚,看看能否使用下面的代码控制核心板的LED,实现亮灭效果。当然也可以接入逻辑分析仪,通过查看高低电平的变化。

#以下所有操作均需要打开管理者权限使用

# 将引脚号 15 导出为 GPIO 引脚,使其可以被访问和控制。
echo 15 > /sys/class/gpio/export

# 将引脚号 15 的方向设置为输出模式,即设置为输出引脚。
echo out > /sys/class/gpio/gpio15/direction

# 将引脚号 15 的值设置为 1,即将引脚设置为高电平。
echo 1 > /sys/class/gpio/gpio15/value

# 将引脚号 15 的值设置为 0,即将引脚置设置为低电平。
echo 0 > /sys/class/gpio/gpio15/value 

# 将引脚号 15 解除导出,即取消对引脚号 15 的 GPIO 控制权。
echo 15> /sys/class/gpio/unexport

GPIO输入测试

使用杜邦线连接GPIO0_B7 引脚 和 核心板的P32引脚(核心板上面的按钮外接了P32) ,然后对按键进行按下和弹起操作,并且通过下面的代码打印出来的值。

#以下所有操作均需要打开管理者权限使用

# 将引脚号 15 导出为 GPIO 引脚,使其可以被访问和控制。
echo 15 > /sys/class/gpio/export

# 将引脚号 15 的方向设置为输入模式,即设置为输入引脚。
echo in > /sys/class/gpio/gpio15/direction

# 读引脚的值,结果为1或0,更具引脚实际电平决定。
cat /sys/class/gpio/gpio15/value 

# 将引脚号 15 解除导出,即取消对引脚号 15 的 GPIO 控制权。
echo 15> /sys/class/gpio/unexport

libgpiod操控GPIO

libgpiod是一种字符设备接口,GPIO访问控制是通过操作字符设备文件(比如 /dev/gpiodchip0 gpio控制器)实现的, 并通过libgpiod提供一些命令工具、c库以及python封装。想要使用libgpiod,需要在板卡上安装libgpiod库。

#安装libgpiod库及头文件
sudo apt install  libgpiod-dev 

#安装gpiod 命令行工具
sudo apt install gpiod

常用的命令行如下,可使用 -h 查看命令相对应的使用说明(以GPIO0_B7为例)

命令

作用

使用举例

说明

gpiodetect

列出所有的GPIO控制器

gpiodetect(无参数)

列出所有的GPIO控制器

gpioinfo

列出gpio控制器的引脚情况

gpioinfo 0

列出第0组控制器引脚组情况

gpioset

设置gpio

gpioset 0 15=0

设置第0组控制器编号7引脚为低电平

gpioget

获取gpio引脚状态

gpioget 0 15

获取第0组控制器编号7的引脚状态

gpiomon

监控gpio的状态

gpiomon 0 15

监控第0组控制器编号7的引脚状态

你可能感兴趣的:(泰山派,单片机,嵌入式硬件,物联网)